@@ -540,6 +540,12 @@ describe('some', async () => {
540540 create required property age: int32;
541541 create required property city: str;
542542 };" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
543+
544+ await $ `gel query "CREATE TYPE default::users_on_update_sql {
545+ create required property id1: int16;
546+ create required property name: str;
547+ create required property updated_at: datetime;
548+ };" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
543549 } ) ;
544550
545551 afterEach ( async ( ) => {
@@ -555,6 +561,7 @@ describe('some', async () => {
555561 await $ `gel query "DELETE default::users1;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
556562 await $ `gel query "DELETE default::users2;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
557563 await $ `gel query "DELETE default::jsontest;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
564+ await $ `gel query "DELETE default::users_on_update_sql;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
558565 } ) ;
559566
560567 afterAll ( async ( ) => {
@@ -601,6 +608,7 @@ describe('some', async () => {
601608 await $ `gel query "DROP TYPE default::users_with_names" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
602609 await $ `gel query "DROP MODULE mySchema;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
603610 await $ `gel query "DROP TYPE users_with_age;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
611+ await $ `gel query "DROP TYPE default::users_on_update_sql;" --tls-security=${ tlsSecurity } --dsn=${ dsn } ` ;
604612 } ) ;
605613
606614 async function setupSetOperationTest ( db : GelJsDatabase ) {
@@ -4801,6 +4809,35 @@ describe('some', async () => {
48014809 expect ( config2 . enableRLS ) . toBeFalsy ( ) ;
48024810 } ) ;
48034811
4812+ test ( 'test $onUpdateFn and $onUpdate works with sql value' , async ( ctx ) => {
4813+ const { db } = ctx . gel ;
4814+
4815+ const users = gelTable ( 'users_on_update_sql' , {
4816+ id : integer ( 'id1' ) . notNull ( ) ,
4817+ name : text ( 'name' ) . notNull ( ) ,
4818+ updatedAt : timestamptz ( 'updated_at' ) . notNull ( ) . $onUpdate ( ( ) => sql `now()` ) ,
4819+ } ) ;
4820+
4821+ const insertResp = await db . insert ( users ) . values ( {
4822+ id : 1 ,
4823+ name : 'John' ,
4824+ } ) . returning ( {
4825+ updatedAt : users . updatedAt ,
4826+ } ) ;
4827+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
4828+
4829+ const now = Date . now ( ) ;
4830+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
4831+ const updateResp = await db . update ( users ) . set ( {
4832+ name : 'John' ,
4833+ } ) . returning ( {
4834+ updatedAt : users . updatedAt ,
4835+ } ) ;
4836+
4837+ expect ( new Date ( insertResp [ 0 ] ?. updatedAt . toISOString ( ) ?? 0 ) . getTime ( ) ) . lessThan ( now ) ;
4838+ expect ( new Date ( updateResp [ 0 ] ?. updatedAt . toISOString ( ) ?? 0 ) . getTime ( ) ) . greaterThan ( now ) ;
4839+ } ) ;
4840+
48044841 test ( '$count separate' , async ( ctx ) => {
48054842 const { db } = ctx . gel ;
48064843
0 commit comments