skip unnecessary validator in case the default pattern is used
This commit is contained in:
		
							parent
							
								
									7481c3f7f4
								
							
						
					
					
						commit
						35196674e6
					
				|  | @ -28,6 +28,8 @@ const ( | ||||||
| 
 | 
 | ||||||
| const systemHookIdCollection = "__pbCollectionSystemHook__" | const systemHookIdCollection = "__pbCollectionSystemHook__" | ||||||
| 
 | 
 | ||||||
|  | const defaultLowercaseRecordIdPattern = "^[a-z0-9]+$" | ||||||
|  | 
 | ||||||
| func (app *BaseApp) registerCollectionHooks() { | func (app *BaseApp) registerCollectionHooks() { | ||||||
| 	app.OnModelValidate().Bind(&hook.Handler[*ModelEvent]{ | 	app.OnModelValidate().Bind(&hook.Handler[*ModelEvent]{ | ||||||
| 		Id: systemHookIdCollection, | 		Id: systemHookIdCollection, | ||||||
|  | @ -890,7 +892,7 @@ func (c *Collection) initIdField() { | ||||||
| 			Required:            true, | 			Required:            true, | ||||||
| 			Min:                 15, | 			Min:                 15, | ||||||
| 			Max:                 15, | 			Max:                 15, | ||||||
| 			Pattern:             `^[a-z0-9]+$`, | 			Pattern:             defaultLowercaseRecordIdPattern, | ||||||
| 			AutogeneratePattern: `[a-z0-9]{15}`, | 			AutogeneratePattern: `[a-z0-9]{15}`, | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -903,7 +905,7 @@ func (c *Collection) initIdField() { | ||||||
| 		field.PrimaryKey = true | 		field.PrimaryKey = true | ||||||
| 		field.Hidden = false | 		field.Hidden = false | ||||||
| 		if field.Pattern == "" { | 		if field.Pattern == "" { | ||||||
| 			field.Pattern = `^[a-z0-9]+$` | 			field.Pattern = defaultLowercaseRecordIdPattern | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -192,15 +192,17 @@ func (f *TextField) ValidateValue(ctx context.Context, app App, record *Record) | ||||||
| 			// side-effects on some platforms check for duplicates in a case-insensitive manner
 | 			// side-effects on some platforms check for duplicates in a case-insensitive manner
 | ||||||
| 			//
 | 			//
 | ||||||
| 			// (@todo eventually may get replaced in the future with a system unique constraint to avoid races or wrapping the request in a transaction)
 | 			// (@todo eventually may get replaced in the future with a system unique constraint to avoid races or wrapping the request in a transaction)
 | ||||||
| 			var exists bool | 			if f.Pattern != defaultLowercaseRecordIdPattern { | ||||||
| 			err := app.DB(). | 				var exists bool | ||||||
| 				Select("(1)"). | 				err := app.DB(). | ||||||
| 				From(record.TableName()). | 					Select("(1)"). | ||||||
| 				Where(dbx.NewExp("id = {:id} COLLATE NOCASE", dbx.Params{"id": strings.ToLower(newVal)})). | 					From(record.TableName()). | ||||||
| 				Limit(1). | 					Where(dbx.NewExp("id = {:id} COLLATE NOCASE", dbx.Params{"id": strings.ToLower(newVal)})). | ||||||
| 				Row(&exists) | 					Limit(1). | ||||||
| 			if exists || (err != nil && !errors.Is(err, sql.ErrNoRows)) { | 					Row(&exists) | ||||||
| 				return validation.NewError("validation_pk_invalid", "The record primary key is invalid or already exists.") | 				if exists || (err != nil && !errors.Is(err, sql.ErrNoRows)) { | ||||||
|  | 					return validation.NewError("validation_pk_invalid", "The record primary key is invalid or already exists.") | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue