flowquery 1.0.45 → 1.0.47

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 (418) hide show
  1. package/dist/flowquery.min.js +1 -1
  2. package/dist/index.d.ts +0 -7
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsing/operations/unwind.d.ts +1 -1
  7. package/dist/parsing/operations/unwind.d.ts.map +1 -1
  8. package/dist/parsing/operations/unwind.js +9 -5
  9. package/dist/parsing/operations/unwind.js.map +1 -1
  10. package/package.json +4 -1
  11. package/.editorconfig +0 -21
  12. package/.gitattributes +0 -3
  13. package/.github/workflows/npm-publish.yml +0 -32
  14. package/.github/workflows/python-publish.yml +0 -143
  15. package/.github/workflows/release.yml +0 -107
  16. package/.husky/pre-commit +0 -28
  17. package/.prettierrc +0 -22
  18. package/CODE_OF_CONDUCT.md +0 -10
  19. package/FlowQueryLogoIcon.png +0 -0
  20. package/SECURITY.md +0 -14
  21. package/SUPPORT.md +0 -13
  22. package/docs/flowquery.min.js +0 -1
  23. package/docs/index.html +0 -105
  24. package/flowquery-py/CONTRIBUTING.md +0 -127
  25. package/flowquery-py/README.md +0 -67
  26. package/flowquery-py/misc/data/test.json +0 -10
  27. package/flowquery-py/misc/data/users.json +0 -242
  28. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  29. package/flowquery-py/pyproject.toml +0 -121
  30. package/flowquery-py/setup_env.ps1 +0 -92
  31. package/flowquery-py/setup_env.sh +0 -87
  32. package/flowquery-py/src/__init__.py +0 -38
  33. package/flowquery-py/src/__main__.py +0 -10
  34. package/flowquery-py/src/compute/__init__.py +0 -6
  35. package/flowquery-py/src/compute/flowquery.py +0 -68
  36. package/flowquery-py/src/compute/runner.py +0 -64
  37. package/flowquery-py/src/extensibility.py +0 -52
  38. package/flowquery-py/src/graph/__init__.py +0 -31
  39. package/flowquery-py/src/graph/data.py +0 -136
  40. package/flowquery-py/src/graph/database.py +0 -141
  41. package/flowquery-py/src/graph/hops.py +0 -43
  42. package/flowquery-py/src/graph/node.py +0 -143
  43. package/flowquery-py/src/graph/node_data.py +0 -26
  44. package/flowquery-py/src/graph/node_reference.py +0 -50
  45. package/flowquery-py/src/graph/pattern.py +0 -115
  46. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  47. package/flowquery-py/src/graph/patterns.py +0 -42
  48. package/flowquery-py/src/graph/physical_node.py +0 -41
  49. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  50. package/flowquery-py/src/graph/relationship.py +0 -193
  51. package/flowquery-py/src/graph/relationship_data.py +0 -36
  52. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  53. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  54. package/flowquery-py/src/io/__init__.py +0 -5
  55. package/flowquery-py/src/io/command_line.py +0 -108
  56. package/flowquery-py/src/parsing/__init__.py +0 -17
  57. package/flowquery-py/src/parsing/alias.py +0 -20
  58. package/flowquery-py/src/parsing/alias_option.py +0 -11
  59. package/flowquery-py/src/parsing/ast_node.py +0 -147
  60. package/flowquery-py/src/parsing/base_parser.py +0 -84
  61. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  62. package/flowquery-py/src/parsing/components/csv.py +0 -8
  63. package/flowquery-py/src/parsing/components/from_.py +0 -12
  64. package/flowquery-py/src/parsing/components/headers.py +0 -12
  65. package/flowquery-py/src/parsing/components/json.py +0 -8
  66. package/flowquery-py/src/parsing/components/null.py +0 -10
  67. package/flowquery-py/src/parsing/components/post.py +0 -8
  68. package/flowquery-py/src/parsing/components/text.py +0 -8
  69. package/flowquery-py/src/parsing/context.py +0 -50
  70. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  71. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  72. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  73. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  74. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  75. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  76. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  77. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  78. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  79. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  80. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  81. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  82. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  83. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  84. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  85. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  86. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  87. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  88. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  89. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  90. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  91. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  92. package/flowquery-py/src/parsing/functions/count.py +0 -79
  93. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  94. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  95. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  96. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  97. package/flowquery-py/src/parsing/functions/function.py +0 -68
  98. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  99. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  100. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  101. package/flowquery-py/src/parsing/functions/head.py +0 -39
  102. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  103. package/flowquery-py/src/parsing/functions/join.py +0 -49
  104. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  105. package/flowquery-py/src/parsing/functions/last.py +0 -39
  106. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  107. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  108. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  109. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  110. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  111. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  112. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  113. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  114. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  115. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  116. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  117. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  118. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  119. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  120. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  121. package/flowquery-py/src/parsing/functions/size.py +0 -34
  122. package/flowquery-py/src/parsing/functions/split.py +0 -54
  123. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  124. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  125. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  126. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  127. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  128. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  129. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  130. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  131. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  132. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  133. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  134. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  135. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  136. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  137. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  138. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  139. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  140. package/flowquery-py/src/parsing/logic/case.py +0 -28
  141. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  142. package/flowquery-py/src/parsing/logic/end.py +0 -8
  143. package/flowquery-py/src/parsing/logic/then.py +0 -12
  144. package/flowquery-py/src/parsing/logic/when.py +0 -12
  145. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  146. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  147. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  148. package/flowquery-py/src/parsing/operations/call.py +0 -73
  149. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  150. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  151. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  152. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  153. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  154. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  155. package/flowquery-py/src/parsing/operations/load.py +0 -148
  156. package/flowquery-py/src/parsing/operations/match.py +0 -52
  157. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  158. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  159. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  160. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  161. package/flowquery-py/src/parsing/operations/union.py +0 -115
  162. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  163. package/flowquery-py/src/parsing/operations/unwind.py +0 -38
  164. package/flowquery-py/src/parsing/operations/where.py +0 -43
  165. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  166. package/flowquery-py/src/parsing/parser.py +0 -1384
  167. package/flowquery-py/src/parsing/parser_state.py +0 -26
  168. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  169. package/flowquery-py/src/tokenization/__init__.py +0 -23
  170. package/flowquery-py/src/tokenization/keyword.py +0 -54
  171. package/flowquery-py/src/tokenization/operator.py +0 -29
  172. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  173. package/flowquery-py/src/tokenization/symbol.py +0 -19
  174. package/flowquery-py/src/tokenization/token.py +0 -693
  175. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  176. package/flowquery-py/src/tokenization/token_type.py +0 -21
  177. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  178. package/flowquery-py/src/tokenization/trie.py +0 -125
  179. package/flowquery-py/src/utils/__init__.py +0 -6
  180. package/flowquery-py/src/utils/object_utils.py +0 -20
  181. package/flowquery-py/src/utils/string_utils.py +0 -113
  182. package/flowquery-py/tests/__init__.py +0 -1
  183. package/flowquery-py/tests/compute/__init__.py +0 -1
  184. package/flowquery-py/tests/compute/test_runner.py +0 -4879
  185. package/flowquery-py/tests/graph/__init__.py +0 -1
  186. package/flowquery-py/tests/graph/test_create.py +0 -56
  187. package/flowquery-py/tests/graph/test_data.py +0 -73
  188. package/flowquery-py/tests/graph/test_match.py +0 -40
  189. package/flowquery-py/tests/parsing/__init__.py +0 -1
  190. package/flowquery-py/tests/parsing/test_context.py +0 -34
  191. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  192. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  193. package/flowquery-py/tests/test_extensibility.py +0 -611
  194. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  195. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  196. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  197. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  198. package/flowquery-vscode/.vscode-test.mjs +0 -5
  199. package/flowquery-vscode/.vscodeignore +0 -13
  200. package/flowquery-vscode/LICENSE +0 -21
  201. package/flowquery-vscode/README.md +0 -11
  202. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  203. package/flowquery-vscode/eslint.config.mjs +0 -25
  204. package/flowquery-vscode/extension.js +0 -508
  205. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  206. package/flowquery-vscode/flowquery-worker.js +0 -66
  207. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  208. package/flowquery-vscode/jsconfig.json +0 -13
  209. package/flowquery-vscode/libs/page.css +0 -53
  210. package/flowquery-vscode/libs/table.css +0 -13
  211. package/flowquery-vscode/libs/tabs.css +0 -66
  212. package/flowquery-vscode/package-lock.json +0 -2917
  213. package/flowquery-vscode/package.json +0 -51
  214. package/flowquery-vscode/test/extension.test.js +0 -196
  215. package/flowquery-vscode/test/worker.test.js +0 -25
  216. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  217. package/jest.config.js +0 -8
  218. package/misc/apps/RAG/README.md +0 -29
  219. package/misc/apps/RAG/data/chats.json +0 -302
  220. package/misc/apps/RAG/data/emails.json +0 -182
  221. package/misc/apps/RAG/data/events.json +0 -226
  222. package/misc/apps/RAG/data/files.json +0 -172
  223. package/misc/apps/RAG/data/users.json +0 -158
  224. package/misc/apps/RAG/jest.config.js +0 -21
  225. package/misc/apps/RAG/package.json +0 -48
  226. package/misc/apps/RAG/public/index.html +0 -18
  227. package/misc/apps/RAG/src/App.css +0 -42
  228. package/misc/apps/RAG/src/App.tsx +0 -50
  229. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  230. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  231. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  232. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  233. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  234. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  235. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  236. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  237. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  238. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  239. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  240. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  241. package/misc/apps/RAG/src/components/index.ts +0 -28
  242. package/misc/apps/RAG/src/graph/index.ts +0 -19
  243. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  244. package/misc/apps/RAG/src/index.tsx +0 -29
  245. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  246. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  247. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  248. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  249. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  250. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  251. package/misc/apps/RAG/src/utils/index.ts +0 -12
  252. package/misc/apps/RAG/tsconfig.json +0 -22
  253. package/misc/apps/RAG/webpack.config.js +0 -43
  254. package/misc/apps/README.md +0 -1
  255. package/misc/queries/analyze_catfacts.cql +0 -75
  256. package/misc/queries/azure_openai_completions.cql +0 -13
  257. package/misc/queries/azure_openai_models.cql +0 -9
  258. package/misc/queries/mock_pipeline.cql +0 -84
  259. package/misc/queries/openai_completions.cql +0 -15
  260. package/misc/queries/openai_models.cql +0 -13
  261. package/misc/queries/test.cql +0 -6
  262. package/misc/queries/tool_inference.cql +0 -24
  263. package/misc/queries/wisdom.cql +0 -6
  264. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  265. package/src/compute/flowquery.ts +0 -46
  266. package/src/compute/runner.ts +0 -66
  267. package/src/extensibility.ts +0 -45
  268. package/src/graph/data.ts +0 -130
  269. package/src/graph/database.ts +0 -143
  270. package/src/graph/hops.ts +0 -22
  271. package/src/graph/node.ts +0 -122
  272. package/src/graph/node_data.ts +0 -18
  273. package/src/graph/node_reference.ts +0 -38
  274. package/src/graph/pattern.ts +0 -110
  275. package/src/graph/pattern_expression.ts +0 -48
  276. package/src/graph/patterns.ts +0 -36
  277. package/src/graph/physical_node.ts +0 -23
  278. package/src/graph/physical_relationship.ts +0 -23
  279. package/src/graph/relationship.ts +0 -167
  280. package/src/graph/relationship_data.ts +0 -31
  281. package/src/graph/relationship_match_collector.ts +0 -64
  282. package/src/graph/relationship_reference.ts +0 -25
  283. package/src/index.browser.ts +0 -46
  284. package/src/index.node.ts +0 -55
  285. package/src/index.ts +0 -12
  286. package/src/io/command_line.ts +0 -74
  287. package/src/parsing/alias.ts +0 -23
  288. package/src/parsing/alias_option.ts +0 -5
  289. package/src/parsing/ast_node.ts +0 -153
  290. package/src/parsing/base_parser.ts +0 -98
  291. package/src/parsing/components/csv.ts +0 -9
  292. package/src/parsing/components/from.ts +0 -12
  293. package/src/parsing/components/headers.ts +0 -12
  294. package/src/parsing/components/json.ts +0 -9
  295. package/src/parsing/components/null.ts +0 -9
  296. package/src/parsing/components/post.ts +0 -9
  297. package/src/parsing/components/text.ts +0 -9
  298. package/src/parsing/context.ts +0 -54
  299. package/src/parsing/data_structures/associative_array.ts +0 -43
  300. package/src/parsing/data_structures/json_array.ts +0 -31
  301. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  302. package/src/parsing/data_structures/lookup.ts +0 -44
  303. package/src/parsing/data_structures/range_lookup.ts +0 -36
  304. package/src/parsing/expressions/boolean.ts +0 -21
  305. package/src/parsing/expressions/expression.ts +0 -150
  306. package/src/parsing/expressions/expression_map.ts +0 -22
  307. package/src/parsing/expressions/f_string.ts +0 -26
  308. package/src/parsing/expressions/identifier.ts +0 -22
  309. package/src/parsing/expressions/number.ts +0 -40
  310. package/src/parsing/expressions/operator.ts +0 -354
  311. package/src/parsing/expressions/reference.ts +0 -45
  312. package/src/parsing/expressions/string.ts +0 -34
  313. package/src/parsing/functions/aggregate_function.ts +0 -58
  314. package/src/parsing/functions/async_function.ts +0 -64
  315. package/src/parsing/functions/avg.ts +0 -47
  316. package/src/parsing/functions/coalesce.ts +0 -49
  317. package/src/parsing/functions/collect.ts +0 -54
  318. package/src/parsing/functions/count.ts +0 -54
  319. package/src/parsing/functions/date.ts +0 -63
  320. package/src/parsing/functions/datetime.ts +0 -63
  321. package/src/parsing/functions/duration.ts +0 -143
  322. package/src/parsing/functions/element_id.ts +0 -51
  323. package/src/parsing/functions/function.ts +0 -60
  324. package/src/parsing/functions/function_factory.ts +0 -195
  325. package/src/parsing/functions/function_metadata.ts +0 -217
  326. package/src/parsing/functions/functions.ts +0 -70
  327. package/src/parsing/functions/head.ts +0 -42
  328. package/src/parsing/functions/id.ts +0 -51
  329. package/src/parsing/functions/join.ts +0 -40
  330. package/src/parsing/functions/keys.ts +0 -29
  331. package/src/parsing/functions/last.ts +0 -42
  332. package/src/parsing/functions/localdatetime.ts +0 -63
  333. package/src/parsing/functions/localtime.ts +0 -58
  334. package/src/parsing/functions/max.ts +0 -37
  335. package/src/parsing/functions/min.ts +0 -37
  336. package/src/parsing/functions/nodes.ts +0 -54
  337. package/src/parsing/functions/predicate_function.ts +0 -48
  338. package/src/parsing/functions/predicate_sum.ts +0 -47
  339. package/src/parsing/functions/properties.ts +0 -56
  340. package/src/parsing/functions/rand.ts +0 -21
  341. package/src/parsing/functions/range.ts +0 -37
  342. package/src/parsing/functions/reducer_element.ts +0 -10
  343. package/src/parsing/functions/relationships.ts +0 -52
  344. package/src/parsing/functions/replace.ts +0 -38
  345. package/src/parsing/functions/round.ts +0 -28
  346. package/src/parsing/functions/schema.ts +0 -39
  347. package/src/parsing/functions/size.ts +0 -28
  348. package/src/parsing/functions/split.ts +0 -45
  349. package/src/parsing/functions/string_distance.ts +0 -83
  350. package/src/parsing/functions/stringify.ts +0 -37
  351. package/src/parsing/functions/substring.ts +0 -68
  352. package/src/parsing/functions/sum.ts +0 -41
  353. package/src/parsing/functions/tail.ts +0 -39
  354. package/src/parsing/functions/temporal_utils.ts +0 -180
  355. package/src/parsing/functions/time.ts +0 -58
  356. package/src/parsing/functions/timestamp.ts +0 -37
  357. package/src/parsing/functions/to_float.ts +0 -50
  358. package/src/parsing/functions/to_integer.ts +0 -50
  359. package/src/parsing/functions/to_json.ts +0 -28
  360. package/src/parsing/functions/to_lower.ts +0 -28
  361. package/src/parsing/functions/to_string.ts +0 -32
  362. package/src/parsing/functions/trim.ts +0 -28
  363. package/src/parsing/functions/type.ts +0 -39
  364. package/src/parsing/functions/value_holder.ts +0 -13
  365. package/src/parsing/logic/case.ts +0 -26
  366. package/src/parsing/logic/else.ts +0 -12
  367. package/src/parsing/logic/end.ts +0 -9
  368. package/src/parsing/logic/then.ts +0 -12
  369. package/src/parsing/logic/when.ts +0 -12
  370. package/src/parsing/operations/aggregated_return.ts +0 -22
  371. package/src/parsing/operations/aggregated_with.ts +0 -18
  372. package/src/parsing/operations/call.ts +0 -69
  373. package/src/parsing/operations/create_node.ts +0 -39
  374. package/src/parsing/operations/create_relationship.ts +0 -38
  375. package/src/parsing/operations/delete_node.ts +0 -33
  376. package/src/parsing/operations/delete_relationship.ts +0 -32
  377. package/src/parsing/operations/group_by.ts +0 -137
  378. package/src/parsing/operations/limit.ts +0 -31
  379. package/src/parsing/operations/load.ts +0 -146
  380. package/src/parsing/operations/match.ts +0 -54
  381. package/src/parsing/operations/operation.ts +0 -69
  382. package/src/parsing/operations/order_by.ts +0 -126
  383. package/src/parsing/operations/projection.ts +0 -18
  384. package/src/parsing/operations/return.ts +0 -76
  385. package/src/parsing/operations/union.ts +0 -114
  386. package/src/parsing/operations/union_all.ts +0 -16
  387. package/src/parsing/operations/unwind.ts +0 -32
  388. package/src/parsing/operations/where.ts +0 -42
  389. package/src/parsing/operations/with.ts +0 -20
  390. package/src/parsing/parser.ts +0 -1641
  391. package/src/parsing/parser_state.ts +0 -25
  392. package/src/parsing/token_to_node.ts +0 -114
  393. package/src/tokenization/keyword.ts +0 -50
  394. package/src/tokenization/operator.ts +0 -25
  395. package/src/tokenization/string_walker.ts +0 -197
  396. package/src/tokenization/symbol.ts +0 -15
  397. package/src/tokenization/token.ts +0 -764
  398. package/src/tokenization/token_mapper.ts +0 -53
  399. package/src/tokenization/token_type.ts +0 -16
  400. package/src/tokenization/tokenizer.ts +0 -250
  401. package/src/tokenization/trie.ts +0 -117
  402. package/src/utils/object_utils.ts +0 -17
  403. package/src/utils/string_utils.ts +0 -114
  404. package/tests/compute/runner.test.ts +0 -4538
  405. package/tests/extensibility.test.ts +0 -643
  406. package/tests/graph/create.test.ts +0 -36
  407. package/tests/graph/data.test.ts +0 -58
  408. package/tests/graph/match.test.ts +0 -29
  409. package/tests/parsing/context.test.ts +0 -27
  410. package/tests/parsing/expression.test.ts +0 -303
  411. package/tests/parsing/parser.test.ts +0 -1327
  412. package/tests/tokenization/token_mapper.test.ts +0 -47
  413. package/tests/tokenization/tokenizer.test.ts +0 -191
  414. package/tests/tokenization/trie.test.ts +0 -20
  415. package/tsconfig.json +0 -18
  416. package/typedoc.json +0 -16
  417. package/vscode-settings.json.recommended +0 -16
  418. package/webpack.config.js +0 -26
