@@ -17,8 +17,18 @@ type EndorserCanCompleteEndorsementSpecification struct {
1717}
1818
1919func (e * EndorserCanCompleteEndorsementSpecification ) Compile () (sql string , params []driver.Valuer , err error ) {
20- v := s .NewPostgresqlVisitor (GlobalScopeContext {})
21- err = e .Expression ().Accept (v )
20+ exp := e .Expression ()
21+ tv := s .NewTransformVisitor (GlobalScopeContext {})
22+ err = exp .Accept (tv )
23+ if err != nil {
24+ return "" , nil , err
25+ }
26+ exp , err = tv .Result ()
27+ if err != nil {
28+ return "" , nil , err
29+ }
30+ v := s .NewPostgresqlVisitor ()
31+ err = exp .Accept (v )
2232 if err != nil {
2333 return "" , []driver.Valuer {}, err
2434 }
@@ -28,30 +38,31 @@ func (e *EndorserCanCompleteEndorsementSpecification) Compile() (sql string, par
2838type EndorserIdContext struct {
2939}
3040
31- func (c EndorserIdContext ) NameByPath (path ... string ) (string , error ) {
41+ func (c EndorserIdContext ) NameByPath (path [] string ) ([] string , error ) {
3242 if len (path ) == 0 {
33- return "" , s .NewMissingFieldsError ("tenantId" , "memberId" )
43+ return nil , s .NewMissingFieldsError ("tenantId" , "memberId" )
3444 }
3545 switch path [0 ] {
3646 case "tenantId" :
37- return "tenant_id" , nil
47+ return [] string { "tenant_id" } , nil
3848 case "memberId" :
39- return "member_id" , nil
49+ return [] string { "member_id" } , nil
4050 default :
41- return "" , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
51+ return nil , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
4252 }
4353}
4454
4555func (c EndorserIdContext ) Extract (val any ) (driver.Valuer , error ) {
56+ // TODO: это не будет работать, т.к. ValueNode может идти первым операндом. Нужно разделять интерфейсы.
4657 switch valTyped := val .(type ) {
4758 case member.InternalMemberId :
4859 var ex exporters.UintExporter
4960 valTyped .Export (& ex )
50- return nil , nil
61+ return ex , nil
5162 case tenant.TenantId :
5263 var ex exporters.UintExporter
5364 valTyped .Export (& ex )
54- return nil , nil
65+ return ex , nil
5566 case member.MemberId :
5667 var ex MemberIdExporter
5768 valTyped .Export (& ex )
@@ -65,24 +76,22 @@ type EndorserContext struct {
6576 id EndorserIdContext
6677}
6778
68- func (c EndorserContext ) NameByPath (path ... string ) (string , error ) {
69- prefix := "endorser"
70- var name string
71- var err error
79+ func (c EndorserContext ) NameByPath (path []string ) ([]string , error ) {
80+ prefix := []string {"endorser" }
7281 switch path [0 ] {
7382 case "availableEndorsementCount" :
74- name = "available_endorsement_count"
83+ return append ( prefix , "available_endorsement_count" ), nil
7584 case "pendingEndorsementCount" :
76- name = "pending_endorsement_count"
85+ return append ( prefix , "pending_endorsement_count" ), nil
7786 case "id" :
78- name , err = c .id .NameByPath (path [1 :]... )
87+ names , err : = c .id .NameByPath (path [1 :])
7988 if err != nil {
80- return "" , err
89+ return nil , err
8190 }
91+ return append (prefix , names ... ), nil
8292 default :
83- return "" , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
93+ return nil , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
8494 }
85- return prefix + "." + name , nil
8695}
8796
8897func (c EndorserContext ) Extract (val any ) (driver.Valuer , error ) {
@@ -100,12 +109,12 @@ type GlobalScopeContext struct {
100109 endorser EndorserContext
101110}
102111
103- func (c GlobalScopeContext ) NameByPath (path ... string ) (string , error ) {
112+ func (c GlobalScopeContext ) NameByPath (path [] string ) ([] string , error ) {
104113 switch path [0 ] {
105114 case "endorser" :
106- return c .endorser .NameByPath (path [1 :]... )
115+ return c .endorser .NameByPath (path [1 :])
107116 default :
108- return "" , fmt .Errorf ("can't get object \" %s\" " , path [0 ])
117+ return nil , fmt .Errorf ("can't get object \" %s\" " , path [0 ])
109118 }
110119}
111120
@@ -118,11 +127,11 @@ func (c GlobalScopeContext) Extract(val any) (driver.Valuer, error) {
118127 case member.InternalMemberId :
119128 var ex exporters.UintExporter
120129 valTyped .Export (& ex )
121- return nil , nil
130+ return ex , nil
122131 case tenant.TenantId :
123132 var ex exporters.UintExporter
124133 valTyped .Export (& ex )
125- return nil , nil
134+ return ex , nil
126135 case member.MemberId :
127136 var ex MemberIdExporter
128137 valTyped .Export (& ex )
0 commit comments