@@ -178,8 +178,8 @@ func TestExtractRpcWithPrefix(t *testing.T) {
178178 where sc.name = in_scouter_name and c.name = in_candidate_name ; end;
179179 ` ,
180180 CompleteStatement : `
181- CREATE OR REPLACE FUNCTION public.get_submissions(in_scouter_name character varying, in_candidate_name character varying)\n
182- RETURNS TABLE(id integer, created_at timestamp without time zone, sc_name character varying, c_name character varying)\n
181+ CREATE OR REPLACE FUNCTION public.get_submissions(in_scouter_name character varying, in_candidate_name character varying, in_register date )\n
182+ RETURNS TABLE(id integer, created_at timestamp without time zone, sc_name character varying, c_name character varying, in_register date )\n
183183 LANGUAGE plpgsql\n
184184 AS $function$
185185 begin return query
@@ -202,6 +202,12 @@ func TestExtractRpcWithPrefix(t *testing.T) {
202202 TypeId : 1043 ,
203203 HasDefault : false ,
204204 },
205+ {
206+ Mode : "in" ,
207+ Name : "in_register" ,
208+ TypeId : 1043 ,
209+ HasDefault : false ,
210+ },
205211 {
206212 Mode : "table" ,
207213 Name : "id" ,
@@ -227,10 +233,10 @@ func TestExtractRpcWithPrefix(t *testing.T) {
227233 HasDefault : false ,
228234 },
229235 },
230- ArgumentTypes : "in_scouter_name character varying, in_candidate_name character varying" ,
231- IdentityArgumentTypes : "in_scouter_name character varying, in_candidate_name character varying" ,
236+ ArgumentTypes : "in_scouter_name character varying, in_candidate_name character varying, in_register date " ,
237+ IdentityArgumentTypes : "in_scouter_name character varying, in_candidate_name character varying, in_register date " ,
232238 ReturnTypeID : 2249 ,
233- ReturnType : "TABLE(id integer, created_at timestamp without time zone, sc_name character varying, c_name character varying)" ,
239+ ReturnType : "TABLE(id integer, created_at timestamp without time zone, sc_name character varying, c_name character varying, register date )" ,
234240 ReturnTypeRelationID : 0 ,
235241 IsSetReturningFunction : true ,
236242 Behavior : string (raiden .RpcBehaviorVolatile ),
@@ -518,6 +524,106 @@ func TestGenerateRpc(t *testing.T) {
518524 assert .FileExists (t , dir + "/internal/rpc/get_submissions.go" )
519525}
520526
527+ func TestGenerateRpc_DateType (t * testing.T ) {
528+ fns := []objects.Function {
529+ {
530+ Schema : "public" ,
531+ Name : "get_latest_active_rates_by_tenant" ,
532+ Language : "sql" ,
533+ Definition : "\n select distinct on (tr.tax_id)\n tr.id,\n tr.tax_id,\n tr.type,\n tr.rate,\n tr.start_date,\n tr.end_date,\n tr.rate as applicable_rate,\n t.name as tax_name,\n t.tenant::text\n from tax_rates tr\n join taxes t on tr.tax_id = t.id\n where t.tenant = input_tenant::public.tenant\n and tr.start_date <= now()\n and (tr.end_date is null or tr.end_date > now())\n order by tr.tax_id, tr.start_date desc\n " ,
534+ CompleteStatement : "CREATE OR REPLACE FUNCTION public.get_latest_active_rates_by_tenant(input_tenant text)\n RETURNS TABLE(id bigint, tax_id bigint, type text, rate numeric, start_date date, end_date date, applicable_rate numeric, tax_name text, tenant text)\n LANGUAGE sql\n AS $function$\n select distinct on (tr.tax_id)\n tr.id,\n tr.tax_id,\n tr.type,\n tr.rate,\n tr.start_date,\n tr.end_date,\n tr.rate as applicable_rate,\n t.name as tax_name,\n t.tenant::text\n from tax_rates tr\n join taxes t on tr.tax_id = t.id\n where t.tenant = input_tenant::public.tenant\n and tr.start_date <= now()\n and (tr.end_date is null or tr.end_date > now())\n order by tr.tax_id, tr.start_date desc\n $function$\n " ,
535+ Args : []objects.FunctionArg {
536+ {
537+ Mode : "in" ,
538+ Name : "input_tenant" ,
539+ TypeId : 25 ,
540+ HasDefault : false ,
541+ },
542+ {
543+ Mode : "in" ,
544+ Name : "input_register" ,
545+ TypeId : 25 ,
546+ HasDefault : false ,
547+ },
548+ {
549+ Mode : "table" ,
550+ Name : "id" ,
551+ TypeId : 20 ,
552+ HasDefault : false ,
553+ },
554+ {
555+ Mode : "table" ,
556+ Name : "tax_id" ,
557+ TypeId : 20 ,
558+ HasDefault : false ,
559+ },
560+ {
561+ Mode : "table" ,
562+ Name : "type" ,
563+ TypeId : 25 ,
564+ HasDefault : false ,
565+ },
566+ {
567+ Mode : "table" ,
568+ Name : "rate" ,
569+ TypeId : 1700 ,
570+ HasDefault : false ,
571+ },
572+ {
573+ Mode : "table" ,
574+ Name : "start_date" ,
575+ TypeId : 1082 ,
576+ HasDefault : false ,
577+ },
578+ {
579+ Mode : "table" ,
580+ Name : "end_date" ,
581+ TypeId : 1082 ,
582+ HasDefault : false ,
583+ },
584+ {
585+ Mode : "table" ,
586+ Name : "applicable_rate" ,
587+ TypeId : 1700 ,
588+ HasDefault : false ,
589+ },
590+ {
591+ Mode : "table" ,
592+ Name : "tax_name" ,
593+ TypeId : 25 ,
594+ HasDefault : false ,
595+ },
596+ {
597+ Mode : "table" ,
598+ Name : "tenant" ,
599+ TypeId : 25 ,
600+ HasDefault : false ,
601+ },
602+ },
603+ ArgumentTypes : "input_tenant text, input_register date" ,
604+ IdentityArgumentTypes : "input_tenant text, input_register date" ,
605+ ReturnTypeID : 2249 ,
606+ ReturnType : "TABLE(id bigint, tax_id bigint, type text, rate numeric, start_date date, end_date date, applicable_rate numeric, tax_name text, tenant text)" ,
607+ ReturnTypeRelationID : 0 ,
608+ IsSetReturningFunction : true ,
609+ Behavior : string (raiden .RpcBehaviorVolatile ),
610+ SecurityDefiner : false ,
611+ ConfigParams : nil ,
612+ },
613+ }
614+
615+ dir , err := os .MkdirTemp ("" , "rpc" )
616+ assert .NoError (t , err )
617+
618+ rpcPath := filepath .Join (dir , "internal" )
619+ err1 := utils .CreateFolder (rpcPath )
620+ assert .NoError (t , err1 )
621+
622+ err2 := generator .GenerateRpc (dir , "test" , fns , []objects.Table {}, generator .GenerateFn (generator .Generate ))
623+ assert .NoError (t , err2 )
624+ assert .FileExists (t , dir + "/internal/rpc/get_latest_active_rates_by_tenant.go" )
625+ }
626+
521627func TestRpcWithTrigger (t * testing.T ) {
522628 fn := objects.Function {
523629 Schema : "public" ,
0 commit comments