flowquery 1.0.46 → 1.0.48
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/dist/flowquery.min.js +1 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/parsing/data_structures/list_comprehension.d.ts +56 -0
- package/dist/parsing/data_structures/list_comprehension.d.ts.map +1 -0
- package/dist/parsing/data_structures/list_comprehension.js +102 -0
- package/dist/parsing/data_structures/list_comprehension.js.map +1 -0
- package/dist/parsing/parser.d.ts +18 -0
- package/dist/parsing/parser.d.ts.map +1 -1
- package/dist/parsing/parser.js +92 -0
- package/dist/parsing/parser.js.map +1 -1
- package/package.json +4 -1
- package/.editorconfig +0 -21
- package/.gitattributes +0 -3
- package/.github/workflows/npm-publish.yml +0 -32
- package/.github/workflows/python-publish.yml +0 -143
- package/.github/workflows/release.yml +0 -107
- package/.husky/pre-commit +0 -28
- package/.prettierrc +0 -22
- package/CODE_OF_CONDUCT.md +0 -10
- package/FlowQueryLogoIcon.png +0 -0
- package/SECURITY.md +0 -14
- package/SUPPORT.md +0 -13
- package/docs/flowquery.min.js +0 -1
- package/docs/index.html +0 -105
- package/flowquery-py/CONTRIBUTING.md +0 -127
- package/flowquery-py/README.md +0 -67
- package/flowquery-py/misc/data/test.json +0 -10
- package/flowquery-py/misc/data/users.json +0 -242
- package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
- package/flowquery-py/pyproject.toml +0 -121
- package/flowquery-py/setup_env.ps1 +0 -92
- package/flowquery-py/setup_env.sh +0 -87
- package/flowquery-py/src/__init__.py +0 -38
- package/flowquery-py/src/__main__.py +0 -10
- package/flowquery-py/src/compute/__init__.py +0 -6
- package/flowquery-py/src/compute/flowquery.py +0 -68
- package/flowquery-py/src/compute/runner.py +0 -64
- package/flowquery-py/src/extensibility.py +0 -52
- package/flowquery-py/src/graph/__init__.py +0 -31
- package/flowquery-py/src/graph/data.py +0 -136
- package/flowquery-py/src/graph/database.py +0 -141
- package/flowquery-py/src/graph/hops.py +0 -43
- package/flowquery-py/src/graph/node.py +0 -143
- package/flowquery-py/src/graph/node_data.py +0 -26
- package/flowquery-py/src/graph/node_reference.py +0 -50
- package/flowquery-py/src/graph/pattern.py +0 -115
- package/flowquery-py/src/graph/pattern_expression.py +0 -67
- package/flowquery-py/src/graph/patterns.py +0 -42
- package/flowquery-py/src/graph/physical_node.py +0 -41
- package/flowquery-py/src/graph/physical_relationship.py +0 -36
- package/flowquery-py/src/graph/relationship.py +0 -193
- package/flowquery-py/src/graph/relationship_data.py +0 -36
- package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
- package/flowquery-py/src/graph/relationship_reference.py +0 -21
- package/flowquery-py/src/io/__init__.py +0 -5
- package/flowquery-py/src/io/command_line.py +0 -108
- package/flowquery-py/src/parsing/__init__.py +0 -17
- package/flowquery-py/src/parsing/alias.py +0 -20
- package/flowquery-py/src/parsing/alias_option.py +0 -11
- package/flowquery-py/src/parsing/ast_node.py +0 -147
- package/flowquery-py/src/parsing/base_parser.py +0 -84
- package/flowquery-py/src/parsing/components/__init__.py +0 -19
- package/flowquery-py/src/parsing/components/csv.py +0 -8
- package/flowquery-py/src/parsing/components/from_.py +0 -12
- package/flowquery-py/src/parsing/components/headers.py +0 -12
- package/flowquery-py/src/parsing/components/json.py +0 -8
- package/flowquery-py/src/parsing/components/null.py +0 -10
- package/flowquery-py/src/parsing/components/post.py +0 -8
- package/flowquery-py/src/parsing/components/text.py +0 -8
- package/flowquery-py/src/parsing/context.py +0 -50
- package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
- package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
- package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
- package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
- package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
- package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
- package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
- package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
- package/flowquery-py/src/parsing/expressions/expression.py +0 -141
- package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
- package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
- package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
- package/flowquery-py/src/parsing/expressions/number.py +0 -32
- package/flowquery-py/src/parsing/expressions/operator.py +0 -271
- package/flowquery-py/src/parsing/expressions/reference.py +0 -47
- package/flowquery-py/src/parsing/expressions/string.py +0 -27
- package/flowquery-py/src/parsing/functions/__init__.py +0 -127
- package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
- package/flowquery-py/src/parsing/functions/async_function.py +0 -65
- package/flowquery-py/src/parsing/functions/avg.py +0 -55
- package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
- package/flowquery-py/src/parsing/functions/collect.py +0 -75
- package/flowquery-py/src/parsing/functions/count.py +0 -79
- package/flowquery-py/src/parsing/functions/date_.py +0 -61
- package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
- package/flowquery-py/src/parsing/functions/duration.py +0 -159
- package/flowquery-py/src/parsing/functions/element_id.py +0 -50
- package/flowquery-py/src/parsing/functions/function.py +0 -68
- package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
- package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
- package/flowquery-py/src/parsing/functions/functions.py +0 -67
- package/flowquery-py/src/parsing/functions/head.py +0 -39
- package/flowquery-py/src/parsing/functions/id_.py +0 -49
- package/flowquery-py/src/parsing/functions/join.py +0 -49
- package/flowquery-py/src/parsing/functions/keys.py +0 -34
- package/flowquery-py/src/parsing/functions/last.py +0 -39
- package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
- package/flowquery-py/src/parsing/functions/localtime.py +0 -57
- package/flowquery-py/src/parsing/functions/max_.py +0 -49
- package/flowquery-py/src/parsing/functions/min_.py +0 -49
- package/flowquery-py/src/parsing/functions/nodes.py +0 -48
- package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
- package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
- package/flowquery-py/src/parsing/functions/properties.py +0 -50
- package/flowquery-py/src/parsing/functions/rand.py +0 -28
- package/flowquery-py/src/parsing/functions/range_.py +0 -41
- package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
- package/flowquery-py/src/parsing/functions/relationships.py +0 -46
- package/flowquery-py/src/parsing/functions/replace.py +0 -39
- package/flowquery-py/src/parsing/functions/round_.py +0 -34
- package/flowquery-py/src/parsing/functions/schema.py +0 -40
- package/flowquery-py/src/parsing/functions/size.py +0 -34
- package/flowquery-py/src/parsing/functions/split.py +0 -54
- package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
- package/flowquery-py/src/parsing/functions/stringify.py +0 -49
- package/flowquery-py/src/parsing/functions/substring.py +0 -76
- package/flowquery-py/src/parsing/functions/sum.py +0 -51
- package/flowquery-py/src/parsing/functions/tail.py +0 -37
- package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
- package/flowquery-py/src/parsing/functions/time_.py +0 -57
- package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
- package/flowquery-py/src/parsing/functions/to_float.py +0 -46
- package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
- package/flowquery-py/src/parsing/functions/to_json.py +0 -35
- package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
- package/flowquery-py/src/parsing/functions/to_string.py +0 -41
- package/flowquery-py/src/parsing/functions/trim.py +0 -37
- package/flowquery-py/src/parsing/functions/type_.py +0 -47
- package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
- package/flowquery-py/src/parsing/logic/__init__.py +0 -15
- package/flowquery-py/src/parsing/logic/case.py +0 -28
- package/flowquery-py/src/parsing/logic/else_.py +0 -12
- package/flowquery-py/src/parsing/logic/end.py +0 -8
- package/flowquery-py/src/parsing/logic/then.py +0 -12
- package/flowquery-py/src/parsing/logic/when.py +0 -12
- package/flowquery-py/src/parsing/operations/__init__.py +0 -46
- package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
- package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
- package/flowquery-py/src/parsing/operations/call.py +0 -73
- package/flowquery-py/src/parsing/operations/create_node.py +0 -35
- package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
- package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
- package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
- package/flowquery-py/src/parsing/operations/group_by.py +0 -148
- package/flowquery-py/src/parsing/operations/limit.py +0 -33
- package/flowquery-py/src/parsing/operations/load.py +0 -148
- package/flowquery-py/src/parsing/operations/match.py +0 -52
- package/flowquery-py/src/parsing/operations/operation.py +0 -69
- package/flowquery-py/src/parsing/operations/order_by.py +0 -114
- package/flowquery-py/src/parsing/operations/projection.py +0 -21
- package/flowquery-py/src/parsing/operations/return_op.py +0 -88
- package/flowquery-py/src/parsing/operations/union.py +0 -115
- package/flowquery-py/src/parsing/operations/union_all.py +0 -17
- package/flowquery-py/src/parsing/operations/unwind.py +0 -42
- package/flowquery-py/src/parsing/operations/where.py +0 -43
- package/flowquery-py/src/parsing/operations/with_op.py +0 -18
- package/flowquery-py/src/parsing/parser.py +0 -1384
- package/flowquery-py/src/parsing/parser_state.py +0 -26
- package/flowquery-py/src/parsing/token_to_node.py +0 -109
- package/flowquery-py/src/tokenization/__init__.py +0 -23
- package/flowquery-py/src/tokenization/keyword.py +0 -54
- package/flowquery-py/src/tokenization/operator.py +0 -29
- package/flowquery-py/src/tokenization/string_walker.py +0 -158
- package/flowquery-py/src/tokenization/symbol.py +0 -19
- package/flowquery-py/src/tokenization/token.py +0 -693
- package/flowquery-py/src/tokenization/token_mapper.py +0 -53
- package/flowquery-py/src/tokenization/token_type.py +0 -21
- package/flowquery-py/src/tokenization/tokenizer.py +0 -214
- package/flowquery-py/src/tokenization/trie.py +0 -125
- package/flowquery-py/src/utils/__init__.py +0 -6
- package/flowquery-py/src/utils/object_utils.py +0 -20
- package/flowquery-py/src/utils/string_utils.py +0 -113
- package/flowquery-py/tests/__init__.py +0 -1
- package/flowquery-py/tests/compute/__init__.py +0 -1
- package/flowquery-py/tests/compute/test_runner.py +0 -4902
- package/flowquery-py/tests/graph/__init__.py +0 -1
- package/flowquery-py/tests/graph/test_create.py +0 -56
- package/flowquery-py/tests/graph/test_data.py +0 -73
- package/flowquery-py/tests/graph/test_match.py +0 -40
- package/flowquery-py/tests/parsing/__init__.py +0 -1
- package/flowquery-py/tests/parsing/test_context.py +0 -34
- package/flowquery-py/tests/parsing/test_expression.py +0 -248
- package/flowquery-py/tests/parsing/test_parser.py +0 -1237
- package/flowquery-py/tests/test_extensibility.py +0 -611
- package/flowquery-py/tests/tokenization/__init__.py +0 -1
- package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
- package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
- package/flowquery-py/tests/tokenization/test_trie.py +0 -30
- package/flowquery-vscode/.vscode-test.mjs +0 -5
- package/flowquery-vscode/.vscodeignore +0 -13
- package/flowquery-vscode/LICENSE +0 -21
- package/flowquery-vscode/README.md +0 -11
- package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
- package/flowquery-vscode/eslint.config.mjs +0 -25
- package/flowquery-vscode/extension.js +0 -508
- package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
- package/flowquery-vscode/flowquery-worker.js +0 -66
- package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
- package/flowquery-vscode/jsconfig.json +0 -13
- package/flowquery-vscode/libs/page.css +0 -53
- package/flowquery-vscode/libs/table.css +0 -13
- package/flowquery-vscode/libs/tabs.css +0 -66
- package/flowquery-vscode/package-lock.json +0 -2917
- package/flowquery-vscode/package.json +0 -51
- package/flowquery-vscode/test/extension.test.js +0 -196
- package/flowquery-vscode/test/worker.test.js +0 -25
- package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
- package/jest.config.js +0 -14
- package/misc/apps/RAG/README.md +0 -29
- package/misc/apps/RAG/data/chats.json +0 -302
- package/misc/apps/RAG/data/emails.json +0 -182
- package/misc/apps/RAG/data/events.json +0 -226
- package/misc/apps/RAG/data/files.json +0 -172
- package/misc/apps/RAG/data/users.json +0 -158
- package/misc/apps/RAG/jest.config.js +0 -21
- package/misc/apps/RAG/package.json +0 -48
- package/misc/apps/RAG/public/index.html +0 -18
- package/misc/apps/RAG/src/App.css +0 -42
- package/misc/apps/RAG/src/App.tsx +0 -50
- package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
- package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
- package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
- package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
- package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
- package/misc/apps/RAG/src/components/ChatInput.css +0 -23
- package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
- package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
- package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
- package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
- package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
- package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
- package/misc/apps/RAG/src/components/index.ts +0 -28
- package/misc/apps/RAG/src/graph/index.ts +0 -19
- package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
- package/misc/apps/RAG/src/index.tsx +0 -29
- package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
- package/misc/apps/RAG/src/prompts/index.ts +0 -10
- package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
- package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
- package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
- package/misc/apps/RAG/src/utils/Llm.ts +0 -248
- package/misc/apps/RAG/src/utils/index.ts +0 -12
- package/misc/apps/RAG/tsconfig.json +0 -22
- package/misc/apps/RAG/webpack.config.js +0 -43
- package/misc/apps/README.md +0 -1
- package/misc/queries/analyze_catfacts.cql +0 -75
- package/misc/queries/azure_openai_completions.cql +0 -13
- package/misc/queries/azure_openai_models.cql +0 -9
- package/misc/queries/mock_pipeline.cql +0 -84
- package/misc/queries/openai_completions.cql +0 -15
- package/misc/queries/openai_models.cql +0 -13
- package/misc/queries/test.cql +0 -6
- package/misc/queries/tool_inference.cql +0 -24
- package/misc/queries/wisdom.cql +0 -6
- package/misc/queries/wisdom_letter_histogram.cql +0 -8
- package/src/compute/flowquery.ts +0 -46
- package/src/compute/runner.ts +0 -66
- package/src/extensibility.ts +0 -45
- package/src/graph/data.ts +0 -130
- package/src/graph/database.ts +0 -143
- package/src/graph/hops.ts +0 -22
- package/src/graph/node.ts +0 -122
- package/src/graph/node_data.ts +0 -18
- package/src/graph/node_reference.ts +0 -38
- package/src/graph/pattern.ts +0 -110
- package/src/graph/pattern_expression.ts +0 -48
- package/src/graph/patterns.ts +0 -36
- package/src/graph/physical_node.ts +0 -23
- package/src/graph/physical_relationship.ts +0 -23
- package/src/graph/relationship.ts +0 -167
- package/src/graph/relationship_data.ts +0 -31
- package/src/graph/relationship_match_collector.ts +0 -64
- package/src/graph/relationship_reference.ts +0 -25
- package/src/index.browser.ts +0 -46
- package/src/index.node.ts +0 -55
- package/src/index.ts +0 -12
- package/src/io/command_line.ts +0 -74
- package/src/parsing/alias.ts +0 -23
- package/src/parsing/alias_option.ts +0 -5
- package/src/parsing/ast_node.ts +0 -153
- package/src/parsing/base_parser.ts +0 -98
- package/src/parsing/components/csv.ts +0 -9
- package/src/parsing/components/from.ts +0 -12
- package/src/parsing/components/headers.ts +0 -12
- package/src/parsing/components/json.ts +0 -9
- package/src/parsing/components/null.ts +0 -9
- package/src/parsing/components/post.ts +0 -9
- package/src/parsing/components/text.ts +0 -9
- package/src/parsing/context.ts +0 -54
- package/src/parsing/data_structures/associative_array.ts +0 -43
- package/src/parsing/data_structures/json_array.ts +0 -31
- package/src/parsing/data_structures/key_value_pair.ts +0 -37
- package/src/parsing/data_structures/lookup.ts +0 -44
- package/src/parsing/data_structures/range_lookup.ts +0 -36
- package/src/parsing/expressions/boolean.ts +0 -21
- package/src/parsing/expressions/expression.ts +0 -150
- package/src/parsing/expressions/expression_map.ts +0 -22
- package/src/parsing/expressions/f_string.ts +0 -26
- package/src/parsing/expressions/identifier.ts +0 -22
- package/src/parsing/expressions/number.ts +0 -40
- package/src/parsing/expressions/operator.ts +0 -354
- package/src/parsing/expressions/reference.ts +0 -45
- package/src/parsing/expressions/string.ts +0 -34
- package/src/parsing/functions/aggregate_function.ts +0 -58
- package/src/parsing/functions/async_function.ts +0 -64
- package/src/parsing/functions/avg.ts +0 -47
- package/src/parsing/functions/coalesce.ts +0 -49
- package/src/parsing/functions/collect.ts +0 -54
- package/src/parsing/functions/count.ts +0 -54
- package/src/parsing/functions/date.ts +0 -63
- package/src/parsing/functions/datetime.ts +0 -63
- package/src/parsing/functions/duration.ts +0 -143
- package/src/parsing/functions/element_id.ts +0 -51
- package/src/parsing/functions/function.ts +0 -60
- package/src/parsing/functions/function_factory.ts +0 -195
- package/src/parsing/functions/function_metadata.ts +0 -217
- package/src/parsing/functions/functions.ts +0 -70
- package/src/parsing/functions/head.ts +0 -42
- package/src/parsing/functions/id.ts +0 -51
- package/src/parsing/functions/join.ts +0 -40
- package/src/parsing/functions/keys.ts +0 -29
- package/src/parsing/functions/last.ts +0 -42
- package/src/parsing/functions/localdatetime.ts +0 -63
- package/src/parsing/functions/localtime.ts +0 -58
- package/src/parsing/functions/max.ts +0 -37
- package/src/parsing/functions/min.ts +0 -37
- package/src/parsing/functions/nodes.ts +0 -54
- package/src/parsing/functions/predicate_function.ts +0 -48
- package/src/parsing/functions/predicate_sum.ts +0 -47
- package/src/parsing/functions/properties.ts +0 -56
- package/src/parsing/functions/rand.ts +0 -21
- package/src/parsing/functions/range.ts +0 -37
- package/src/parsing/functions/reducer_element.ts +0 -10
- package/src/parsing/functions/relationships.ts +0 -52
- package/src/parsing/functions/replace.ts +0 -38
- package/src/parsing/functions/round.ts +0 -28
- package/src/parsing/functions/schema.ts +0 -39
- package/src/parsing/functions/size.ts +0 -28
- package/src/parsing/functions/split.ts +0 -45
- package/src/parsing/functions/string_distance.ts +0 -83
- package/src/parsing/functions/stringify.ts +0 -37
- package/src/parsing/functions/substring.ts +0 -68
- package/src/parsing/functions/sum.ts +0 -41
- package/src/parsing/functions/tail.ts +0 -39
- package/src/parsing/functions/temporal_utils.ts +0 -180
- package/src/parsing/functions/time.ts +0 -58
- package/src/parsing/functions/timestamp.ts +0 -37
- package/src/parsing/functions/to_float.ts +0 -50
- package/src/parsing/functions/to_integer.ts +0 -50
- package/src/parsing/functions/to_json.ts +0 -28
- package/src/parsing/functions/to_lower.ts +0 -28
- package/src/parsing/functions/to_string.ts +0 -32
- package/src/parsing/functions/trim.ts +0 -28
- package/src/parsing/functions/type.ts +0 -39
- package/src/parsing/functions/value_holder.ts +0 -13
- package/src/parsing/logic/case.ts +0 -26
- package/src/parsing/logic/else.ts +0 -12
- package/src/parsing/logic/end.ts +0 -9
- package/src/parsing/logic/then.ts +0 -12
- package/src/parsing/logic/when.ts +0 -12
- package/src/parsing/operations/aggregated_return.ts +0 -22
- package/src/parsing/operations/aggregated_with.ts +0 -18
- package/src/parsing/operations/call.ts +0 -69
- package/src/parsing/operations/create_node.ts +0 -39
- package/src/parsing/operations/create_relationship.ts +0 -38
- package/src/parsing/operations/delete_node.ts +0 -33
- package/src/parsing/operations/delete_relationship.ts +0 -32
- package/src/parsing/operations/group_by.ts +0 -137
- package/src/parsing/operations/limit.ts +0 -31
- package/src/parsing/operations/load.ts +0 -146
- package/src/parsing/operations/match.ts +0 -54
- package/src/parsing/operations/operation.ts +0 -69
- package/src/parsing/operations/order_by.ts +0 -126
- package/src/parsing/operations/projection.ts +0 -18
- package/src/parsing/operations/return.ts +0 -76
- package/src/parsing/operations/union.ts +0 -114
- package/src/parsing/operations/union_all.ts +0 -16
- package/src/parsing/operations/unwind.ts +0 -36
- package/src/parsing/operations/where.ts +0 -42
- package/src/parsing/operations/with.ts +0 -20
- package/src/parsing/parser.ts +0 -1641
- package/src/parsing/parser_state.ts +0 -25
- package/src/parsing/token_to_node.ts +0 -114
- package/src/tokenization/keyword.ts +0 -50
- package/src/tokenization/operator.ts +0 -25
- package/src/tokenization/string_walker.ts +0 -197
- package/src/tokenization/symbol.ts +0 -15
- package/src/tokenization/token.ts +0 -764
- package/src/tokenization/token_mapper.ts +0 -53
- package/src/tokenization/token_type.ts +0 -16
- package/src/tokenization/tokenizer.ts +0 -250
- package/src/tokenization/trie.ts +0 -117
- package/src/utils/object_utils.ts +0 -17
- package/src/utils/string_utils.ts +0 -114
- package/tests/compute/runner.test.ts +0 -4559
- package/tests/extensibility.test.ts +0 -643
- package/tests/graph/create.test.ts +0 -36
- package/tests/graph/data.test.ts +0 -58
- package/tests/graph/match.test.ts +0 -29
- package/tests/parsing/context.test.ts +0 -27
- package/tests/parsing/expression.test.ts +0 -303
- package/tests/parsing/parser.test.ts +0 -1327
- package/tests/tokenization/token_mapper.test.ts +0 -47
- package/tests/tokenization/tokenizer.test.ts +0 -191
- package/tests/tokenization/trie.test.ts +0 -20
- package/tsconfig.json +0 -19
- package/typedoc.json +0 -16
- package/vscode-settings.json.recommended +0 -16
- package/webpack.config.js +0 -26
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import Node from "../../graph/node";
|
|
2
|
-
import Pattern from "../../graph/pattern";
|
|
3
|
-
import Patterns from "../../graph/patterns";
|
|
4
|
-
import Operation from "./operation";
|
|
5
|
-
|
|
6
|
-
class Match extends Operation {
|
|
7
|
-
private _patterns: Patterns | null = null;
|
|
8
|
-
private _optional: boolean = false;
|
|
9
|
-
|
|
10
|
-
constructor(patterns: Pattern[] = [], optional: boolean = false) {
|
|
11
|
-
super();
|
|
12
|
-
this._patterns = new Patterns(patterns);
|
|
13
|
-
this._optional = optional;
|
|
14
|
-
}
|
|
15
|
-
public get patterns(): Pattern[] {
|
|
16
|
-
return this._patterns ? this._patterns.patterns : [];
|
|
17
|
-
}
|
|
18
|
-
public get optional(): boolean {
|
|
19
|
-
return this._optional;
|
|
20
|
-
}
|
|
21
|
-
protected toString(): string {
|
|
22
|
-
return this._optional ? "OptionalMatch" : "Match";
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Executes the match operation by chaining the patterns together.
|
|
26
|
-
* After each pattern match, it continues to the next operation in the chain.
|
|
27
|
-
* If optional and no match is found, continues with null values.
|
|
28
|
-
* @return Promise<void>
|
|
29
|
-
*/
|
|
30
|
-
public async run(): Promise<void> {
|
|
31
|
-
await this._patterns!.initialize();
|
|
32
|
-
let matched = false;
|
|
33
|
-
this._patterns!.toDoNext = async () => {
|
|
34
|
-
matched = true;
|
|
35
|
-
// Continue to the next operation after all patterns are matched
|
|
36
|
-
await this.next?.run();
|
|
37
|
-
};
|
|
38
|
-
// Kick off the graph pattern traversal
|
|
39
|
-
await this._patterns!.traverse();
|
|
40
|
-
// For OPTIONAL MATCH: if nothing matched, continue with null values
|
|
41
|
-
if (!matched && this._optional) {
|
|
42
|
-
for (const pattern of this._patterns!.patterns) {
|
|
43
|
-
for (const element of pattern.chain) {
|
|
44
|
-
if (element instanceof Node) {
|
|
45
|
-
element.setValue(null!);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
await this.next?.run();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export default Match;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import ASTNode from "../ast_node";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Base class for all FlowQuery operations.
|
|
5
|
-
*
|
|
6
|
-
* Operations represent the main statements in FlowQuery (WITH, UNWIND, RETURN, LOAD, WHERE).
|
|
7
|
-
* They form a linked list structure and can be executed sequentially.
|
|
8
|
-
*
|
|
9
|
-
* @abstract
|
|
10
|
-
*/
|
|
11
|
-
abstract class Operation extends ASTNode {
|
|
12
|
-
private _previous: Operation | null = null;
|
|
13
|
-
private _next: Operation | null = null;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Creates a new Operation instance.
|
|
17
|
-
*/
|
|
18
|
-
constructor() {
|
|
19
|
-
super();
|
|
20
|
-
}
|
|
21
|
-
public get previous(): Operation | null {
|
|
22
|
-
return this._previous;
|
|
23
|
-
}
|
|
24
|
-
public set previous(value: Operation | null) {
|
|
25
|
-
this._previous = value;
|
|
26
|
-
}
|
|
27
|
-
public get next(): Operation | null {
|
|
28
|
-
return this._next;
|
|
29
|
-
}
|
|
30
|
-
public set next(value: Operation | null) {
|
|
31
|
-
this._next = value;
|
|
32
|
-
}
|
|
33
|
-
public addSibling(operation: Operation): void {
|
|
34
|
-
this._parent?.addChild(operation);
|
|
35
|
-
operation.previous = this;
|
|
36
|
-
this.next = operation;
|
|
37
|
-
}
|
|
38
|
-
public get isLast(): boolean {
|
|
39
|
-
return this._next === null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Executes this operation. Must be implemented by subclasses.
|
|
44
|
-
*
|
|
45
|
-
* @returns A promise that resolves when the operation completes
|
|
46
|
-
* @throws {Error} If not implemented by subclass
|
|
47
|
-
*/
|
|
48
|
-
public async run(): Promise<void> {
|
|
49
|
-
throw new Error("Not implemented");
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Finishes execution by calling finish on the next operation in the chain.
|
|
54
|
-
*
|
|
55
|
-
* @returns A promise that resolves when all operations finish
|
|
56
|
-
*/
|
|
57
|
-
public async finish(): Promise<void> {
|
|
58
|
-
await this.next?.finish();
|
|
59
|
-
}
|
|
60
|
-
public async initialize(): Promise<void> {
|
|
61
|
-
await this.next?.initialize();
|
|
62
|
-
}
|
|
63
|
-
public reset(): void {}
|
|
64
|
-
public get results(): Record<string, any>[] {
|
|
65
|
-
throw new Error("Not implemented");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export default Operation;
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import Expression from "../expressions/expression";
|
|
2
|
-
import Reference from "../expressions/reference";
|
|
3
|
-
import Operation from "./operation";
|
|
4
|
-
|
|
5
|
-
export interface SortField {
|
|
6
|
-
direction: "asc" | "desc";
|
|
7
|
-
/** The parsed expression to evaluate for this sort field. */
|
|
8
|
-
expression: Expression;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Represents an ORDER BY operation that sorts results.
|
|
13
|
-
*
|
|
14
|
-
* Can be attached to a RETURN operation (sorting its results),
|
|
15
|
-
* or used as a standalone accumulating operation after a non-aggregate WITH.
|
|
16
|
-
*
|
|
17
|
-
* Supports both simple field references and arbitrary expressions:
|
|
18
|
-
* @example
|
|
19
|
-
* ```
|
|
20
|
-
* RETURN x ORDER BY x DESC
|
|
21
|
-
* RETURN x ORDER BY toLower(x.name) ASC
|
|
22
|
-
* RETURN x ORDER BY string_distance(toLower(x.name), toLower('Thomas')) ASC
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
class OrderBy extends Operation {
|
|
26
|
-
private _fields: SortField[];
|
|
27
|
-
private _results: Record<string, any>[] = [];
|
|
28
|
-
/**
|
|
29
|
-
* Parallel array of pre-computed sort-key tuples, one entry per
|
|
30
|
-
* accumulated result row. Each inner array has one value per sort
|
|
31
|
-
* field, in the same order as `_fields`.
|
|
32
|
-
*/
|
|
33
|
-
private _sortKeys: any[][] = [];
|
|
34
|
-
|
|
35
|
-
constructor(fields: SortField[]) {
|
|
36
|
-
super();
|
|
37
|
-
this._fields = fields;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public get fields(): SortField[] {
|
|
41
|
-
return this._fields;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Evaluates every sort-field expression against the current runtime
|
|
46
|
-
* context and stores the resulting values. Must be called once per
|
|
47
|
-
* accumulated row (from `Return.run()`).
|
|
48
|
-
*/
|
|
49
|
-
public captureSortKeys(): void {
|
|
50
|
-
this._sortKeys.push(this._fields.map((f) => f.expression.value()));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Sorts an array of records using the pre-computed sort keys captured
|
|
55
|
-
* during accumulation. When no keys have been captured (e.g.
|
|
56
|
-
* aggregated returns), falls back to looking up simple reference
|
|
57
|
-
* identifiers in each record.
|
|
58
|
-
*/
|
|
59
|
-
public sort(records: Record<string, any>[]): Record<string, any>[] {
|
|
60
|
-
const useKeys = this._sortKeys.length === records.length;
|
|
61
|
-
// Build an index array so we can sort records and keys together.
|
|
62
|
-
const indices = records.map((_, i) => i);
|
|
63
|
-
const keys = this._sortKeys;
|
|
64
|
-
|
|
65
|
-
// Pre-compute fallback field names for when sort keys aren't
|
|
66
|
-
// available (aggregated returns). Simple references like `x`
|
|
67
|
-
// map to the column name; complex expressions have no fallback.
|
|
68
|
-
const fallbackFields: (string | null)[] = this._fields.map((f) => {
|
|
69
|
-
const root = f.expression.firstChild();
|
|
70
|
-
if (root instanceof Reference && f.expression.childCount() === 1) {
|
|
71
|
-
return (root as Reference).identifier;
|
|
72
|
-
}
|
|
73
|
-
return null;
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
indices.sort((ai, bi) => {
|
|
77
|
-
for (let f = 0; f < this._fields.length; f++) {
|
|
78
|
-
let aVal: any;
|
|
79
|
-
let bVal: any;
|
|
80
|
-
if (useKeys) {
|
|
81
|
-
aVal = keys[ai][f];
|
|
82
|
-
bVal = keys[bi][f];
|
|
83
|
-
} else if (fallbackFields[f] !== null) {
|
|
84
|
-
aVal = records[ai][fallbackFields[f]!];
|
|
85
|
-
bVal = records[bi][fallbackFields[f]!];
|
|
86
|
-
} else {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
let cmp = 0;
|
|
90
|
-
if (aVal == null && bVal == null) cmp = 0;
|
|
91
|
-
else if (aVal == null) cmp = -1;
|
|
92
|
-
else if (bVal == null) cmp = 1;
|
|
93
|
-
else if (aVal < bVal) cmp = -1;
|
|
94
|
-
else if (aVal > bVal) cmp = 1;
|
|
95
|
-
if (cmp !== 0) {
|
|
96
|
-
return this._fields[f].direction === "desc" ? -cmp : cmp;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return 0;
|
|
100
|
-
});
|
|
101
|
-
return indices.map((i) => records[i]);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* When used as a standalone operation (after non-aggregate WITH),
|
|
106
|
-
* accumulates records to sort later.
|
|
107
|
-
*/
|
|
108
|
-
public async run(): Promise<void> {
|
|
109
|
-
const record: Record<string, any> = {};
|
|
110
|
-
// Collect current variable values from the context
|
|
111
|
-
// This gets called per-row, and then finish() sorts and emits
|
|
112
|
-
await this.next?.run();
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
public async initialize(): Promise<void> {
|
|
116
|
-
this._results = [];
|
|
117
|
-
this._sortKeys = [];
|
|
118
|
-
await this.next?.initialize();
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
public get results(): Record<string, any>[] {
|
|
122
|
-
return this._results;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export default OrderBy;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import Expression from "../expressions/expression";
|
|
2
|
-
import Operation from "./operation";
|
|
3
|
-
|
|
4
|
-
class Projection extends Operation {
|
|
5
|
-
constructor(expressions: Expression[]) {
|
|
6
|
-
super();
|
|
7
|
-
this.children = expressions;
|
|
8
|
-
}
|
|
9
|
-
protected *expressions(): Generator<[Expression, string]> {
|
|
10
|
-
for (let i = 0; i < this.children.length; i++) {
|
|
11
|
-
const expression: Expression = this.children[i] as Expression;
|
|
12
|
-
const alias = expression.alias || `expr${i}`;
|
|
13
|
-
yield [expression, alias];
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default Projection;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import Limit from "./limit";
|
|
2
|
-
import OrderBy from "./order_by";
|
|
3
|
-
import Projection from "./projection";
|
|
4
|
-
import Where from "./where";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Represents a RETURN operation that produces the final query results.
|
|
8
|
-
*
|
|
9
|
-
* The RETURN operation evaluates expressions and collects them into result records.
|
|
10
|
-
* It can optionally have a WHERE clause to filter results.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* // RETURN x, y WHERE x > 0
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
class Return extends Projection {
|
|
18
|
-
protected _where: Where | null = null;
|
|
19
|
-
protected _results: Record<string, any>[] = [];
|
|
20
|
-
private _limit: Limit | null = null;
|
|
21
|
-
protected _orderBy: OrderBy | null = null;
|
|
22
|
-
public set where(where: Where) {
|
|
23
|
-
this._where = where;
|
|
24
|
-
}
|
|
25
|
-
public get where(): boolean {
|
|
26
|
-
if (this._where === null) {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
return this._where.value();
|
|
30
|
-
}
|
|
31
|
-
public set limit(limit: Limit) {
|
|
32
|
-
this._limit = limit;
|
|
33
|
-
}
|
|
34
|
-
public set orderBy(orderBy: OrderBy) {
|
|
35
|
-
this._orderBy = orderBy;
|
|
36
|
-
}
|
|
37
|
-
public async run(): Promise<void> {
|
|
38
|
-
if (!this.where) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// When ORDER BY is present, skip limit during accumulation;
|
|
42
|
-
// limit will be applied after sorting in get results()
|
|
43
|
-
if (this._orderBy === null && this._limit !== null && this._limit.isLimitReached) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const record: Map<string, any> = new Map();
|
|
47
|
-
for (const [expression, alias] of this.expressions()) {
|
|
48
|
-
const raw = expression.value();
|
|
49
|
-
const value: any = typeof raw === "object" && raw !== null ? structuredClone(raw) : raw;
|
|
50
|
-
record.set(alias, value);
|
|
51
|
-
}
|
|
52
|
-
// Capture sort-key values while expression bindings are still live.
|
|
53
|
-
if (this._orderBy !== null) {
|
|
54
|
-
this._orderBy.captureSortKeys();
|
|
55
|
-
}
|
|
56
|
-
this._results.push(Object.fromEntries(record));
|
|
57
|
-
if (this._orderBy === null && this._limit !== null) {
|
|
58
|
-
this._limit.increment();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
public async initialize(): Promise<void> {
|
|
62
|
-
this._results = [];
|
|
63
|
-
}
|
|
64
|
-
public get results(): Record<string, any>[] {
|
|
65
|
-
let results = this._results;
|
|
66
|
-
if (this._orderBy !== null) {
|
|
67
|
-
results = this._orderBy.sort(results);
|
|
68
|
-
}
|
|
69
|
-
if (this._orderBy !== null && this._limit !== null) {
|
|
70
|
-
results = results.slice(0, this._limit.limitValue);
|
|
71
|
-
}
|
|
72
|
-
return results;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export default Return;
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import Operation from "./operation";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents a UNION operation that combines results from two sub-queries.
|
|
5
|
-
*
|
|
6
|
-
* UNION merges the results of a left and right query pipeline, removing
|
|
7
|
-
* duplicate rows. Both sides must return the same column names.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```
|
|
11
|
-
* WITH 1 AS x RETURN x
|
|
12
|
-
* UNION
|
|
13
|
-
* WITH 2 AS x RETURN x
|
|
14
|
-
* // Results: [{x: 1}, {x: 2}]
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
class Union extends Operation {
|
|
18
|
-
protected _left: Operation | null = null;
|
|
19
|
-
protected _right: Operation | null = null;
|
|
20
|
-
protected _results: Record<string, any>[] = [];
|
|
21
|
-
|
|
22
|
-
public set left(operation: Operation) {
|
|
23
|
-
this._left = operation;
|
|
24
|
-
}
|
|
25
|
-
public get left(): Operation {
|
|
26
|
-
if (!this._left) {
|
|
27
|
-
throw new Error("Left operation is not set");
|
|
28
|
-
}
|
|
29
|
-
return this._left;
|
|
30
|
-
}
|
|
31
|
-
public set right(operation: Operation) {
|
|
32
|
-
this._right = operation;
|
|
33
|
-
}
|
|
34
|
-
public get right(): Operation {
|
|
35
|
-
if (!this._right) {
|
|
36
|
-
throw new Error("Right operation is not set");
|
|
37
|
-
}
|
|
38
|
-
return this._right;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
private lastInChain(operation: Operation): Operation {
|
|
42
|
-
let current = operation;
|
|
43
|
-
while (current.next) {
|
|
44
|
-
current = current.next;
|
|
45
|
-
}
|
|
46
|
-
return current;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public async initialize(): Promise<void> {
|
|
50
|
-
this._results = [];
|
|
51
|
-
await this.next?.initialize();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public async run(): Promise<void> {
|
|
55
|
-
// Execute left pipeline
|
|
56
|
-
await this._left!.initialize();
|
|
57
|
-
await this._left!.run();
|
|
58
|
-
await this._left!.finish();
|
|
59
|
-
const leftLast = this.lastInChain(this._left!);
|
|
60
|
-
const leftResults: Record<string, any>[] = leftLast.results;
|
|
61
|
-
|
|
62
|
-
// Execute right pipeline
|
|
63
|
-
await this._right!.initialize();
|
|
64
|
-
await this._right!.run();
|
|
65
|
-
await this._right!.finish();
|
|
66
|
-
const rightLast = this.lastInChain(this._right!);
|
|
67
|
-
const rightResults: Record<string, any>[] = rightLast.results;
|
|
68
|
-
|
|
69
|
-
// Validate column names match
|
|
70
|
-
if (leftResults.length > 0 && rightResults.length > 0) {
|
|
71
|
-
const leftKeys = Object.keys(leftResults[0]).sort().join(",");
|
|
72
|
-
const rightKeys = Object.keys(rightResults[0]).sort().join(",");
|
|
73
|
-
if (leftKeys !== rightKeys) {
|
|
74
|
-
throw new Error(
|
|
75
|
-
"All sub queries in a UNION must have the same return column names"
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Combine results
|
|
81
|
-
this._results = this.combine(leftResults, rightResults);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Combines results from left and right pipelines.
|
|
86
|
-
* UNION removes duplicates; subclass UnionAll overrides to keep all rows.
|
|
87
|
-
*/
|
|
88
|
-
protected combine(
|
|
89
|
-
left: Record<string, any>[],
|
|
90
|
-
right: Record<string, any>[]
|
|
91
|
-
): Record<string, any>[] {
|
|
92
|
-
const combined = [...left];
|
|
93
|
-
for (const row of right) {
|
|
94
|
-
const serialized = JSON.stringify(row);
|
|
95
|
-
const isDuplicate = combined.some(
|
|
96
|
-
(existing) => JSON.stringify(existing) === serialized
|
|
97
|
-
);
|
|
98
|
-
if (!isDuplicate) {
|
|
99
|
-
combined.push(row);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return combined;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
public async finish(): Promise<void> {
|
|
106
|
-
await this.next?.finish();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
public get results(): Record<string, any>[] {
|
|
110
|
-
return this._results;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export default Union;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import Union from "./union";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents a UNION ALL operation that concatenates results from two sub-queries
|
|
5
|
-
* without removing duplicates.
|
|
6
|
-
*/
|
|
7
|
-
class UnionAll extends Union {
|
|
8
|
-
protected combine(
|
|
9
|
-
left: Record<string, any>[],
|
|
10
|
-
right: Record<string, any>[]
|
|
11
|
-
): Record<string, any>[] {
|
|
12
|
-
return [...left, ...right];
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export default UnionAll;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import Expression from "../expressions/expression";
|
|
2
|
-
import Operation from "./operation";
|
|
3
|
-
|
|
4
|
-
class Unwind extends Operation {
|
|
5
|
-
private _value: any;
|
|
6
|
-
constructor(expression: Expression) {
|
|
7
|
-
super();
|
|
8
|
-
this.addChild(expression);
|
|
9
|
-
}
|
|
10
|
-
public get expression(): Expression {
|
|
11
|
-
return this.children[0] as Expression;
|
|
12
|
-
}
|
|
13
|
-
public get as(): string {
|
|
14
|
-
return this.children[1].value as unknown as string;
|
|
15
|
-
}
|
|
16
|
-
public async run(): Promise<void> {
|
|
17
|
-
const expression = this.expression.value();
|
|
18
|
-
if (expression === null || expression === undefined) {
|
|
19
|
-
this.next?.reset();
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (!Array.isArray(expression)) {
|
|
23
|
-
throw new Error("Expected array");
|
|
24
|
-
}
|
|
25
|
-
for (let i = 0; i < expression.length; i++) {
|
|
26
|
-
this._value = expression[i];
|
|
27
|
-
await this.next?.run();
|
|
28
|
-
}
|
|
29
|
-
this.next?.reset();
|
|
30
|
-
}
|
|
31
|
-
public value(): any {
|
|
32
|
-
return this._value;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export default Unwind;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import Expression from "../expressions/expression";
|
|
2
|
-
import Operation from "./operation";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Represents a WHERE operation that filters data based on a condition.
|
|
6
|
-
*
|
|
7
|
-
* The WHERE operation evaluates a boolean expression and only continues
|
|
8
|
-
* execution to the next operation if the condition is true.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* // RETURN x WHERE x > 0
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
class Where extends Operation {
|
|
16
|
-
/**
|
|
17
|
-
* Creates a new WHERE operation with the given condition.
|
|
18
|
-
*
|
|
19
|
-
* @param expression - The boolean expression to evaluate
|
|
20
|
-
*/
|
|
21
|
-
constructor(expression: Expression) {
|
|
22
|
-
super();
|
|
23
|
-
this.addChild(expression);
|
|
24
|
-
}
|
|
25
|
-
public get expression(): Expression {
|
|
26
|
-
return this.children[0] as Expression;
|
|
27
|
-
}
|
|
28
|
-
public async run(): Promise<void> {
|
|
29
|
-
for (const pattern of this.expression.patterns()) {
|
|
30
|
-
await pattern.fetchData();
|
|
31
|
-
await pattern.evaluate();
|
|
32
|
-
}
|
|
33
|
-
if (this.expression.value()) {
|
|
34
|
-
await this.next?.run();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
public value(): any {
|
|
38
|
-
return this.expression.value();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export default Where;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import Projection from "./projection";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents a WITH operation that defines variables or intermediate results.
|
|
5
|
-
*
|
|
6
|
-
* The WITH operation creates named expressions that can be referenced later in the query.
|
|
7
|
-
* It passes control to the next operation in the chain.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* // WITH x = 1, y = 2 RETURN x + y
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
class With extends Projection {
|
|
15
|
-
public async run(): Promise<void> {
|
|
16
|
-
await this.next?.run();
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default With;
|