@sap/cds-compiler 5.8.2 → 5.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/bin/cds_remove_invalid_whitespace.js +5 -3
  3. package/bin/cds_update_identifiers.js +9 -6
  4. package/bin/cdsc.js +79 -59
  5. package/bin/cdsse.js +14 -10
  6. package/bin/cdsv2m.js +3 -1
  7. package/lib/api/options.js +28 -6
  8. package/lib/base/message-registry.js +15 -4
  9. package/lib/checks/validator.js +3 -0
  10. package/lib/compiler/base.js +1 -1
  11. package/lib/compiler/checks.js +70 -50
  12. package/lib/compiler/extend.js +1 -1
  13. package/lib/compiler/generate.js +8 -2
  14. package/lib/compiler/index.js +1 -1
  15. package/lib/compiler/lsp-api.js +1 -1
  16. package/lib/compiler/propagator.js +2 -2
  17. package/lib/compiler/resolve.js +78 -31
  18. package/lib/compiler/shared.js +3 -3
  19. package/lib/compiler/tweak-assocs.js +1 -1
  20. package/lib/compiler/utils.js +10 -0
  21. package/lib/compiler/xpr-rewrite.js +1 -1
  22. package/lib/edm/annotations/edmJson.js +42 -39
  23. package/lib/edm/annotations/genericTranslation.js +55 -55
  24. package/lib/edm/annotations/preprocessAnnotations.js +5 -5
  25. package/lib/edm/csn2edm.js +16 -16
  26. package/lib/edm/edm.js +62 -62
  27. package/lib/edm/edmAnnoPreprocessor.js +2 -2
  28. package/lib/edm/edmInboundChecks.js +1 -1
  29. package/lib/edm/edmPreprocessor.js +32 -32
  30. package/lib/edm/edmUtils.js +8 -8
  31. package/lib/gen/CdlGrammar.checksum +1 -1
  32. package/lib/gen/CdlParser.js +77 -81
  33. package/lib/gen/Dictionary.json +3062 -3072
  34. package/lib/gen/language.checksum +1 -1
  35. package/lib/gen/language.interp +1 -1
  36. package/lib/gen/languageParser.js +1238 -1236
  37. package/lib/json/from-csn.js +1 -1
  38. package/lib/json/to-csn.js +30 -3
  39. package/lib/language/genericAntlrParser.js +16 -0
  40. package/lib/main.d.ts +79 -1
  41. package/lib/model/csnRefs.js +12 -5
  42. package/lib/model/xprAsTree.js +71 -0
  43. package/lib/modelCompare/utils/filter.js +1 -1
  44. package/lib/optionProcessor.js +46 -32
  45. package/lib/parsers/CdlGrammar.g4 +33 -28
  46. package/lib/parsers/Lexer.js +1 -1
  47. package/lib/parsers/XprTree.js +25 -16
  48. package/lib/render/toCdl.js +902 -414
  49. package/lib/render/toHdbcds.js +1 -1
  50. package/lib/render/toSql.js +8 -0
  51. package/lib/render/utils/common.js +2 -2
  52. package/lib/render/utils/operators.js +160 -0
  53. package/lib/render/utils/pretty.js +337 -0
  54. package/lib/sql-identifier.js +7 -9
  55. package/lib/transform/addTenantFields.js +39 -41
  56. package/lib/transform/db/applyTransformations.js +4 -4
  57. package/lib/transform/db/assertUnique.js +6 -5
  58. package/lib/transform/db/associations.js +3 -3
  59. package/lib/transform/db/assocsToQueries/transformExists.js +13 -13
  60. package/lib/transform/db/assocsToQueries/utils.js +8 -0
  61. package/lib/transform/db/backlinks.js +19 -14
  62. package/lib/transform/db/constraints.js +6 -6
  63. package/lib/transform/db/expansion.js +1 -1
  64. package/lib/transform/db/flattening.js +2 -2
  65. package/lib/transform/db/groupByOrderBy.js +1 -1
  66. package/lib/transform/db/processSqlServices.js +3 -3
  67. package/lib/transform/db/rewriteCalculatedElements.js +2 -2
  68. package/lib/transform/db/temporal.js +7 -9
  69. package/lib/transform/db/views.js +6 -6
  70. package/lib/transform/draft/odata.js +2 -0
  71. package/lib/transform/effective/annotations.js +1 -1
  72. package/lib/transform/effective/associations.js +1 -1
  73. package/lib/transform/effective/main.js +1 -0
  74. package/lib/transform/effective/service.js +2 -2
  75. package/lib/transform/forRelationalDB.js +11 -5
  76. package/lib/transform/localized.js +2 -0
  77. package/lib/transform/odata/adaptAnnotationRefs.js +10 -9
  78. package/lib/transform/parseExpr.js +2 -2
  79. package/lib/transform/transformUtils.js +9 -7
  80. package/lib/transform/translateAssocsToJoins.js +0 -2
  81. package/lib/transform/universalCsn/coreComputed.js +2 -2
  82. package/lib/utils/moduleResolve.js +7 -5
  83. package/package.json +1 -1
  84. package/share/messages/def-upcoming-virtual-change.md +55 -0
  85. package/share/messages/file-unexpected-case-mismatch.md +61 -0
  86. package/share/messages/message-explanations.json +2 -0
  87. package/lib/transform/braceExpression.js +0 -77