@@ -1,611 +0,0 @@
1
- """Tests for the FlowQuery extensibility API."""
2
-
3
- import pytest
4
- from typing import TypedDict, Optional, List, Any
5
- from flowquery.parsing.functions.function import Function
6
- from flowquery.parsing.functions.aggregate_function import AggregateFunction
7
- from flowquery.parsing.functions.async_function import AsyncFunction
8
- from flowquery.parsing.functions.predicate_function import PredicateFunction
9
- from flowquery.parsing.functions.reducer_element import ReducerElement
10
- from flowquery.parsing.functions.function_metadata import (
11
- FunctionDef,
12
- FunctionMetadata,
13
- FunctionCategory,
14
- ParameterSchema,
15
- OutputSchema,
16
- FunctionDefOptions,
17
- get_function_metadata,
18
- get_registered_function_factory,
19
- )
20
-
21
-
22
- class TestExtensibilityExports:
23
- """Test cases for the extensibility API."""
24
-
25
- def test_function_class_can_be_extended(self):
26
- """Function class is exported and can be extended."""
27
- class CustomFunction(Function):
28
- def __init__(self):
29
- super().__init__("customFunc")
30
- self._expected_parameter_count = 1
31
-
32
- def value(self) -> str:
33
- return "custom value"
34
-
35
- func = CustomFunction()
36
- assert func.name == "customFunc"
37
- assert str(func) == "Function (customFunc)"
38
- assert func.value() == "custom value"
39
-
40
- def test_function_validates_parameter_count(self):
41
- """Function validates parameter count when set."""
42
- class TwoParamFunction(Function):
43
- def __init__(self):
44
- super().__init__("twoParam")
45
- self._expected_parameter_count = 2
46
-
47
- func = TwoParamFunction()
48
-
49
- # Should throw when wrong number of parameters
50
- with pytest.raises(ValueError, match="Function twoParam expected 2 parameters, but got 0"):
51
- func.parameters = []
52
-
53
- def test_function_without_expected_count_accepts_any(self):
54
- """Function without expected parameter count accepts any number."""
55
- class FlexibleFunction(Function):
56
- def __init__(self):
57
- super().__init__("flexible")
58
- # _expected_parameter_count is None by default
59
-
60
- func = FlexibleFunction()
61
- # Should not throw
62
- func.parameters = []
63
- assert len(func.get_children()) == 0
64
-
65
-
66
- class TestAggregateFunctionExtension:
67
- """Test cases for AggregateFunction extension."""
68
-
69
- def test_aggregate_function_can_be_extended(self):
70
- """AggregateFunction class is exported and can be extended."""
71
- class SumElement(ReducerElement):
72
- def __init__(self):
73
- self._value: float = 0
74
-
75
- @property
76
- def value(self) -> float:
77
- return self._value
78
-
79
- @value.setter
80
- def value(self, v: float) -> None:
81
- self._value = v
82
-
83
- class CustomSum(AggregateFunction):
84
- def __init__(self):
85
- super().__init__("customSum")
86
- self._total: float = 0
87
-
88
- def reduce(self, element: ReducerElement) -> None:
89
- self._total += element.value
90
-
91
- def element(self) -> ReducerElement:
92
- el = SumElement()
93
- el.value = self._total
94
- return el
95
-
96
- def value(self) -> float:
97
- return self._total
98
-
99
- func = CustomSum()
100
- assert func.name == "customSum"
101
-
102
-
103
- class TestFunctionDefDecorator:
104
- """Test cases for the FunctionDef decorator."""
105
-
106
- def test_function_def_decorator_registers_metadata(self):
107
- """FunctionDef decorator registers function metadata."""
108
- @FunctionDef({
109
- "description": "Test function for unit testing",
110
- "category": "scalar",
111
- "parameters": [
112
- {"name": "value", "description": "Input value", "type": "any"}
113
- ],
114
- "output": {"description": "Result", "type": "any"},
115
- "examples": ["WITH test(1) AS x RETURN x"]
116
- })
117
- class TestFunction(Function):
118
- def __init__(self):
119
- super().__init__("testFunc")
120
- self._expected_parameter_count = 1
121
-
122
- def value(self):
123
- return self.get_children()[0].value()
124
-
125
- # Get the registered metadata using the function name (as registered by @FunctionDef)
126
- metadata = get_function_metadata("testFunc", "scalar")
127
- assert metadata is not None
128
- assert metadata.description == "Test function for unit testing"
129
- assert metadata.category == "scalar"
130
- assert len(metadata.parameters) == 1
131
- assert metadata.parameters[0]["name"] == "value"
132
-
133
- def test_function_def_decorator_for_aggregate_function(self):
134
- """FunctionDef decorator can be applied to an aggregate function."""
135
- @FunctionDef({
136
- "description": "Test aggregate function",
137
- "category": "aggregate",
138
- "parameters": [{"name": "value", "description": "Numeric value", "type": "number"}],
139
- "output": {"description": "Aggregated result", "type": "number"},
140
- })
141
- class TestAggExt(AggregateFunction):
142
- def __init__(self):
143
- super().__init__("testAggExt")
144
- self._sum = 0
145
-
146
- def value(self):
147
- return self._sum
148
-
149
- instance = TestAggExt()
150
- assert instance.name == "testAggExt"
151
- assert instance.value() == 0
152
-
153
- def test_function_def_decorator_for_predicate_function(self):
154
- """FunctionDef decorator can be applied to a predicate function."""
155
- @FunctionDef({
156
- "description": "Test predicate function",
157
- "category": "predicate",
158
- "parameters": [{"name": "list", "description": "List to check", "type": "array"}],
159
- "output": {"description": "Boolean result", "type": "boolean"},
160
- })
161
- class TestPredExt(PredicateFunction):
162
- def __init__(self):
163
- super().__init__("testPredExt")
164
-
165
- def value(self):
166
- return True
167
-
168
- instance = TestPredExt()
169
- assert instance.name == "testPredExt"
170
- assert instance.value() is True
171
-
172
- @pytest.mark.asyncio
173
- async def test_function_def_decorator_for_async_provider(self):
174
- """FunctionDef decorator can be applied to an async provider."""
175
- from flowquery.parsing.functions.function_metadata import (
176
- get_function_metadata,
177
- get_registered_function_factory,
178
- )
179
-
180
- @FunctionDef({
181
- "description": "Test async provider for extensibility",
182
- "category": "async",
183
- "parameters": [
184
- {
185
- "name": "count",
186
- "description": "Number of items",
187
- "type": "number",
188
- "required": False,
189
- "default": 1,
190
- },
191
- ],
192
- "output": {"description": "Data object", "type": "object"},
193
- })
194
- class Simple(AsyncFunction):
195
- async def generate(self, count: int = 1):
196
- for i in range(count):
197
- yield {"id": i, "data": f"item{i}"}
198
-
199
- # Verify the decorated class still works correctly
200
- loader = Simple("simple")
201
- results = []
202
- async for item in loader.generate(2):
203
- results.append(item)
204
- assert len(results) == 2
205
- assert results[0] == {"id": 0, "data": "item0"}
206
- assert results[1] == {"id": 1, "data": "item1"}
207
-
208
- # Verify the async provider was registered (using class name)
209
- provider = get_registered_function_factory("simple", "async")
210
- assert provider is not None
211
- assert callable(provider)
212
-
213
- # Verify the metadata was registered
214
- metadata = get_function_metadata("simple", "async")
215
- assert metadata is not None
216
- assert metadata.name == "simple"
217
- assert metadata.category == "async"
218
- assert metadata.description == "Test async provider for extensibility"
219
-
220
-
221
- class TestPredicateFunctionExtension:
222
- """Test cases for PredicateFunction extension."""
223
-
224
- def test_predicate_function_can_be_extended(self):
225
- """PredicateFunction class is exported and can be extended."""
226
- class CustomPredicate(PredicateFunction):
227
- def __init__(self):
228
- super().__init__("customPredicate")
229
-
230
- def value(self):
231
- return True
232
-
233
- pred = CustomPredicate()
234
- assert pred.name == "customPredicate"
235
- assert str(pred) == "PredicateFunction (customPredicate)"
236
- assert pred.value() is True
237
-
238
-
239
- class TestAsyncFunctionExtension:
240
- """Test cases for AsyncFunction extension."""
241
-
242
- def test_async_function_can_be_instantiated(self):
243
- """AsyncFunction class is exported and can be instantiated."""
244
- async_func = AsyncFunction("testAsync")
245
- assert async_func.name == "testAsync"
246
-
247
-
248
- class TestReducerElementExtension:
249
- """Test cases for ReducerElement extension."""
250
-
251
- def test_reducer_element_can_be_extended(self):
252
- """ReducerElement class is exported and can be extended."""
253
- class NumberElement(ReducerElement):
254
- def __init__(self):
255
- self._num = 0
256
-
257
- @property
258
- def value(self):
259
- return self._num
260
-
261
- @value.setter
262
- def value(self, v):
263
- self._num = v
264
-
265
- elem = NumberElement()
266
- elem.value = 42
267
- assert elem.value == 42
268
-
269
-
270
- class TestTypeExports:
271
- """Test cases for type exports."""
272
-
273
- def test_function_metadata_type(self):
274
- """FunctionMetadata type can be used."""
275
- meta = FunctionMetadata(
276
- name="typeTest",
277
- description="Testing type exports",
278
- category="scalar",
279
- parameters=[],
280
- output={"description": "Output", "type": "string"},
281
- )
282
- assert meta.name == "typeTest"
283
- assert meta.description == "Testing type exports"
284
-
285
- def test_function_category_accepts_standard_and_custom(self):
286
- """FunctionCategory type accepts standard and custom categories."""
287
- scalar: FunctionCategory = "scalar"
288
- aggregate: FunctionCategory = "aggregate"
289
- predicate: FunctionCategory = "predicate"
290
- async_cat: FunctionCategory = "async"
291
- custom: FunctionCategory = "myCustomCategory"
292
-
293
- assert scalar == "scalar"
294
- assert aggregate == "aggregate"
295
- assert predicate == "predicate"
296
- assert async_cat == "async"
297
- assert custom == "myCustomCategory"
298
-
299
-
300
- class TestPluginFunctionsIntegration:
301
- """Test cases for plugin functions integration with FlowQuery."""
302
-
303
- @pytest.mark.asyncio
304
- async def test_custom_scalar_function_in_query(self):
305
- """Custom scalar function can be used in a FlowQuery statement."""
306
- from flowquery.compute.runner import Runner
307
-
308
- @FunctionDef({
309
- "description": "Doubles a number",
310
- "category": "scalar",
311
- "parameters": [{"name": "value", "description": "Number to double", "type": "number"}],
312
- "output": {"description": "Doubled value", "type": "number"},
313
- })
314
- class Double(Function):
315
- def __init__(self):
316
- super().__init__("double")
317
- self._expected_parameter_count = 1
318
-
319
- def value(self):
320
- return self.get_children()[0].value() * 2
321
-
322
- runner = Runner("WITH 5 AS num RETURN double(num) AS result")
323
- await runner.run()
324
-
325
- assert len(runner.results) == 1
326
- assert runner.results[0] == {"result": 10}
327
-
328
- @pytest.mark.asyncio
329
- async def test_custom_string_function_in_query(self):
330
- """Custom string function can be used in a FlowQuery statement."""
331
- from flowquery.compute.runner import Runner
332
-
333
- @FunctionDef({
334
- "description": "Reverses a string",
335
- "category": "scalar",
336
- "parameters": [{"name": "text", "description": "String to reverse", "type": "string"}],
337
- "output": {"description": "Reversed string", "type": "string"},
338
- })
339
- class StrReverse(Function):
340
- def __init__(self):
341
- super().__init__("strreverse")
342
- self._expected_parameter_count = 1
343
-
344
- def value(self):
345
- input_str = str(self.get_children()[0].value())
346
- return input_str[::-1]
347
-
348
- runner = Runner("WITH 'hello' AS s RETURN strreverse(s) AS reversed")
349
- await runner.run()
350
-
351
- assert len(runner.results) == 1
352
- assert runner.results[0] == {"reversed": "olleh"}
353
-
354
- @pytest.mark.asyncio
355
- async def test_custom_function_with_expressions(self):
356
- """Custom function works with expressions and other functions."""
357
- from flowquery.compute.runner import Runner
358
-
359
- @FunctionDef({
360
- "description": "Adds 100 to a number",
361
- "category": "scalar",
362
- "parameters": [{"name": "value", "description": "Number", "type": "number"}],
363
- "output": {"description": "Number plus 100", "type": "number"},
364
- })
365
- class AddHundred(Function):
366
- def __init__(self):
367
- super().__init__("addhundred")
368
- self._expected_parameter_count = 1
369
-
370
- def value(self):
371
- return self.get_children()[0].value() + 100
372
-
373
- runner = Runner("WITH 5 * 3 AS num RETURN addhundred(num) + 1 AS result")
374
- await runner.run()
375
-
376
- assert len(runner.results) == 1
377
- assert runner.results[0] == {"result": 116} # (5*3) + 100 + 1 = 116
378
-
379
- @pytest.mark.asyncio
380
- async def test_multiple_custom_functions_together(self):
381
- """Multiple custom functions can be used together."""
382
- from flowquery.compute.runner import Runner
383
-
384
- @FunctionDef({
385
- "description": "Triples a number",
386
- "category": "scalar",
387
- "parameters": [{"name": "value", "description": "Number to triple", "type": "number"}],
388
- "output": {"description": "Tripled value", "type": "number"},
389
- })
390
- class Triple(Function):
391
- def __init__(self):
392
- super().__init__("triple")
393
- self._expected_parameter_count = 1
394
-
395
- def value(self):
396
- return self.get_children()[0].value() * 3
397
-
398
- @FunctionDef({
399
- "description": "Squares a number",
400
- "category": "scalar",
401
- "parameters": [{"name": "value", "description": "Number to square", "type": "number"}],
402
- "output": {"description": "Squared value", "type": "number"},
403
- })
404
- class Square(Function):
405
- def __init__(self):
406
- super().__init__("square")
407
- self._expected_parameter_count = 1
408
-
409
- def value(self):
410
- v = self.get_children()[0].value()
411
- return v * v
412
-
413
- runner = Runner("WITH 2 AS num RETURN triple(num) AS tripled, square(num) AS squared")
414
- await runner.run()
415
-
416
- assert len(runner.results) == 1
417
- assert runner.results[0] == {"tripled": 6, "squared": 4}
418
-
419
- @pytest.mark.asyncio
420
- async def test_custom_aggregate_function_in_query(self):
421
- """Custom aggregate function can be used in a FlowQuery statement."""
422
- from flowquery.compute.runner import Runner
423
-
424
- # Custom reducer element for MinValue
425
- class MinReducerElement(ReducerElement):
426
- def __init__(self):
427
- self._value = None
428
-
429
- @property
430
- def value(self):
431
- return self._value
432
-
433
- @value.setter
434
- def value(self, val):
435
- self._value = val
436
-
437
- @FunctionDef({
438
- "description": "Collects the minimum value",
439
- "category": "aggregate",
440
- "parameters": [{"name": "value", "description": "Value to compare", "type": "number"}],
441
- "output": {"description": "Minimum value", "type": "number"},
442
- })
443
- class MinValue(AggregateFunction):
444
- def __init__(self):
445
- super().__init__("minvalue")
446
- self._expected_parameter_count = 1
447
-
448
- def reduce(self, element):
449
- current = self.first_child().value()
450
- if element.value is None or current < element.value:
451
- element.value = current
452
-
453
- def element(self):
454
- return MinReducerElement()
455
-
456
- runner = Runner("unwind [5, 2, 8, 1, 9] AS num RETURN minvalue(num) AS min")
457
- await runner.run()
458
-
459
- assert len(runner.results) == 1
460
- assert runner.results[0] == {"min": 1}
461
-
462
- @pytest.mark.asyncio
463
- async def test_custom_async_provider_in_load_json_from_statement(self):
464
- """Custom async provider can be used in LOAD JSON FROM statement."""
465
- from flowquery.compute.runner import Runner
466
-
467
- @FunctionDef({
468
- "description": "Provides example data for testing",
469
- "category": "async",
470
- "parameters": [],
471
- "output": {"description": "Example data object", "type": "object"},
472
- })
473
- class _GetExampleData(AsyncFunction):
474
- def __init__(self):
475
- super().__init__("getexampledata")
476
- self._expected_parameter_count = 0
477
-
478
- async def generate(self):
479
- yield {"id": 1, "name": "Alice"}
480
- yield {"id": 2, "name": "Bob"}
481
-
482
- runner = Runner("LOAD JSON FROM getexampledata() AS data RETURN data.id AS id, data.name AS name")
483
- await runner.run()
484
-
485
- assert len(runner.results) == 2
486
- assert runner.results[0] == {"id": 1, "name": "Alice"}
487
- assert runner.results[1] == {"id": 2, "name": "Bob"}
488
-
489
- @pytest.mark.asyncio
490
- async def test_function_names_are_case_insensitive(self):
491
- """Function names are case-insensitive."""
492
- from flowquery.compute.runner import Runner
493
-
494
- @FunctionDef({
495
- "description": "Test function for case insensitivity",
496
- "category": "async",
497
- "parameters": [],
498
- "output": {"description": "Test data", "type": "object"},
499
- })
500
- class _MixedCaseFunc(AsyncFunction):
501
- def __init__(self):
502
- super().__init__("mixedcasefunc")
503
- self._expected_parameter_count = 0
504
-
505
- async def generate(self):
506
- yield {"value": 42}
507
-
508
- # Test using different casings in FlowQuery statements
509
- runner1 = Runner("LOAD JSON FROM mixedcasefunc() AS d RETURN d.value AS v")
510
- await runner1.run()
511
- assert runner1.results[0] == {"v": 42}
512
-
513
- runner2 = Runner("LOAD JSON FROM MIXEDCASEFUNC() AS d RETURN d.value AS v")
514
- await runner2.run()
515
- assert runner2.results[0] == {"v": 42}
516
-
517
- def test_parameter_schema_type_can_be_used(self):
518
- """ParameterSchema type can be used."""
519
- param: ParameterSchema = {
520
- "name": "testParam",
521
- "description": "A test parameter",
522
- "type": "string",
523
- "required": True,
524
- "default": "default value",
525
- "example": "example value",
526
- }
527
-
528
- assert param["name"] == "testParam"
529
- assert param["required"] is True
530
-
531
- def test_parameter_schema_with_nested_types(self):
532
- """ParameterSchema with nested types."""
533
- array_param: ParameterSchema = {
534
- "name": "items",
535
- "description": "Array of items",
536
- "type": "array",
537
- }
538
-
539
- object_param: ParameterSchema = {
540
- "name": "config",
541
- "description": "Configuration object",
542
- "type": "object",
543
- }
544
-
545
- assert array_param["type"] == "array"
546
- assert object_param["type"] == "object"
547
-
548
- def test_output_schema_type_can_be_used(self):
549
- """OutputSchema type can be used."""
550
- output: OutputSchema = {
551
- "description": "Result output",
552
- "type": "object",
553
- "example": {"success": True, "data": []},
554
- }
555
-
556
- assert output["type"] == "object"
557
- assert output["example"]["success"] is True
558
-
559
- def test_function_def_options_type_can_be_used(self):
560
- """FunctionDefOptions type can be used."""
561
- options: FunctionDefOptions = {
562
- "description": "Function options test",
563
- "category": "scalar",
564
- "parameters": [],
565
- "output": {"description": "Output", "type": "string"},
566
- "notes": "Some additional notes",
567
- }
568
-
569
- assert options["description"] == "Function options test"
570
- assert options["notes"] == "Some additional notes"
571
-
572
- @pytest.mark.asyncio
573
- async def test_custom_function_retrieved_via_functions(self):
574
- """Custom function can be retrieved via functions() in a FlowQuery statement."""
575
- from flowquery.extensibility import FunctionDef
576
- from flowquery.parsing.functions.function import Function
577
- from flowquery.parsing.functions.function_metadata import get_function_metadata
578
- from flowquery.compute.runner import Runner
579
-
580
- @FunctionDef({
581
- "description": "A unique test function for introspection",
582
- "category": "scalar",
583
- "parameters": [{"name": "x", "description": "Input value", "type": "number"}],
584
- "output": {"description": "Output value", "type": "number"},
585
- })
586
- class IntrospectTestFunc(Function):
587
- def __init__(self):
588
- super().__init__("introspectTestFunc")
589
- self._expected_parameter_count = 1
590
-
591
- def value(self):
592
- return self.get_children()[0].value() + 42
593
-
594
- # First verify the function is registered
595
- metadata = get_function_metadata("introspectTestFunc")
596
- assert metadata is not None
597
- assert metadata.name == "introspecttestfunc"
598
-
599
- # Use functions() with UNWIND to find the registered function
600
- runner = Runner("""
601
- WITH functions() AS funcs
602
- UNWIND funcs AS f
603
- WITH f WHERE f.name = 'introspecttestfunc'
604
- RETURN f.name AS name, f.description AS description, f.category AS category
605
- """)
606
- await runner.run()
607
-
608
- assert len(runner.results) == 1
609
- assert runner.results[0]["name"] == "introspecttestfunc"
610
- assert runner.results[0]["description"] == "A unique test function for introspection"
611
- assert runner.results[0]["category"] == "scalar"
@@ -1 +0,0 @@
1
- """Tokenization tests package."""
@@ -1,60 +0,0 @@
1
- """Tests for the TokenMapper class."""
2
-
3
- import pytest
4
- from flowquery.tokenization.token_mapper import TokenMapper
5
- from flowquery.tokenization.symbol import Symbol
6
- from flowquery.tokenization.keyword import Keyword
7
- from flowquery.tokenization.operator import Operator
8
-
9
-
10
- class TestTokenMapper:
11
- """Test cases for the TokenMapper class."""
12
-
13
- def test_mapper_with_symbols(self):
14
- """Test mapper with Symbol enum."""
15
- mapper = TokenMapper(Symbol)
16
-
17
- assert mapper.map(Symbol.LEFT_PARENTHESIS.value) is not None
18
- assert mapper.map(Symbol.RIGHT_PARENTHESIS.value) is not None
19
- assert mapper.map(Symbol.COMMA.value) is not None
20
- assert mapper.map(Symbol.DOT.value) is not None
21
- assert mapper.map(Symbol.COLON.value) is not None
22
-
23
- # Operator should not be found in symbol mapper
24
- assert mapper.map(Operator.ADD.value) is None
25
-
26
- def test_mapper_with_keywords(self):
27
- """Test mapper with Keyword enum."""
28
- mapper = TokenMapper(Keyword)
29
-
30
- assert mapper.map(Keyword.MATCH.value) is not None
31
- assert mapper.map(Keyword.RETURN.value) is not None
32
- assert mapper.map(Keyword.WHERE.value) is not None
33
-
34
- assert mapper.map("not_a_keyword") is None
35
-
36
- def test_mapper_with_operators(self):
37
- """Test mapper with Operator enum."""
38
- mapper = TokenMapper(Operator)
39
-
40
- assert mapper.map(Operator.GREATER_THAN_OR_EQUAL.value) is not None
41
- assert mapper.map(Operator.ADD.value) is not None
42
- assert mapper.map(Operator.SUBTRACT.value) is not None
43
- assert mapper.map(Operator.NOT.value) is not None
44
- assert mapper.map(Operator.EQUALS.value) is not None
45
- assert mapper.map(Operator.NOT_EQUALS.value) is not None
46
- assert mapper.map(Operator.LESS_THAN.value) is not None
47
- assert mapper.map(Operator.LESS_THAN_OR_EQUAL.value) is not None
48
-
49
- # Partial match should still work
50
- assert mapper.map(Operator.GREATER_THAN_OR_EQUAL.value + "1") is not None
51
-
52
- assert mapper.map("i_s_n_o_t_an_operator") is None
53
-
54
- def test_mapper_with_mixed_types(self):
55
- """Test mapper with mixed types."""
56
- mapper = TokenMapper(Symbol)
57
-
58
- assert mapper.map(Symbol.LEFT_PARENTHESIS.value) is not None
59
- assert mapper.map(Symbol.RIGHT_PARENTHESIS.value) is not None
60
- assert mapper.map(Symbol.COMMA.value) is not None