An example of a migration: Postgresql throws the exception then in ValidationException.strings I have: { "UniqueConstraintException.login_idx" = "Please choose a different login (It must be unique).";
"Quote.quoteAmount"="You must enter a dollar amount in the format 123.00 (you entered @@escapedValue@@)!"; } To present readable error. Is this what you are looking for? ERXMigrationTable personTable = database.newTableNamed("Person"); personTable.newFlagBooleanColumn("active", NOT_NULL); personTable.newLargeStringColumn("addressline1", ALLOWS_NULL); personTable.newLargeStringColumn("addressline2", ALLOWS_NULL); personTable.newLargeStringColumn("city", ALLOWS_NULL); personTable.newDateColumn("creationdate", NOT_NULL); personTable.newIntegerColumn("financialID", NOT_NULL); personTable.newLargeStringColumn("firstname", NOT_NULL); personTable.newIntegerColumn("id", NOT_NULL); personTable.newLargeStringColumn("lastname", NOT_NULL); personTable.newLargeStringColumn("login", ALLOWS_NULL); personTable.newLargeStringColumn("password", ALLOWS_NULL); personTable.newIntegerColumn("securityID", NOT_NULL); personTable.newLargeStringColumn("state", ALLOWS_NULL); personTable.newLargeStringColumn("zipcode", ALLOWS_NULL); personTable.create(); personTable.setPrimaryKey("id"); personTable.addIndex(new ERXMigrationIndex( "login_idx", true ,new ColumnIndex("login") )); From: "Ted Petrosky (WO)" <webobjects-dev@lists.apple.com> Reply-To: Jesse Tayler <jtay...@oeinc.com> Date: Wednesday, November 24, 2021 at 9:41 AM To: Samuel Pelletier <sam...@samkar.com> Cc: "Ted Petrosky (WO)" <webobjects-dev@lists.apple.com> Subject: Re: Single thread creation queue? A collation would also work, I don’t think there’s a need to preserve case but I guess I have thus far and perhaps that’s an easier route than attempting to alter data in place, I could simply add the function in a way it can blend in perhaps. I tried to find a decent wiki page, but does anyone have good examples of migrations that add constraints or do fancy stuff? Do I have to stuff raw SQL into a migration or are there functions I can’t see in there-- On Nov 24, 2021, at 8:52 AM, Samuel Pelletier <sam...@samkar.com<mailto:sam...@samkar.com>> wrote: Jesse, If you specify a case insensitive collation for your column in the table, you can preserve case and maintains case insensitive uniqueness. If you do not know about collation, begin by reading on the subject, they basically define how to compare and sort strings values. Depending on the probability of duplicate and how you want to handle this problem, you can try-catch or pre check before saving, you probably prefer try-catch because it save a round-trip to the database. Tu use try-catch, you need the contraint in the database though. Samuel Le 24 nov. 2021 à 08:02, Jesse Tayler <jtay...@oeinc.com<mailto:jtay...@oeinc.com>> a écrit : so, basically, you are suggesting that I store them flat lowercase and put a constraint on these two strings and just lose any case the user entered which is fine I think. With the lowercase assured the constraint will prevent duplicates and I’d catch that exception during creation and handle it On Nov 24, 2021, at 12:19 AM, Samuel Pelletier <sam...@samkar.com<mailto:sam...@samkar.com>> wrote: If your usernames (or keyString) are case insensitive, store them in a normalized case (in lowercase for exemple). You can add an overridden public void setKeyString(String value) { if (value != null) { value = value.toLowerCase(); } super.setKeyString(value); } You may also specify a collation to the column in the database if you want to preserve case but index and compare as case insensitive. Samuel Le 23 nov. 2021 à 17:26, Jesse Tayler via Webobjects-dev <webobjects-dev@lists.apple.com<mailto:webobjects-dev@lists.apple.com>> a écrit : On Nov 23, 2021, at 5:17 PM, Paul Hoadley <pa...@logicsquad.net<mailto:pa...@logicsquad.net>> wrote: Are you able to paste in some code? There's probably a solution, but this is getting a bit hard to follow in the abstract. So, I fetch first EOQualifier qual = DataPoint.TYPE.eq("twitter").and(DataPoint.KEY_STRING.likeInsensitive(username)); If there’s no EO, I create and save right away but at high volumes this CREATE statement must create only unique entries and those entries must match this qualifier which uses insensitive case I figure the pattern should be to create an object with a DB level constraint such that a duplicate raises an error, upon catching that error, I can simply fetch again and return the one, single EO representing that record When I tried regular constraints I did not see a way to replicate the required logic, so I found some advise about triggers and some other things I didn’t fully understand. I realize usernames generally have this kind of issue, so I figure this is a design pattern that is hardly unique to us and I should get advice! _______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com<mailto:Webobjects-dev@lists.apple.com>) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com This email sent to sam...@samkar.com<mailto:sam...@samkar.com>
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com