@@ -1037,14 +1037,14 @@ Id:['ci',585],
1037
1037
  ['mi',585],
1038
1038
  {
1039
1039
  over:['ck',578],
1040
- '*':[580,652],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*',
1040
+ '*':[580,652],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','==':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*',
1041
1041
  as:['ck',582],
1042
1042
  Id:['ci',585,,,,'nestedExpand'],
1043
1043
  '.':['c',583],
1044
1044
  '':585
1045
1045
  },
1046
1046
  [579,739],
1047
- {'*':[580,652],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*','':580},
1047
+ {'*':[580,652],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','==':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*','':580},
1048
1048
  {
1049
1049
  as:['ck',581],
1050
1050
  Id:['ci',585],
@@ -1172,6 +1172,7 @@ and:['ck',666,,'precLeft_',4],
1172
1172
  or:['ck',666,,'precLeft_',2],
1173
1173
  '?':['c',663,,'precLeft_',0],
1174
1174
  '<':['c',665,,'precNone_',10],'=':'<','>':'<','!=':'<','<=':'<','<>':'<','>=':'<',
1175
+ '==':['c',666,,'precNone_',10],
1175
1176
  is:['ck',667,,'precNone_',10],
1176
1177
  not:['ck',669,,'isNegatedRelation','10'],
1177
1178
  in:['g',669,,'precNone_',10],like:'in',between:'in',
@@ -1204,7 +1205,7 @@ Id:[683,651,,,'expr','queryOnLeft'],'#':'Id','+':'Id','-':'Id',':':'Id','?':'Id'
1204
1205
  select:[684,453],
1205
1206
  },
1206
1207
  {
1207
- '*':[682,652,,,'expr','queryOnLeft'],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*',
1208
+ '*':[682,652,,,'expr','queryOnLeft'],'+':'*','-':'*','/':'*','<':'*','=':'*','>':'*','?':'*','!=':'*','<=':'*','<>':'*','==':'*','>=':'*',in:'*',is:'*',or:'*','||':'*',and:'*',not:'*',like:'*',between:'*',
1208
1209
  ',':[684,686,,,'expr','queryOnLeft'],
1209
1210
  limit:[684,456,,'queryOnLeft'],minus:'limit',order:'limit',union:'limit',except:'limit',intersect:'limit',
1210
1211
  '':684
@@ -1240,41 +1241,36 @@ limit:[684,456,,'queryOnLeft'],minus:'limit',order:'limit',union:'limit',except:
1240
1241
  ['m',0,')'],
1241
1242
  'argumentsAndFilter',
1242
1243
  {'(':['c',713,,,,'prepareSpecialFunction'],'':732},
1243
- {Id:['ciA',720,,'isNamedArg'],'':714},
1244
+ {Id:['ciA',714,,'isNamedArg'],'':725},
1244
1245
  {
1245
- Id:[715,734],'#':'Id','(':'Id','*':'Id','+':'Id','-':'Id',':':'Id','?':'Id',Id_all:'Id',Number:'Id',String:'Id',QuotedLiteral:'Id',
1246
- DeleteStarFromSet:['c',731],
1247
- '':731
1246
+ ':':['c',715],
1247
+ '=>':['c',720],
1248
1248
  },
1249
- {',':['c',716,,,,'nextFunctionArgument'],'':717},
1249
+ [716,651],
1250
+ {',':['c',717],'':731},
1250
1251
  {
1251
- Id:[715,734],'#':'Id','(':'Id','*':'Id','+':'Id','-':'Id',':':'Id','?':'Id',not:'Id',case:'Id',cast:'Id',null:'Id',true:'Id',false:'Id',Id_all:'Id',Number:'Id',String:'Id',exists:'Id',QuotedLiteral:'Id',
1252
- DeleteStarFromSet:['c',715],
1253
- ')':['g',717,1,'atRightParen'],order:')',
1254
- },
1255
- {order:['ck',718],'':731},
1256
- ['mk',719,'by'],
1257
- [731,754],
1258
- {
1259
- ':':['c',721],
1260
- '=>':['c',726],
1252
+ Id:['ciA',718],
1253
+ ')':731,
1261
1254
  },
1262
- [722,651],
1263
- {',':['c',723],'':731},
1255
+ ['m',719,':'],
1256
+ [716,651],
1257
+ [721,651],
1258
+ {',':['c',722],'':731},
1264
1259
  {
1265
- Id:['ciA',724],
1260
+ Id:['ciA',723],
1266
1261
  ')':731,
1267
1262
  },
1268
- ['m',725,':'],
1269
- [722,651],
1270
- [727,651],
1271
- {',':['c',728],'':731},
1263
+ ['m',724,'=>'],
1264
+ [721,651],
1265
+ {Id:[726,734],'#':'Id','(':'Id','*':'Id','+':'Id','-':'Id',':':'Id','?':'Id',Id_all:'Id',Number:'Id',String:'Id',QuotedLiteral:'Id',DeleteStarFromSet:'Id','':731},
1266
+ {',':['c',727,,,,'nextFunctionArgument'],'':728},
1272
1267
  {
1273
- Id:['ciA',729],
1274
- ')':731,
1268
+ Id:[726,734],'#':'Id','(':'Id','*':'Id','+':'Id','-':'Id',':':'Id','?':'Id',not:'Id',case:'Id',cast:'Id',null:'Id',true:'Id',false:'Id',Id_all:'Id',Number:'Id',String:'Id',exists:'Id',QuotedLiteral:'Id',DeleteStarFromSet:'Id',
1269
+ ')':['g',728,1,'atRightParen'],order:')',
1275
1270
  },
1276
- ['m',730,'=>'],
1277
- [727,651],
1271
+ {order:['ck',729],'':731},
1272
+ ['mk',730,'by'],
1273
+ [731,754],
1278
1274
  ['m',732,')'],
1279
1275
  {'[':[0,538],'':0},
1280
1276
  'funcExpression',
@@ -1961,7 +1957,7 @@ default:this.s=135;continue
1961
1957
  case 135:this.paramsList({art},136);continue
1962
1958
  case 136:switch(this.lk()){
1963
1959
  case'returns':this.returnsSpec({outer:art},0);continue
1964
- default:this.gr([';','@','}','action','function']);continue
1960
+ default:this.gr([';']);continue
1965
1961
  }
1966
1962
  case 137:if(this.mi(138,'BoundAction')){ this.addDef( art, $.outer, 'actions', 'function', this.identAst() );
1967
1963
  this.docComment( art ); }continue
@@ -2103,7 +2099,7 @@ default:this.s=173;continue
2103
2099
  case 172:this.typeExpression({art:$.art},173);continue
2104
2100
  case 173:switch(this.l()){
2105
2101
  case'=':this.gc(0,'elementRestriction','calc')&&this.c(174);continue
2106
- default:this.gr(['Id',';','@','}','key']);continue
2102
+ default:this.gr([';']);continue
2107
2103
  }
2108
2104
  case 174:if(this.expression(_={},175)){expr=_.expr; $.art.value = expr; }continue
2109
2105
  case 175:switch(this.lk()){
@@ -2113,7 +2109,7 @@ default:this.s=176;continue
2113
2109
  case 176:this.s=177;{ if (!this.elementRestriction( true, 'anno' )) this.docComment( $.art ); }continue
2114
2110
  case 177:switch(this.l()){
2115
2111
  case'@':this.gc(0,'elementRestriction','anno')&&this.annoAssignStd({art:$.art},177);continue
2116
- default:this.gr(['Id',';','@','}','key']);continue
2112
+ default:this.gr([';']);continue
2117
2113
  }
2118
2114
  default:
2119
2115
  this.attachLocation( $.art )
@@ -2586,7 +2582,7 @@ default:this.s=306;continue
2586
2582
  }
2587
2583
  case 306:switch(this.lk()){
2588
2584
  case'returns':this.lP()&&this.annotateReturns({outer:art},0);continue
2589
- default:this.gr(['Id',';','@','}']);continue
2585
+ default:this.gr([';']);continue
2590
2586
  }
2591
2587
  default:
2592
2588
  this.attachLocation( art )
@@ -2685,7 +2681,7 @@ default:this.s=329;continue
2685
2681
  }
2686
2682
  case 329:switch(this.l()){
2687
2683
  case'{':this.annotateElementsBlock({art},0);continue
2688
- default:this.gr(['Id',';','@','}']);continue
2684
+ default:this.gr([';']);continue
2689
2685
  }
2690
2686
  default:
2691
2687
  this.attachLocation( art )
@@ -2714,7 +2710,8 @@ elementDefOrExtend($,$next){
2714
2710
  let art=new XsnArtifact()
2715
2711
  let keyword;let elements
2716
2712
  this.rule_(336,$next)
2717
- { this.docComment( art ); }
2713
+ { art.location = this.startLocation();
2714
+ this.docComment( art ); }
2718
2715
  for(;;)switch(this.s){
2719
2716
  case 336:switch(this.l()){
2720
2717
  case'@':this.annoAssignStd({art},336);continue
@@ -2740,7 +2737,7 @@ default:this.s=342;continue
2740
2737
  }
2741
2738
  case 342:switch(this.l()){
2742
2739
  case'{':this.extendElementsBlock({art,start:undefined},0);continue
2743
- default:this.gr(['Id',';','@','}','key']);continue
2740
+ default:this.gr([';']);continue
2744
2741
  }
2745
2742
  case 343:switch(this.l()){
2746
2743
  case'@':this.annoAssignStd({art},343);continue
@@ -2751,7 +2748,7 @@ case'elements':if(this.ck(345))elements=this.lb();continue
2751
2748
  case'{':this.s=345;continue
2752
2749
  case'enum':this.enumSymbolsBlock({art},0);continue
2753
2750
  case'(':this.typeNamedArgsList({art},0);continue
2754
- default:this.gr(['Id',';','@','}','key']);continue
2751
+ default:this.gr([';']);continue
2755
2752
  }
2756
2753
  case 345:this.extendElementsBlock({art,start:elements},0);continue
2757
2754
  default:
@@ -3600,7 +3597,7 @@ default:this.gi(585);continue
3600
3597
  case 576:if(this.mi(585,'ItemAlias')){ art.name = this.identAst(); }continue
3601
3598
  case 577:switch(this.lk()){
3602
3599
  case'over':if(this.ck(578)){ this.pushXprToken( expr.suffix = [] ); }continue
3603
- case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression(_={ expr: expr },580,652)){e=_.expr; Object.assign( e.location || {}, expr.location ); art.value = this.attachLocation( e ) }continue
3600
+ case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'==':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression(_={ expr: expr },580,652)){e=_.expr; Object.assign( e.location || {}, expr.location ); art.value = this.attachLocation( e ) }continue
3604
3601
  case'as':this.ck(582);continue
3605
3602
  case'Id':if(this.ci(585,'ItemAlias')){this.nestedExpand(); art.name = this.fragileAlias( true ); }continue
3606
3603
  case'.':if(this.c(583)){ this.reportUnexpectedSpace( this.lb(), this.la().location, true );
@@ -3609,7 +3606,7 @@ default:if(this.gi(585)){this.nestedExpand(); this.classifyImplicitName( 'ItemIm
3609
3606
  }
3610
3607
  case 578:this.overClause({outer:expr.suffix},579);continue
3611
3608
  case 579:switch(this.lk()){
3612
- case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression(_={ expr: expr },580,652)){e=_.expr; Object.assign( e.location || {}, expr.location ); art.value = this.attachLocation( e ) }continue
3609
+ case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'==':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression(_={ expr: expr },580,652)){e=_.expr; Object.assign( e.location || {}, expr.location ); art.value = this.attachLocation( e ) }continue
3613
3610
  default:this.s=580;continue
3614
3611
  }
3615
3612
  case 580:switch(this.lk()){
@@ -3819,7 +3816,7 @@ default:this.s=647;continue
3819
3816
  }
3820
3817
  case 647:switch(this.l()){
3821
3818
  case'.':this.gc(0,'isDotForPath')&&this.c(648);continue
3822
- default:this.gr(['*','+','-','/','<','=','>','?','!=','<=','<>','>=','in','is','or','||','and','not','like','between']);continue
3819
+ default:this.gr(['*','+','-','/','<','=','>','?','!=','<=','<>','==','>=','in','is','or','||','and','not','like','between']);continue
3823
3820
  }
3824
3821
  case 648:if(this.miA(649,'ref')){ $.expr.path.push( pathItem = this.identAst() ); }continue
3825
3822
  case 649:switch(this.l()){
@@ -3888,6 +3885,7 @@ case'and':if(this.gc(0,'precLeft_',4)&&this.ck(666)){ $.expr = this.applyOpToken
3888
3885
  case'or':if(this.gc(0,'precLeft_',2)&&this.ck(666)){ $.expr = this.applyOpToken( $.expr, 'nary' ); }continue
3889
3886
  case'?':if(this.gc(0,'precLeft_',0)&&this.c(663)){ $.expr = this.applyOpToken( $.expr, '?:' ); }continue
3890
3887
  case'<':case'=':case'>':case'!=':case'<=':case'<>':case'>=':if(this.gc(0,'precNone_',10)&&this.c(665)){ $.expr = this.applyOpToken( $.expr ); }continue
3888
+ case'==':if(this.gc(0,'precNone_',10)&&this.c(666)){ $.expr = this.applyOpToken( $.expr ); }continue
3891
3889
  case'is':if(this.gc(0,'precNone_',10)&&this.ck(667)){ $.expr = this.applyOpToken( $.expr ); }continue
3892
3890
  case'not':if(this.gc(0,'isNegatedRelation','10')&&this.ck(669)){ $.expr = this.applyOpToken( $.expr ); }continue
3893
3891
  case'in':case'like':case'between':if(this.gc(0,'precNone_',10)&&this.g(669)){ $.expr = { op: { val: 'ixpr', location: this.la().location }, args: [ $.expr ] }; }continue
@@ -3939,7 +3937,7 @@ case'select':this.queryExpression($,684);continue
3939
3937
  default:this.ei();continue
3940
3938
  }
3941
3939
  case 681:switch(this.lk()){
3942
- case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression($,682,652)){this.queryOnLeft(0,'expr')}continue;
3940
+ case'*':case'+':case'-':case'/':case'<':case'=':case'>':case'?':case'!=':case'<=':case'<>':case'==':case'>=':case'in':case'is':case'or':case'||':case'and':case'not':case'like':case'between':if(this.expression($,682,652)){this.queryOnLeft(0,'expr')}continue;
3943
3941
  case',':if(this.continueExpressionslist($,684)){this.queryOnLeft(0,'expr')}continue;
3944
3942
  case'limit':case'minus':case'order':case'union':case'except':case'intersect':this.gc(684,'queryOnLeft')&&this.queryExpression($,684,456);continue
3945
3943
  default:this.s=684;continue
@@ -4041,7 +4039,7 @@ return this.exit_()
4041
4039
  }
4042
4040
  }
4043
4041
  argumentsAndFilter($,$next){
4044
- let open;let expr;let id;let _
4042
+ let open;let id;let expr;let _
4045
4043
  this.rule_(712,$next)
4046
4044
  for(;;)switch(this.s){
4047
4045
  case 712:switch(this.l()){
@@ -4049,63 +4047,61 @@ case'(':if(this.c(713)){open=this.lb();this.prepareSpecialFunction(); $.pathStep
4049
4047
  default:this.s=732;continue
4050
4048
  }
4051
4049
  case 713:switch(this.l()){
4052
- case'Id':if(this.gc(714,'isNamedArg')&&this.ciA(720,'paramname'))id=this.lb();continue
4053
- default:this.s=714;continue
4050
+ case'Id':if(this.gc(725,'isNamedArg')&&this.ciA(714,'paramname'))id=this.lb();continue
4051
+ default:this.s=725;continue
4054
4052
  }
4055
4053
  case 714:switch(this.l()){
4056
- case'Id':case'#':case'(':case'*':case'+':case'-':case':':case'?':case'Id_all':case'Number':case'String':case'QuotedLiteral':if(this.funcExpression(_={},715)){expr=_.expr; $.pathStep.args.push( expr ); }continue
4057
- case'DeleteStarFromSet':this.c(731);continue
4058
- default:this.s=731;continue
4059
- }
4060
- case 715:switch(this.l()){
4061
- case',':if(this.c(716)){this.nextFunctionArgument()}continue;
4062
- default:this.s=717;continue
4063
- }
4064
- case 716:switch(this.lk()){
4065
- case'Id':case'#':case'(':case'*':case'+':case'-':case':':case'?':case'not':case'case':case'cast':case'null':case'true':case'false':case'Id_all':case'Number':case'String':case'exists':case'QuotedLiteral':if(this.funcExpression(_={},715)){expr=_.expr; $.pathStep.args.push( expr ); }continue
4066
- case'DeleteStarFromSet':this.c(715);continue
4067
- case')':case'order':this.lP()&&this.ec('atRightParen')&&this.g(717);continue
4068
- default:this.ei();continue
4054
+ case':':if(this.c(715)){ $.pathStep.args = this.createDict( open ); $.pathStep.$syntax = ':'; }continue
4055
+ case'=>':if(this.c(720)){ $.pathStep.args = this.createDict(); }continue
4056
+ default:this.e();continue
4069
4057
  }
4070
- case 717:switch(this.lk()){
4071
- case'order':if(this.ck(718)){ expr = $.pathStep.args[$.pathStep.args.length - 1] = this.applyOpToken( expr ); }continue
4058
+ case 715:if(this.expression(_={},716)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4059
+ case 716:switch(this.l()){
4060
+ case',':this.c(717);continue
4072
4061
  default:this.s=731;continue
4073
4062
  }
4074
- case 718:if(this.mk(719,'by')){ this.pushXprToken( expr ); }continue
4075
- case 719:if(this.orderByClauseAsXpr({outer:expr.args},731)){ this.attachLocation( expr ); }continue
4076
- case 720:switch(this.l()){
4077
- case':':if(this.c(721)){ $.pathStep.args = this.createDict( open ); $.pathStep.$syntax = ':'; }continue
4078
- case'=>':if(this.c(726)){ $.pathStep.args = this.createDict(); }continue
4063
+ case 717:switch(this.l()){
4064
+ case'Id':if(this.ciA(718,'paramname'))id=this.lb();continue
4065
+ case')':this.s=731;continue
4079
4066
  default:this.e();continue
4080
4067
  }
4081
- case 721:if(this.expression(_={},722)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4082
- case 722:switch(this.l()){
4083
- case',':this.c(723);continue
4068
+ case 718:this.m(719,':');continue
4069
+ case 719:if(this.expression(_={},716)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4070
+ case 720:if(this.expression(_={},721)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4071
+ case 721:switch(this.l()){
4072
+ case',':this.c(722);continue
4084
4073
  default:this.s=731;continue
4085
4074
  }
4086
- case 723:switch(this.l()){
4087
- case'Id':if(this.ciA(724,'paramname'))id=this.lb();continue
4075
+ case 722:switch(this.l()){
4076
+ case'Id':if(this.ciA(723,'paramname'))id=this.lb();continue
4088
4077
  case')':this.s=731;continue
4089
4078
  default:this.e();continue
4090
4079
  }
4091
- case 724:this.m(725,':');continue
4092
- case 725:if(this.expression(_={},722)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4093
- case 726:if(this.expression(_={},727)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4094
- case 727:switch(this.l()){
4095
- case',':this.c(728);continue
4080
+ case 723:this.m(724,'=>');continue
4081
+ case 724:if(this.expression(_={},721)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4082
+ case 725:switch(this.l()){
4083
+ case'Id':case'#':case'(':case'*':case'+':case'-':case':':case'?':case'Id_all':case'Number':case'String':case'QuotedLiteral':case'DeleteStarFromSet':if(this.funcExpression(_={},726)){expr=_.expr; $.pathStep.args.push( expr ); }continue
4096
4084
  default:this.s=731;continue
4097
4085
  }
4098
- case 728:switch(this.l()){
4099
- case'Id':if(this.ciA(729,'paramname'))id=this.lb();continue
4100
- case')':this.s=731;continue
4101
- default:this.e();continue
4086
+ case 726:switch(this.l()){
4087
+ case',':if(this.c(727)){this.nextFunctionArgument()}continue;
4088
+ default:this.s=728;continue
4089
+ }
4090
+ case 727:switch(this.lk()){
4091
+ case'Id':case'#':case'(':case'*':case'+':case'-':case':':case'?':case'not':case'case':case'cast':case'null':case'true':case'false':case'Id_all':case'Number':case'String':case'exists':case'QuotedLiteral':case'DeleteStarFromSet':if(this.funcExpression(_={},726)){expr=_.expr; $.pathStep.args.push( expr ); }continue
4092
+ case')':case'order':this.lP()&&this.ec('atRightParen')&&this.g(728);continue
4093
+ default:this.ei();continue
4094
+ }
4095
+ case 728:switch(this.lk()){
4096
+ case'order':if(this.ck(729)){ expr = $.pathStep.args[$.pathStep.args.length - 1] = this.applyOpToken( expr ); }continue
4097
+ default:this.s=731;continue
4102
4098
  }
4103
- case 729:this.m(730,'=>');continue
4104
- case 730:if(this.expression(_={},727)){expr=_.expr; this.addNamedArg( $.pathStep, id, expr ); }continue
4099
+ case 729:if(this.mk(730,'by')){ this.pushXprToken( expr ); }continue
4100
+ case 730:if(this.orderByClauseAsXpr({outer:expr.args},731)){ this.attachLocation( expr ); }continue
4105
4101
  case 731:if(this.m(732,')')){ this.finalizeDictOrArray( $.pathStep.args ); }continue
4106
4102
  case 732:switch(this.l()){
4107
4103
  case'[':this.cardinalityAndFilter($,0);continue
4108
- default:this.gr(['*','+','-','.','/','<','=','>','?','!=','<=','<>','>=','in','is','or','||','and','not','like','between']);continue
4104
+ default:this.gr(['*','+','-','.','/','<','=','>','?','!=','<=','<>','==','>=','in','is','or','||','and','not','like','between']);continue
4109
4105
  }
4110
4106
  default:return this.exit_()
4111
4107
  }