@abaplint/core 2.113.126 → 2.113.128
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.
- package/build/abaplint.d.ts +17 -3
- package/build/src/abap/3_structures/structures/dynpro_loop.js +1 -1
- package/build/src/abap/5_syntax/_builtin.js +10 -10
- package/build/src/abap/5_syntax/_procedural.js +2 -2
- package/build/src/abap/5_syntax/_type_utils.js +16 -7
- package/build/src/abap/5_syntax/basic_types.js +10 -10
- package/build/src/abap/5_syntax/expressions/attribute_chain.js +6 -7
- package/build/src/abap/5_syntax/expressions/attribute_name.js +6 -6
- package/build/src/abap/5_syntax/expressions/cast.js +9 -9
- package/build/src/abap/5_syntax/expressions/compare.js +4 -4
- package/build/src/abap/5_syntax/expressions/component_chain.js +8 -8
- package/build/src/abap/5_syntax/expressions/component_compare.js +3 -3
- package/build/src/abap/5_syntax/expressions/component_compare_simple.js +3 -3
- package/build/src/abap/5_syntax/expressions/component_cond.js +3 -3
- package/build/src/abap/5_syntax/expressions/component_name.js +4 -4
- package/build/src/abap/5_syntax/expressions/cond.js +3 -3
- package/build/src/abap/5_syntax/expressions/cond_body.js +5 -5
- package/build/src/abap/5_syntax/expressions/constant.js +1 -1
- package/build/src/abap/5_syntax/expressions/conv_body.js +4 -4
- package/build/src/abap/5_syntax/expressions/corresponding_body.js +3 -3
- package/build/src/abap/5_syntax/expressions/data_definition.js +3 -3
- package/build/src/abap/5_syntax/expressions/database_table.js +1 -1
- package/build/src/abap/5_syntax/expressions/default.js +3 -3
- package/build/src/abap/5_syntax/expressions/dereference.js +2 -2
- package/build/src/abap/5_syntax/expressions/dynamic.js +2 -2
- package/build/src/abap/5_syntax/expressions/field_assignment.js +2 -2
- package/build/src/abap/5_syntax/expressions/field_chain.js +19 -19
- package/build/src/abap/5_syntax/expressions/field_length.js +2 -2
- package/build/src/abap/5_syntax/expressions/field_offset.js +2 -2
- package/build/src/abap/5_syntax/expressions/filter_body.js +3 -3
- package/build/src/abap/5_syntax/expressions/for.js +8 -8
- package/build/src/abap/5_syntax/expressions/form_param.js +2 -2
- package/build/src/abap/5_syntax/expressions/fstarget.js +2 -2
- package/build/src/abap/5_syntax/expressions/inline_data.js +1 -1
- package/build/src/abap/5_syntax/expressions/inline_field_definition.js +3 -3
- package/build/src/abap/5_syntax/expressions/inline_fs.js +1 -1
- package/build/src/abap/5_syntax/expressions/inline_loop_definition.js +2 -2
- package/build/src/abap/5_syntax/expressions/let.js +2 -2
- package/build/src/abap/5_syntax/expressions/loop_group_by.js +6 -6
- package/build/src/abap/5_syntax/expressions/message_source.js +2 -2
- package/build/src/abap/5_syntax/expressions/method_call_body.js +3 -3
- package/build/src/abap/5_syntax/expressions/method_call_chain.js +21 -19
- package/build/src/abap/5_syntax/expressions/method_call_param.js +2 -2
- package/build/src/abap/5_syntax/expressions/method_def_returning.js +1 -1
- package/build/src/abap/5_syntax/expressions/method_param.js +4 -4
- package/build/src/abap/5_syntax/expressions/method_parameters.js +7 -7
- package/build/src/abap/5_syntax/expressions/method_source.js +20 -20
- package/build/src/abap/5_syntax/expressions/new_object.js +10 -10
- package/build/src/abap/5_syntax/expressions/raise_with.js +2 -2
- package/build/src/abap/5_syntax/expressions/reduce_body.js +7 -7
- package/build/src/abap/5_syntax/expressions/reduce_next.js +3 -3
- package/build/src/abap/5_syntax/expressions/select.js +25 -25
- package/build/src/abap/5_syntax/expressions/select_loop.js +2 -2
- package/build/src/abap/5_syntax/expressions/source.js +63 -60
- package/build/src/abap/5_syntax/expressions/source_field.js +2 -2
- package/build/src/abap/5_syntax/expressions/source_field_symbol.js +2 -2
- package/build/src/abap/5_syntax/expressions/sql_compare.js +6 -6
- package/build/src/abap/5_syntax/expressions/sql_for_all_entries.js +2 -2
- package/build/src/abap/5_syntax/expressions/sql_from.js +3 -3
- package/build/src/abap/5_syntax/expressions/sql_in.js +4 -4
- package/build/src/abap/5_syntax/expressions/sql_order_by.js +2 -2
- package/build/src/abap/5_syntax/expressions/sql_source.js +3 -3
- package/build/src/abap/5_syntax/expressions/string_template.js +6 -6
- package/build/src/abap/5_syntax/expressions/switch_body.js +4 -4
- package/build/src/abap/5_syntax/expressions/table_expression.js +2 -2
- package/build/src/abap/5_syntax/expressions/target.js +25 -23
- package/build/src/abap/5_syntax/expressions/type_table.js +2 -2
- package/build/src/abap/5_syntax/expressions/type_table_key.js +1 -1
- package/build/src/abap/5_syntax/expressions/value_body.js +10 -10
- package/build/src/abap/5_syntax/statements/add.js +2 -2
- package/build/src/abap/5_syntax/statements/add_corresponding.js +2 -2
- package/build/src/abap/5_syntax/statements/append.js +6 -6
- package/build/src/abap/5_syntax/statements/assert.js +1 -1
- package/build/src/abap/5_syntax/statements/assign.js +8 -8
- package/build/src/abap/5_syntax/statements/authority_check.js +1 -1
- package/build/src/abap/5_syntax/statements/call.js +3 -3
- package/build/src/abap/5_syntax/statements/call_badi.js +3 -3
- package/build/src/abap/5_syntax/statements/call_function.js +6 -6
- package/build/src/abap/5_syntax/statements/call_kernel.js +1 -1
- package/build/src/abap/5_syntax/statements/call_transaction.js +2 -2
- package/build/src/abap/5_syntax/statements/call_transformation.js +4 -4
- package/build/src/abap/5_syntax/statements/case.js +1 -1
- package/build/src/abap/5_syntax/statements/case_type.js +1 -1
- package/build/src/abap/5_syntax/statements/catch.js +2 -2
- package/build/src/abap/5_syntax/statements/check.js +1 -1
- package/build/src/abap/5_syntax/statements/class_data.js +2 -2
- package/build/src/abap/5_syntax/statements/class_implementation.js +1 -1
- package/build/src/abap/5_syntax/statements/clear.js +2 -2
- package/build/src/abap/5_syntax/statements/close_dataset.js +1 -1
- package/build/src/abap/5_syntax/statements/collect.js +3 -3
- package/build/src/abap/5_syntax/statements/commit_entities.js +3 -3
- package/build/src/abap/5_syntax/statements/concatenate.js +5 -5
- package/build/src/abap/5_syntax/statements/condense.js +1 -1
- package/build/src/abap/5_syntax/statements/convert.js +7 -7
- package/build/src/abap/5_syntax/statements/create_data.js +3 -3
- package/build/src/abap/5_syntax/statements/create_object.js +9 -6
- package/build/src/abap/5_syntax/statements/data.js +2 -2
- package/build/src/abap/5_syntax/statements/delete_cluster.js +1 -1
- package/build/src/abap/5_syntax/statements/delete_database.js +4 -4
- package/build/src/abap/5_syntax/statements/delete_internal.js +4 -4
- package/build/src/abap/5_syntax/statements/delete_memory.js +1 -1
- package/build/src/abap/5_syntax/statements/delete_report.js +1 -1
- package/build/src/abap/5_syntax/statements/describe.js +10 -10
- package/build/src/abap/5_syntax/statements/divide.js +2 -2
- package/build/src/abap/5_syntax/statements/do.js +2 -2
- package/build/src/abap/5_syntax/statements/editor_call.js +2 -2
- package/build/src/abap/5_syntax/statements/else_if.js +1 -1
- package/build/src/abap/5_syntax/statements/export.js +2 -2
- package/build/src/abap/5_syntax/statements/find.js +5 -5
- package/build/src/abap/5_syntax/statements/format.js +1 -1
- package/build/src/abap/5_syntax/statements/get_badi.js +3 -3
- package/build/src/abap/5_syntax/statements/get_bit.js +3 -3
- package/build/src/abap/5_syntax/statements/get_cursor.js +1 -1
- package/build/src/abap/5_syntax/statements/get_locale.js +2 -2
- package/build/src/abap/5_syntax/statements/get_parameter.js +3 -3
- package/build/src/abap/5_syntax/statements/get_reference.js +3 -3
- package/build/src/abap/5_syntax/statements/get_run_time.js +2 -2
- package/build/src/abap/5_syntax/statements/get_time.js +2 -2
- package/build/src/abap/5_syntax/statements/if.js +1 -1
- package/build/src/abap/5_syntax/statements/import.js +2 -2
- package/build/src/abap/5_syntax/statements/import_dynpro.js +2 -2
- package/build/src/abap/5_syntax/statements/include_type.js +2 -2
- package/build/src/abap/5_syntax/statements/insert_database.js +4 -4
- package/build/src/abap/5_syntax/statements/insert_field_group.js +3 -3
- package/build/src/abap/5_syntax/statements/insert_internal.js +7 -7
- package/build/src/abap/5_syntax/statements/insert_report.js +1 -1
- package/build/src/abap/5_syntax/statements/insert_textpool.js +1 -1
- package/build/src/abap/5_syntax/statements/log_point.js +1 -1
- package/build/src/abap/5_syntax/statements/loop.js +10 -10
- package/build/src/abap/5_syntax/statements/loop_at_screen.js +2 -2
- package/build/src/abap/5_syntax/statements/message.js +5 -5
- package/build/src/abap/5_syntax/statements/modify_database.js +5 -5
- package/build/src/abap/5_syntax/statements/modify_entities.js +3 -3
- package/build/src/abap/5_syntax/statements/modify_internal.js +4 -4
- package/build/src/abap/5_syntax/statements/modify_screen.js +1 -1
- package/build/src/abap/5_syntax/statements/move.js +4 -4
- package/build/src/abap/5_syntax/statements/move_corresponding.js +2 -2
- package/build/src/abap/5_syntax/statements/multiply.js +2 -2
- package/build/src/abap/5_syntax/statements/open_dataset.js +2 -2
- package/build/src/abap/5_syntax/statements/pack.js +2 -2
- package/build/src/abap/5_syntax/statements/parameter.js +1 -1
- package/build/src/abap/5_syntax/statements/perform.js +4 -4
- package/build/src/abap/5_syntax/statements/raise.js +8 -8
- package/build/src/abap/5_syntax/statements/raise_event.js +1 -1
- package/build/src/abap/5_syntax/statements/read_entities.js +3 -3
- package/build/src/abap/5_syntax/statements/read_report.js +2 -2
- package/build/src/abap/5_syntax/statements/read_table.js +8 -8
- package/build/src/abap/5_syntax/statements/read_textpool.js +2 -2
- package/build/src/abap/5_syntax/statements/receive.js +2 -2
- package/build/src/abap/5_syntax/statements/replace.js +2 -2
- package/build/src/abap/5_syntax/statements/scan.js +2 -2
- package/build/src/abap/5_syntax/statements/search.js +1 -1
- package/build/src/abap/5_syntax/statements/select.js +1 -1
- package/build/src/abap/5_syntax/statements/select_loop.js +1 -1
- package/build/src/abap/5_syntax/statements/selectoption.js +4 -4
- package/build/src/abap/5_syntax/statements/set_bit.js +2 -2
- package/build/src/abap/5_syntax/statements/set_handler.js +2 -2
- package/build/src/abap/5_syntax/statements/set_locale.js +2 -2
- package/build/src/abap/5_syntax/statements/set_parameter.js +1 -1
- package/build/src/abap/5_syntax/statements/set_pf_status.js +1 -1
- package/build/src/abap/5_syntax/statements/set_titlebar.js +1 -1
- package/build/src/abap/5_syntax/statements/shift.js +2 -2
- package/build/src/abap/5_syntax/statements/sort.js +2 -2
- package/build/src/abap/5_syntax/statements/split.js +3 -3
- package/build/src/abap/5_syntax/statements/static.js +1 -1
- package/build/src/abap/5_syntax/statements/submit.js +3 -3
- package/build/src/abap/5_syntax/statements/subtract.js +2 -2
- package/build/src/abap/5_syntax/statements/subtract_corresponding.js +2 -2
- package/build/src/abap/5_syntax/statements/syntax_check.js +2 -2
- package/build/src/abap/5_syntax/statements/system_call.js +1 -1
- package/build/src/abap/5_syntax/statements/transfer.js +2 -2
- package/build/src/abap/5_syntax/statements/translate.js +2 -2
- package/build/src/abap/5_syntax/statements/truncate_dataset.js +1 -1
- package/build/src/abap/5_syntax/statements/type.js +3 -3
- package/build/src/abap/5_syntax/statements/unpack.js +2 -2
- package/build/src/abap/5_syntax/statements/update_database.js +4 -4
- package/build/src/abap/5_syntax/statements/wait.js +2 -2
- package/build/src/abap/5_syntax/statements/when.js +1 -1
- package/build/src/abap/5_syntax/statements/when_type.js +3 -3
- package/build/src/abap/5_syntax/statements/while.js +3 -3
- package/build/src/abap/5_syntax/statements/with.js +2 -2
- package/build/src/abap/5_syntax/statements/with_loop.js +2 -2
- package/build/src/abap/5_syntax/statements/write.js +4 -4
- package/build/src/abap/5_syntax/structures/data.js +1 -1
- package/build/src/abap/5_syntax/structures/statics.js +1 -1
- package/build/src/abap/types/basic/any_type.js +13 -0
- package/build/src/abap/types/basic/cgeneric_type.js +7 -0
- package/build/src/abap/types/basic/integer_type.js +7 -4
- package/build/src/abap/types/basic/string_type.js +7 -4
- package/build/src/abap/types/basic/void_type.js +10 -0
- package/build/src/abap/types/basic/xgeneric_type.js +7 -0
- package/build/src/abap/types/basic/xstring_type.js +13 -0
- package/build/src/abap/types/event_definition.js +1 -1
- package/build/src/abap/types/form_definition.js +3 -3
- package/build/src/abap/types/method_parameters.js +11 -11
- package/build/src/cds/cds_determine_types.js +5 -5
- package/build/src/ddic.js +11 -11
- package/build/src/objects/authorization_check_field.js +1 -1
- package/build/src/objects/lock_object.js +1 -1
- package/build/src/objects/maintenance_and_transport_object.js +2 -2
- package/build/src/objects/table.js +1 -1
- package/build/src/objects/view.js +1 -1
- package/build/src/registry.js +1 -1
- package/build/src/rules/downport.js +2 -1
- package/package.json +5 -5
|
@@ -16,11 +16,11 @@ const _reference_1 = require("../_reference");
|
|
|
16
16
|
const _syntax_input_1 = require("../_syntax_input");
|
|
17
17
|
const isSimple = /^\w+$/;
|
|
18
18
|
class Select {
|
|
19
|
-
runSyntax(node, input, skipImplicitInto = false) {
|
|
19
|
+
static runSyntax(node, input, skipImplicitInto = false) {
|
|
20
20
|
var _a;
|
|
21
21
|
const token = node.getFirstToken();
|
|
22
22
|
const from = node.findDirectExpression(Expressions.SQLFrom);
|
|
23
|
-
const dbSources = from ?
|
|
23
|
+
const dbSources = from ? sql_from_1.SQLFrom.runSyntax(from, input) : [];
|
|
24
24
|
if (from === undefined) {
|
|
25
25
|
const message = `Missing FROM`;
|
|
26
26
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
@@ -39,10 +39,10 @@ class Select {
|
|
|
39
39
|
const fae = node.findDirectExpression(Expressions.SQLForAllEntries);
|
|
40
40
|
if (fae) {
|
|
41
41
|
input.scope.push(_scope_type_1.ScopeType.OpenSQL, "SELECT", token.getStart(), input.filename);
|
|
42
|
-
|
|
42
|
+
sql_for_all_entries_1.SQLForAllEntries.runSyntax(fae, input);
|
|
43
43
|
}
|
|
44
44
|
for (const t of node.findAllExpressions(Expressions.Target)) {
|
|
45
|
-
|
|
45
|
+
target_1.Target.runSyntax(t, input);
|
|
46
46
|
}
|
|
47
47
|
// check implicit into, the target field is implict equal to the table name
|
|
48
48
|
if (skipImplicitInto === false
|
|
@@ -68,23 +68,23 @@ class Select {
|
|
|
68
68
|
}
|
|
69
69
|
// OFFSET
|
|
70
70
|
for (const s of node.findDirectExpressions(Expressions.SQLSource)) {
|
|
71
|
-
|
|
71
|
+
sql_source_1.SQLSource.runSyntax(s, input);
|
|
72
72
|
}
|
|
73
73
|
for (const up of node.findDirectExpressions(Expressions.SQLUpTo)) {
|
|
74
74
|
for (const s of up.findDirectExpressions(Expressions.SQLSource)) {
|
|
75
|
-
|
|
75
|
+
sql_source_1.SQLSource.runSyntax(s, input);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
for (const fae of node.findDirectExpressions(Expressions.SQLForAllEntries)) {
|
|
79
79
|
for (const s of fae.findDirectExpressions(Expressions.SQLSource)) {
|
|
80
|
-
|
|
80
|
+
sql_source_1.SQLSource.runSyntax(s, input);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
for (const s of node.findAllExpressions(Expressions.SQLCompare)) {
|
|
84
|
-
|
|
84
|
+
sql_compare_1.SQLCompare.runSyntax(s, input, dbSources);
|
|
85
85
|
}
|
|
86
86
|
for (const s of node.findDirectExpressions(Expressions.SQLOrderBy)) {
|
|
87
|
-
|
|
87
|
+
sql_order_by_1.SQLOrderBy.runSyntax(s, input);
|
|
88
88
|
}
|
|
89
89
|
if (this.isStrictMode(node)) {
|
|
90
90
|
this.strictModeChecks(node, input);
|
|
@@ -94,7 +94,7 @@ class Select {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
// there are multiple rules, but gotta start somewhere
|
|
97
|
-
isStrictMode(node) {
|
|
97
|
+
static isStrictMode(node) {
|
|
98
98
|
const into = node.findDirectExpressionsMulti([Expressions.SQLIntoList, Expressions.SQLIntoStructure, Expressions.SQLIntoTable])[0];
|
|
99
99
|
const where = node.findDirectExpression(Expressions.SQLCond);
|
|
100
100
|
// INTO is after WHERE
|
|
@@ -118,7 +118,7 @@ class Select {
|
|
|
118
118
|
}
|
|
119
119
|
return false;
|
|
120
120
|
}
|
|
121
|
-
strictModeChecks(node, input) {
|
|
121
|
+
static strictModeChecks(node, input) {
|
|
122
122
|
const sources = node.findAllExpressions(Expressions.SQLSource);
|
|
123
123
|
for (const source of sources) {
|
|
124
124
|
const first = source.getFirstChild();
|
|
@@ -135,19 +135,19 @@ class Select {
|
|
|
135
135
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
handleInto(node, input, fields, dbSources) {
|
|
138
|
+
static handleInto(node, input, fields, dbSources) {
|
|
139
139
|
const intoTable = node.findDirectExpression(Expressions.SQLIntoTable);
|
|
140
140
|
if (intoTable) {
|
|
141
141
|
const inline = intoTable.findFirstExpression(Expressions.InlineData);
|
|
142
142
|
if (inline) {
|
|
143
|
-
|
|
143
|
+
inline_data_1.InlineData.runSyntax(inline, input, this.buildTableType(fields, dbSources, input.scope));
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
const intoStructure = node.findDirectExpression(Expressions.SQLIntoStructure);
|
|
147
147
|
if (intoStructure) {
|
|
148
148
|
for (const inline of intoStructure.findAllExpressions(Expressions.InlineData)) {
|
|
149
149
|
// todo, for now these are voided
|
|
150
|
-
|
|
150
|
+
inline_data_1.InlineData.runSyntax(inline, input, basic_1.VoidType.get("SELECT_todo"));
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
const intoList = node.findDirectExpression(Expressions.SQLIntoList);
|
|
@@ -169,7 +169,7 @@ class Select {
|
|
|
169
169
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
170
170
|
return;
|
|
171
171
|
}
|
|
172
|
-
let type =
|
|
172
|
+
let type = basic_1.VoidType.get("SELECT_todo");
|
|
173
173
|
if (isSimple.test(field.code)) {
|
|
174
174
|
for (const dbSource of dbSources) {
|
|
175
175
|
if (dbSource === undefined) {
|
|
@@ -185,12 +185,12 @@ class Select {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
-
|
|
188
|
+
inline_data_1.InlineData.runSyntax(inline, input, type);
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
checkFields(fields, dbSources, input, node) {
|
|
193
|
+
static checkFields(fields, dbSources, input, node) {
|
|
194
194
|
if (dbSources.length > 1) {
|
|
195
195
|
return;
|
|
196
196
|
}
|
|
@@ -219,17 +219,17 @@ class Select {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
|
-
buildTableType(fields, dbSources, scope) {
|
|
222
|
+
static buildTableType(fields, dbSources, scope) {
|
|
223
223
|
if (dbSources.length !== 1) {
|
|
224
|
-
return
|
|
224
|
+
return basic_1.VoidType.get("SELECT_todo");
|
|
225
225
|
}
|
|
226
226
|
if (dbSources[0] === undefined) {
|
|
227
227
|
// then its a voided table
|
|
228
|
-
return
|
|
228
|
+
return basic_1.VoidType.get("SELECT_todo");
|
|
229
229
|
}
|
|
230
230
|
const dbType = dbSources[0].parseType(scope.getRegistry());
|
|
231
231
|
if (!(dbType instanceof basic_1.StructureType)) {
|
|
232
|
-
return
|
|
232
|
+
return basic_1.VoidType.get("SELECT_todo");
|
|
233
233
|
}
|
|
234
234
|
if (fields.length === 1 && fields[0].code === "*") {
|
|
235
235
|
return new basic_1.TableType(dbType, { withHeader: false, keyType: basic_1.TableKeyType.default }, undefined);
|
|
@@ -240,15 +240,15 @@ class Select {
|
|
|
240
240
|
for (const field of fields) {
|
|
241
241
|
const type = dbType.getComponentByName(field.code);
|
|
242
242
|
if (type === undefined) {
|
|
243
|
-
return
|
|
243
|
+
return basic_1.VoidType.get("SELECT_todo");
|
|
244
244
|
}
|
|
245
245
|
components.push({ name: field.code, type });
|
|
246
246
|
}
|
|
247
247
|
return new basic_1.TableType(new basic_1.StructureType(components), { withHeader: false, keyType: basic_1.TableKeyType.default }, undefined);
|
|
248
248
|
}
|
|
249
|
-
return
|
|
249
|
+
return basic_1.VoidType.get("SELECT_todo");
|
|
250
250
|
}
|
|
251
|
-
findFields(node, input) {
|
|
251
|
+
static findFields(node, input) {
|
|
252
252
|
var _a, _b;
|
|
253
253
|
let expr = undefined;
|
|
254
254
|
const ret = [];
|
|
@@ -257,7 +257,7 @@ class Select {
|
|
|
257
257
|
expr = node.findFirstExpression(Expressions.SQLFieldListLoop);
|
|
258
258
|
}
|
|
259
259
|
if (((_a = expr === null || expr === void 0 ? void 0 : expr.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Dynamic) {
|
|
260
|
-
|
|
260
|
+
dynamic_1.Dynamic.runSyntax(expr.getFirstChild(), input);
|
|
261
261
|
}
|
|
262
262
|
for (const field of (expr === null || expr === void 0 ? void 0 : expr.findDirectExpressionsMulti([Expressions.SQLField, Expressions.SQLFieldName])) || []) {
|
|
263
263
|
let code = field.concatTokens().toUpperCase();
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SelectLoop = void 0;
|
|
4
4
|
const select_1 = require("./select");
|
|
5
5
|
class SelectLoop {
|
|
6
|
-
runSyntax(node, input) {
|
|
6
|
+
static runSyntax(node, input) {
|
|
7
7
|
// try using the other Select, they should look very much the same
|
|
8
|
-
|
|
8
|
+
select_1.Select.runSyntax(node, input);
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
exports.SelectLoop = SelectLoop;
|
|
@@ -37,7 +37,7 @@ const assert_error_1 = require("../assert_error");
|
|
|
37
37
|
* DATA(bar) = VALUE #( ... ). give error, no type can be derived
|
|
38
38
|
*/
|
|
39
39
|
class Source {
|
|
40
|
-
runSyntax(node, input, targetType, writeReference = false) {
|
|
40
|
+
static runSyntax(node, input, targetType, writeReference = false) {
|
|
41
41
|
if (node === undefined) {
|
|
42
42
|
return undefined;
|
|
43
43
|
}
|
|
@@ -56,20 +56,20 @@ class Source {
|
|
|
56
56
|
{
|
|
57
57
|
const method = new _builtin_1.BuiltIn().searchBuiltin(tok);
|
|
58
58
|
input.scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, input.filename);
|
|
59
|
-
|
|
59
|
+
cond_1.Cond.runSyntax(node.findDirectExpression(Expressions.Cond), input);
|
|
60
60
|
return basic_1.StringType.get();
|
|
61
61
|
}
|
|
62
62
|
case "XSDBOOL":
|
|
63
63
|
{
|
|
64
64
|
const method = new _builtin_1.BuiltIn().searchBuiltin(tok);
|
|
65
65
|
input.scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, input.filename);
|
|
66
|
-
|
|
66
|
+
cond_1.Cond.runSyntax(node.findDirectExpression(Expressions.Cond), input);
|
|
67
67
|
return new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" });
|
|
68
68
|
}
|
|
69
69
|
case "REDUCE":
|
|
70
70
|
{
|
|
71
71
|
const foundType = this.determineType(node, input, targetType);
|
|
72
|
-
const bodyType =
|
|
72
|
+
const bodyType = reduce_body_1.ReduceBody.runSyntax(node.findDirectExpression(Expressions.ReduceBody), input, foundType);
|
|
73
73
|
if (foundType === undefined || foundType.isGeneric()) {
|
|
74
74
|
this.addIfInferred(node, input, bodyType);
|
|
75
75
|
}
|
|
@@ -81,7 +81,7 @@ class Source {
|
|
|
81
81
|
case "SWITCH":
|
|
82
82
|
{
|
|
83
83
|
const foundType = this.determineType(node, input, targetType);
|
|
84
|
-
const bodyType =
|
|
84
|
+
const bodyType = switch_body_1.SwitchBody.runSyntax(node.findDirectExpression(Expressions.SwitchBody), input);
|
|
85
85
|
if (foundType === undefined || foundType.isGeneric()) {
|
|
86
86
|
this.addIfInferred(node, input, bodyType);
|
|
87
87
|
}
|
|
@@ -93,7 +93,7 @@ class Source {
|
|
|
93
93
|
case "COND":
|
|
94
94
|
{
|
|
95
95
|
const foundType = this.determineType(node, input, targetType);
|
|
96
|
-
const bodyType =
|
|
96
|
+
const bodyType = cond_body_1.CondBody.runSyntax(node.findDirectExpression(Expressions.CondBody), input, foundType);
|
|
97
97
|
if (foundType === undefined || foundType.isGeneric()) {
|
|
98
98
|
this.addIfInferred(node, input, bodyType);
|
|
99
99
|
}
|
|
@@ -110,11 +110,11 @@ class Source {
|
|
|
110
110
|
case "CONV":
|
|
111
111
|
{
|
|
112
112
|
const foundType = this.determineType(node, input, targetType);
|
|
113
|
-
const bodyType =
|
|
113
|
+
const bodyType = conv_body_1.ConvBody.runSyntax(node.findDirectExpression(Expressions.ConvBody), input);
|
|
114
114
|
if (new _type_utils_1.TypeUtils(input.scope).isAssignable(foundType, bodyType) === false) {
|
|
115
115
|
const message = `CONV: Types not compatible, ${foundType === null || foundType === void 0 ? void 0 : foundType.constructor.name}, ${bodyType === null || bodyType === void 0 ? void 0 : bodyType.constructor.name}`;
|
|
116
116
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
117
|
-
return
|
|
117
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
118
118
|
}
|
|
119
119
|
this.addIfInferred(node, input, foundType);
|
|
120
120
|
return foundType;
|
|
@@ -122,7 +122,7 @@ class Source {
|
|
|
122
122
|
case "REF":
|
|
123
123
|
{
|
|
124
124
|
const foundType = this.determineType(node, input, targetType);
|
|
125
|
-
const s =
|
|
125
|
+
const s = Source.runSyntax(node.findDirectExpression(Expressions.Source), input);
|
|
126
126
|
if (foundType === undefined && s) {
|
|
127
127
|
return new basic_1.DataReference(s);
|
|
128
128
|
}
|
|
@@ -134,7 +134,7 @@ class Source {
|
|
|
134
134
|
case "FILTER":
|
|
135
135
|
{
|
|
136
136
|
const foundType = this.determineType(node, input, targetType);
|
|
137
|
-
const bodyType =
|
|
137
|
+
const bodyType = filter_body_1.FilterBody.runSyntax(node.findDirectExpression(Expressions.FilterBody), input, foundType);
|
|
138
138
|
if (foundType === undefined || foundType.isGeneric()) {
|
|
139
139
|
this.addIfInferred(node, input, bodyType);
|
|
140
140
|
}
|
|
@@ -151,21 +151,21 @@ class Source {
|
|
|
151
151
|
case "CORRESPONDING":
|
|
152
152
|
{
|
|
153
153
|
const foundType = this.determineType(node, input, targetType);
|
|
154
|
-
|
|
154
|
+
corresponding_body_1.CorrespondingBody.runSyntax(node.findDirectExpression(Expressions.CorrespondingBody), input, foundType);
|
|
155
155
|
this.addIfInferred(node, input, foundType);
|
|
156
156
|
return foundType;
|
|
157
157
|
}
|
|
158
158
|
case "EXACT":
|
|
159
159
|
{
|
|
160
160
|
const foundType = this.determineType(node, input, targetType);
|
|
161
|
-
|
|
161
|
+
Source.runSyntax(node.findDirectExpression(Expressions.Source), input, foundType);
|
|
162
162
|
this.addIfInferred(node, input, foundType);
|
|
163
163
|
return foundType;
|
|
164
164
|
}
|
|
165
165
|
case "VALUE":
|
|
166
166
|
{
|
|
167
167
|
const foundType = this.determineType(node, input, targetType);
|
|
168
|
-
const bodyType =
|
|
168
|
+
const bodyType = value_body_1.ValueBody.runSyntax(node.findDirectExpression(Expressions.ValueBody), input, foundType);
|
|
169
169
|
if (foundType === undefined || foundType.isGeneric()) {
|
|
170
170
|
this.addIfInferred(node, input, bodyType);
|
|
171
171
|
}
|
|
@@ -189,46 +189,49 @@ class Source {
|
|
|
189
189
|
let hexExpected = false;
|
|
190
190
|
let hexNext = false;
|
|
191
191
|
while (children.length >= 0) {
|
|
192
|
-
if (first instanceof nodes_1.ExpressionNode
|
|
193
|
-
|
|
194
|
-
if (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
192
|
+
if (first instanceof nodes_1.ExpressionNode) {
|
|
193
|
+
const get = first.get();
|
|
194
|
+
if (get instanceof Expressions.MethodCallChain) {
|
|
195
|
+
context = method_call_chain_1.MethodCallChain.runSyntax(first, input, targetType);
|
|
196
|
+
if (context === undefined) {
|
|
197
|
+
const message = "Method has no RETURNING value";
|
|
198
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
199
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
200
|
+
}
|
|
198
201
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
context = new field_chain_1.FieldChain().runSyntax(first, input, type);
|
|
202
|
-
}
|
|
203
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.StringTemplate) {
|
|
204
|
-
context = new string_template_1.StringTemplate().runSyntax(first, input);
|
|
205
|
-
}
|
|
206
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Source) {
|
|
207
|
-
const found = new Source().runSyntax(first, input);
|
|
208
|
-
context = this.infer(context, found);
|
|
209
|
-
}
|
|
210
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Constant) {
|
|
211
|
-
const found = new constant_1.Constant().runSyntax(first);
|
|
212
|
-
context = this.infer(context, found);
|
|
213
|
-
}
|
|
214
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dereference) {
|
|
215
|
-
context = new dereference_1.Dereference().runSyntax(first, context, input);
|
|
216
|
-
}
|
|
217
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ComponentChain) {
|
|
218
|
-
context = new component_chain_1.ComponentChain().runSyntax(context, first, input);
|
|
219
|
-
}
|
|
220
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ArithOperator) {
|
|
221
|
-
if (first.concatTokens() === "**") {
|
|
222
|
-
context = new basic_1.FloatType();
|
|
202
|
+
else if (get instanceof Expressions.FieldChain) {
|
|
203
|
+
context = field_chain_1.FieldChain.runSyntax(first, input, type);
|
|
223
204
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
205
|
+
else if (get instanceof Expressions.StringTemplate) {
|
|
206
|
+
context = string_template_1.StringTemplate.runSyntax(first, input);
|
|
207
|
+
}
|
|
208
|
+
else if (get instanceof Expressions.Source) {
|
|
209
|
+
const found = Source.runSyntax(first, input);
|
|
210
|
+
context = this.infer(context, found);
|
|
211
|
+
}
|
|
212
|
+
else if (get instanceof Expressions.Constant) {
|
|
213
|
+
const found = constant_1.Constant.runSyntax(first);
|
|
214
|
+
context = this.infer(context, found);
|
|
215
|
+
}
|
|
216
|
+
else if (get instanceof Expressions.Dereference) {
|
|
217
|
+
context = dereference_1.Dereference.runSyntax(first, context, input);
|
|
218
|
+
}
|
|
219
|
+
else if (get instanceof Expressions.ComponentChain) {
|
|
220
|
+
context = component_chain_1.ComponentChain.runSyntax(context, first, input);
|
|
221
|
+
}
|
|
222
|
+
else if (get instanceof Expressions.ArithOperator) {
|
|
223
|
+
if (first.concatTokens() === "**") {
|
|
224
|
+
context = new basic_1.FloatType();
|
|
225
|
+
}
|
|
226
|
+
const operator = first.concatTokens().toUpperCase();
|
|
227
|
+
if (operator === "BIT-OR" || operator === "BIT-AND" || operator === "BIT-XOR") {
|
|
228
|
+
hexExpected = true;
|
|
229
|
+
hexNext = true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if (get instanceof Expressions.AttributeChain) {
|
|
233
|
+
context = attribute_chain_1.AttributeChain.runSyntax(context, first, input, type);
|
|
228
234
|
}
|
|
229
|
-
}
|
|
230
|
-
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.AttributeChain) {
|
|
231
|
-
context = new attribute_chain_1.AttributeChain().runSyntax(context, first, input, type);
|
|
232
235
|
}
|
|
233
236
|
if (hexExpected === true) {
|
|
234
237
|
if (!(context instanceof basic_1.VoidType)
|
|
@@ -239,7 +242,7 @@ class Source {
|
|
|
239
242
|
&& !(context instanceof unknown_type_1.UnknownType)) {
|
|
240
243
|
const message = "Operator only valid for XSTRING or HEX";
|
|
241
244
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
242
|
-
return
|
|
245
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
243
246
|
}
|
|
244
247
|
if (hexNext === false) {
|
|
245
248
|
hexExpected = false;
|
|
@@ -257,13 +260,13 @@ class Source {
|
|
|
257
260
|
return context;
|
|
258
261
|
}
|
|
259
262
|
////////////////////////////////
|
|
260
|
-
traverseRemainingChildren(children, input) {
|
|
263
|
+
static traverseRemainingChildren(children, input) {
|
|
261
264
|
const last = children[children.length - 1];
|
|
262
265
|
if (last && last.get() instanceof Expressions.Source) {
|
|
263
|
-
|
|
266
|
+
Source.runSyntax(last, input);
|
|
264
267
|
}
|
|
265
268
|
}
|
|
266
|
-
infer(context, found) {
|
|
269
|
+
static infer(context, found) {
|
|
267
270
|
if (context instanceof basic_1.FloatType && found instanceof basic_1.IntegerType) {
|
|
268
271
|
return context;
|
|
269
272
|
}
|
|
@@ -271,9 +274,9 @@ class Source {
|
|
|
271
274
|
return found;
|
|
272
275
|
}
|
|
273
276
|
}
|
|
274
|
-
addIfInferred(node, input, inferredType) {
|
|
277
|
+
static addIfInferred(node, input, inferredType) {
|
|
275
278
|
const basic = new basic_types_1.BasicTypes(input);
|
|
276
|
-
const typeExpression = node.
|
|
279
|
+
const typeExpression = node.findDirectExpression(Expressions.TypeNameOrInfer);
|
|
277
280
|
const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();
|
|
278
281
|
const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();
|
|
279
282
|
if (typeName === "#" && inferredType && typeToken) {
|
|
@@ -295,9 +298,9 @@ class Source {
|
|
|
295
298
|
}
|
|
296
299
|
}
|
|
297
300
|
}
|
|
298
|
-
determineType(node, input, targetType) {
|
|
301
|
+
static determineType(node, input, targetType) {
|
|
299
302
|
const basic = new basic_types_1.BasicTypes(input);
|
|
300
|
-
const typeExpression = node.
|
|
303
|
+
const typeExpression = node.findDirectExpression(Expressions.TypeNameOrInfer);
|
|
301
304
|
const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();
|
|
302
305
|
const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();
|
|
303
306
|
if (typeExpression === undefined) {
|
|
@@ -311,7 +314,7 @@ class Source {
|
|
|
311
314
|
if (found && found instanceof unknown_type_1.UnknownType) {
|
|
312
315
|
if (input.scope.getDDIC().inErrorNamespace(typeName) === false) {
|
|
313
316
|
input.scope.addReference(typeToken, undefined, _reference_1.ReferenceType.VoidType, input.filename);
|
|
314
|
-
return
|
|
317
|
+
return basic_1.VoidType.get(typeName);
|
|
315
318
|
}
|
|
316
319
|
else {
|
|
317
320
|
const tid = new _typed_identifier_1.TypedIdentifier(typeToken, input.filename, found);
|
|
@@ -322,7 +325,7 @@ class Source {
|
|
|
322
325
|
else if (found === undefined) {
|
|
323
326
|
const message = "Type \"" + typeName + "\" not found in scope, VALUE";
|
|
324
327
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
325
|
-
return
|
|
328
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
326
329
|
}
|
|
327
330
|
return found;
|
|
328
331
|
}
|
|
@@ -5,7 +5,7 @@ const basic_1 = require("../../types/basic");
|
|
|
5
5
|
const _reference_1 = require("../_reference");
|
|
6
6
|
const _syntax_input_1 = require("../_syntax_input");
|
|
7
7
|
class SourceField {
|
|
8
|
-
runSyntax(node, input, type, error = true) {
|
|
8
|
+
static runSyntax(node, input, type, error = true) {
|
|
9
9
|
const token = node.getFirstToken();
|
|
10
10
|
const name = token.getStr();
|
|
11
11
|
const found = input.scope.findVariable(name);
|
|
@@ -14,7 +14,7 @@ class SourceField {
|
|
|
14
14
|
if (error === true) {
|
|
15
15
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
18
18
|
}
|
|
19
19
|
if (type) {
|
|
20
20
|
input.scope.addReference(token, found, type, input.filename);
|
|
@@ -5,13 +5,13 @@ const basic_1 = require("../../types/basic");
|
|
|
5
5
|
const _reference_1 = require("../_reference");
|
|
6
6
|
const _syntax_input_1 = require("../_syntax_input");
|
|
7
7
|
class SourceFieldSymbol {
|
|
8
|
-
runSyntax(node, input) {
|
|
8
|
+
static runSyntax(node, input) {
|
|
9
9
|
const token = node.getFirstToken();
|
|
10
10
|
const found = input.scope.findVariable(token.getStr());
|
|
11
11
|
if (found === undefined) {
|
|
12
12
|
const message = "\"" + node.getFirstToken().getStr() + "\" not found, SourceFieldSymbol";
|
|
13
13
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
14
|
-
return
|
|
14
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
15
15
|
}
|
|
16
16
|
input.scope.addReference(token, found, _reference_1.ReferenceType.DataReadReference, input.filename);
|
|
17
17
|
return found.getType();
|
|
@@ -9,16 +9,16 @@ const source_1 = require("./source");
|
|
|
9
9
|
const sql_in_1 = require("./sql_in");
|
|
10
10
|
const sql_source_1 = require("./sql_source");
|
|
11
11
|
class SQLCompare {
|
|
12
|
-
runSyntax(node, input, tables) {
|
|
12
|
+
static runSyntax(node, input, tables) {
|
|
13
13
|
var _a, _b;
|
|
14
14
|
let sourceType;
|
|
15
15
|
let token;
|
|
16
16
|
if (((_a = node.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Dynamic) {
|
|
17
|
-
|
|
17
|
+
dynamic_1.Dynamic.runSyntax(node.getFirstChild(), input);
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) {
|
|
21
|
-
|
|
21
|
+
source_1.Source.runSyntax(s, input);
|
|
22
22
|
}
|
|
23
23
|
for (const s of node.findDirectExpressions(Expressions.SQLSource)) {
|
|
24
24
|
for (const child of s.getChildren()) {
|
|
@@ -27,11 +27,11 @@ class SQLCompare {
|
|
|
27
27
|
break;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
sourceType =
|
|
30
|
+
sourceType = sql_source_1.SQLSource.runSyntax(s, input);
|
|
31
31
|
}
|
|
32
32
|
const sqlin = node.findDirectExpression(Expressions.SQLIn);
|
|
33
33
|
if (sqlin) {
|
|
34
|
-
|
|
34
|
+
sql_in_1.SQLIn.runSyntax(sqlin, input);
|
|
35
35
|
}
|
|
36
36
|
const fieldName = (_b = node.findDirectExpression(Expressions.SQLFieldName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
|
|
37
37
|
if (fieldName && sourceType && token) {
|
|
@@ -69,7 +69,7 @@ class SQLCompare {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
findType(fieldName, tables, scope) {
|
|
72
|
+
static findType(fieldName, tables, scope) {
|
|
73
73
|
for (const t of tables) {
|
|
74
74
|
const type = t === null || t === void 0 ? void 0 : t.parseType(scope.getRegistry());
|
|
75
75
|
if (type instanceof basic_1.StructureType) {
|
|
@@ -6,13 +6,13 @@ const source_1 = require("./source");
|
|
|
6
6
|
const basic_1 = require("../../types/basic");
|
|
7
7
|
const _syntax_input_1 = require("../_syntax_input");
|
|
8
8
|
class SQLForAllEntries {
|
|
9
|
-
runSyntax(node, input) {
|
|
9
|
+
static runSyntax(node, input) {
|
|
10
10
|
let s = node.findFirstExpression(Expressions.Source);
|
|
11
11
|
if (s === undefined) {
|
|
12
12
|
s = node.findFirstExpression(Expressions.SimpleSource3);
|
|
13
13
|
}
|
|
14
14
|
if (s) {
|
|
15
|
-
const type =
|
|
15
|
+
const type = source_1.Source.runSyntax(s, input);
|
|
16
16
|
if (type instanceof basic_1.VoidType) {
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
@@ -5,16 +5,16 @@ const Expressions = require("../../2_statements/expressions");
|
|
|
5
5
|
const dynamic_1 = require("./dynamic");
|
|
6
6
|
const database_table_1 = require("./database_table");
|
|
7
7
|
class SQLFrom {
|
|
8
|
-
runSyntax(node, input) {
|
|
8
|
+
static runSyntax(node, input) {
|
|
9
9
|
const ret = [];
|
|
10
10
|
const fromList = node.findAllExpressions(Expressions.SQLFromSource);
|
|
11
11
|
for (const from of fromList) {
|
|
12
12
|
for (const d of from.findAllExpressions(Expressions.Dynamic)) {
|
|
13
|
-
|
|
13
|
+
dynamic_1.Dynamic.runSyntax(d, input);
|
|
14
14
|
}
|
|
15
15
|
const dbtab = from.findFirstExpression(Expressions.DatabaseTable);
|
|
16
16
|
if (dbtab !== undefined) {
|
|
17
|
-
ret.push(
|
|
17
|
+
ret.push(database_table_1.DatabaseTable.runSyntax(dbtab, input));
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
return ret;
|
|
@@ -6,11 +6,11 @@ const basic_1 = require("../../types/basic");
|
|
|
6
6
|
const _syntax_input_1 = require("../_syntax_input");
|
|
7
7
|
const sql_source_1 = require("./sql_source");
|
|
8
8
|
class SQLIn {
|
|
9
|
-
runSyntax(node, input) {
|
|
9
|
+
static runSyntax(node, input) {
|
|
10
10
|
if (node.getChildren().length === 2) {
|
|
11
11
|
const insource = node.findFirstExpression(Expressions.SQLSource);
|
|
12
12
|
if (insource) {
|
|
13
|
-
const intype =
|
|
13
|
+
const intype = sql_source_1.SQLSource.runSyntax(insource, input);
|
|
14
14
|
if (intype &&
|
|
15
15
|
!(intype instanceof basic_1.VoidType) &&
|
|
16
16
|
!(intype instanceof basic_1.UnknownType) &&
|
|
@@ -23,10 +23,10 @@ class SQLIn {
|
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
for (const s of node.findDirectExpressions(Expressions.SQLSource)) {
|
|
26
|
-
|
|
26
|
+
sql_source_1.SQLSource.runSyntax(s, input);
|
|
27
27
|
}
|
|
28
28
|
for (const s of node.findDirectExpressions(Expressions.SQLSourceNoSpace)) {
|
|
29
|
-
|
|
29
|
+
sql_source_1.SQLSource.runSyntax(s, input);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -4,10 +4,10 @@ exports.SQLOrderBy = void 0;
|
|
|
4
4
|
const Expressions = require("../../2_statements/expressions");
|
|
5
5
|
const dynamic_1 = require("./dynamic");
|
|
6
6
|
class SQLOrderBy {
|
|
7
|
-
runSyntax(node, input) {
|
|
7
|
+
static runSyntax(node, input) {
|
|
8
8
|
const dyn = node.findDirectExpression(Expressions.Dynamic);
|
|
9
9
|
if (dyn) {
|
|
10
|
-
|
|
10
|
+
dynamic_1.Dynamic.runSyntax(dyn, input);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -4,12 +4,12 @@ exports.SQLSource = void 0;
|
|
|
4
4
|
const Expressions = require("../../2_statements/expressions");
|
|
5
5
|
const source_1 = require("./source");
|
|
6
6
|
class SQLSource {
|
|
7
|
-
runSyntax(node, input) {
|
|
7
|
+
static runSyntax(node, input) {
|
|
8
8
|
for (const s of node.findAllExpressions(Expressions.Source)) {
|
|
9
|
-
return
|
|
9
|
+
return source_1.Source.runSyntax(s, input);
|
|
10
10
|
}
|
|
11
11
|
for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
|
|
12
|
-
return
|
|
12
|
+
return source_1.Source.runSyntax(s, input);
|
|
13
13
|
}
|
|
14
14
|
return undefined;
|
|
15
15
|
}
|