@nicia-ai/typegraph 0.58.0 → 0.60.0

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 (179) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +15 -0
  3. package/dist/{atomic-mutation-program-CPcn0ZPu.d.ts → atomic-mutation-program-BNvJ13bq.d.ts} +1 -1
  4. package/dist/{atomic-mutation-program-AqOe51XD.d.cts → atomic-mutation-program-DOVE147J.d.cts} +1 -1
  5. package/dist/backend/drizzle/engine/index.cjs +8 -8
  6. package/dist/backend/drizzle/engine/index.d.cts +9 -9
  7. package/dist/backend/drizzle/engine/index.d.ts +9 -9
  8. package/dist/backend/drizzle/engine/index.js +3 -3
  9. package/dist/backend/drizzle/indexes.cjs +6 -6
  10. package/dist/backend/drizzle/indexes.d.cts +1 -1
  11. package/dist/backend/drizzle/indexes.d.ts +1 -1
  12. package/dist/backend/drizzle/indexes.js +2 -2
  13. package/dist/backend/index.d.cts +7 -7
  14. package/dist/backend/index.d.ts +7 -7
  15. package/dist/backend/postgres/index.cjs +17 -17
  16. package/dist/backend/postgres/index.d.cts +8 -8
  17. package/dist/backend/postgres/index.d.ts +8 -8
  18. package/dist/backend/postgres/index.js +3 -3
  19. package/dist/backend/postgres/pglite-store.cjs +1 -1
  20. package/dist/backend/postgres/pglite-store.d.cts +6 -6
  21. package/dist/backend/postgres/pglite-store.d.ts +6 -6
  22. package/dist/backend/postgres/pglite-store.js +1 -1
  23. package/dist/backend/postgres/pglite.cjs +5 -5
  24. package/dist/backend/postgres/pglite.d.cts +3 -3
  25. package/dist/backend/postgres/pglite.d.ts +3 -3
  26. package/dist/backend/postgres/pglite.js +4 -4
  27. package/dist/backend/sqlite/index.cjs +16 -16
  28. package/dist/backend/sqlite/index.d.cts +7 -7
  29. package/dist/backend/sqlite/index.d.ts +7 -7
  30. package/dist/backend/sqlite/index.js +3 -3
  31. package/dist/backend/sqlite/libsql.cjs +7 -7
  32. package/dist/backend/sqlite/libsql.d.cts +3 -3
  33. package/dist/backend/sqlite/libsql.d.ts +3 -3
  34. package/dist/backend/sqlite/libsql.js +3 -3
  35. package/dist/backend/sqlite/local-store.cjs +1 -1
  36. package/dist/backend/sqlite/local-store.d.cts +6 -6
  37. package/dist/backend/sqlite/local-store.d.ts +6 -6
  38. package/dist/backend/sqlite/local-store.js +1 -1
  39. package/dist/backend/sqlite/local.cjs +5 -5
  40. package/dist/backend/sqlite/local.d.cts +3 -3
  41. package/dist/backend/sqlite/local.d.ts +3 -3
  42. package/dist/backend/sqlite/local.js +4 -4
  43. package/dist/{chunk-7JUD57B4.js → chunk-2DKIJP2R.js} +1044 -84
  44. package/dist/chunk-2DKIJP2R.js.map +1 -0
  45. package/dist/{chunk-QIKO6DL5.js → chunk-2QNFFAMF.js} +3 -3
  46. package/dist/{chunk-QIKO6DL5.js.map → chunk-2QNFFAMF.js.map} +1 -1
  47. package/dist/{chunk-6BVZHDAZ.js → chunk-43DOTETB.js} +3 -3
  48. package/dist/{chunk-6BVZHDAZ.js.map → chunk-43DOTETB.js.map} +1 -1
  49. package/dist/{chunk-US3BLFWM.js → chunk-7GNPCBS2.js} +3 -3
  50. package/dist/{chunk-US3BLFWM.js.map → chunk-7GNPCBS2.js.map} +1 -1
  51. package/dist/{chunk-IV5W7LKW.cjs → chunk-A22XPVBQ.cjs} +2 -2
  52. package/dist/chunk-A22XPVBQ.cjs.map +1 -0
  53. package/dist/{chunk-CVO2ZPW5.js → chunk-B4P4DAW3.js} +4 -4
  54. package/dist/{chunk-CVO2ZPW5.js.map → chunk-B4P4DAW3.js.map} +1 -1
  55. package/dist/{chunk-FHFPUORN.cjs → chunk-CNFKFE5L.cjs} +1375 -415
  56. package/dist/chunk-CNFKFE5L.cjs.map +1 -0
  57. package/dist/{chunk-4MZQVVPX.cjs → chunk-D5CHUSW7.cjs} +33 -2
  58. package/dist/chunk-D5CHUSW7.cjs.map +1 -0
  59. package/dist/{chunk-TKEJR2UL.cjs → chunk-DWO6WZP5.cjs} +6 -6
  60. package/dist/{chunk-TKEJR2UL.cjs.map → chunk-DWO6WZP5.cjs.map} +1 -1
  61. package/dist/{chunk-GUMNJJFP.cjs → chunk-EHDLHPMK.cjs} +9 -9
  62. package/dist/{chunk-GUMNJJFP.cjs.map → chunk-EHDLHPMK.cjs.map} +1 -1
  63. package/dist/{chunk-DV24YZHG.js → chunk-FTDRMXIJ.js} +6 -6
  64. package/dist/{chunk-DV24YZHG.js.map → chunk-FTDRMXIJ.js.map} +1 -1
  65. package/dist/{chunk-BYBMDK6X.js → chunk-GYOQAV6R.js} +3 -3
  66. package/dist/{chunk-BYBMDK6X.js.map → chunk-GYOQAV6R.js.map} +1 -1
  67. package/dist/{chunk-GTW5YKFV.js → chunk-HCNC53MU.js} +3 -3
  68. package/dist/{chunk-GTW5YKFV.js.map → chunk-HCNC53MU.js.map} +1 -1
  69. package/dist/{chunk-M7TRJXFE.js → chunk-ILVXUOQY.js} +3 -3
  70. package/dist/{chunk-M7TRJXFE.js.map → chunk-ILVXUOQY.js.map} +1 -1
  71. package/dist/{chunk-FGKWXSHF.cjs → chunk-KGQVK2II.cjs} +40 -40
  72. package/dist/{chunk-FGKWXSHF.cjs.map → chunk-KGQVK2II.cjs.map} +1 -1
  73. package/dist/{chunk-BMATB57B.cjs → chunk-KW3ON5IU.cjs} +11 -11
  74. package/dist/{chunk-BMATB57B.cjs.map → chunk-KW3ON5IU.cjs.map} +1 -1
  75. package/dist/{chunk-GK62U3S5.js → chunk-LOFUF6L7.js} +3 -3
  76. package/dist/{chunk-GK62U3S5.js.map → chunk-LOFUF6L7.js.map} +1 -1
  77. package/dist/{chunk-BPYZUJX5.cjs → chunk-MTJAT6UO.cjs} +5 -5
  78. package/dist/{chunk-BPYZUJX5.cjs.map → chunk-MTJAT6UO.cjs.map} +1 -1
  79. package/dist/{chunk-YTYB5KCQ.js → chunk-OH7QRGPQ.js} +33 -2
  80. package/dist/chunk-OH7QRGPQ.js.map +1 -0
  81. package/dist/{chunk-U53HFE4L.cjs → chunk-OKA6H3B3.cjs} +22 -22
  82. package/dist/{chunk-U53HFE4L.cjs.map → chunk-OKA6H3B3.cjs.map} +1 -1
  83. package/dist/{chunk-QR6V2BXA.cjs → chunk-PTFO3JI5.cjs} +114 -114
  84. package/dist/{chunk-QR6V2BXA.cjs.map → chunk-PTFO3JI5.cjs.map} +1 -1
  85. package/dist/{chunk-C3CN2C2T.cjs → chunk-Q6ZVQWH7.cjs} +38 -38
  86. package/dist/{chunk-C3CN2C2T.cjs.map → chunk-Q6ZVQWH7.cjs.map} +1 -1
  87. package/dist/{chunk-WAG3NVD7.cjs → chunk-QBQ465OX.cjs} +12 -12
  88. package/dist/{chunk-WAG3NVD7.cjs.map → chunk-QBQ465OX.cjs.map} +1 -1
  89. package/dist/{chunk-CRROO6PK.cjs → chunk-QHP2BCBJ.cjs} +4 -4
  90. package/dist/{chunk-CRROO6PK.cjs.map → chunk-QHP2BCBJ.cjs.map} +1 -1
  91. package/dist/{chunk-HWWPL2YL.js → chunk-QWIR5533.js} +2 -2
  92. package/dist/chunk-QWIR5533.js.map +1 -0
  93. package/dist/{chunk-ZHLWPHNT.cjs → chunk-RJ3GVX73.cjs} +6 -6
  94. package/dist/{chunk-ZHLWPHNT.cjs.map → chunk-RJ3GVX73.cjs.map} +1 -1
  95. package/dist/{chunk-SYKR6MVR.cjs → chunk-T2M2S5YZ.cjs} +59 -59
  96. package/dist/{chunk-SYKR6MVR.cjs.map → chunk-T2M2S5YZ.cjs.map} +1 -1
  97. package/dist/{chunk-OESX3T5K.js → chunk-TNNDNSNH.js} +4 -4
  98. package/dist/{chunk-OESX3T5K.js.map → chunk-TNNDNSNH.js.map} +1 -1
  99. package/dist/{chunk-5C4OYYDD.js → chunk-UVQMUBZ6.js} +6 -6
  100. package/dist/{chunk-5C4OYYDD.js.map → chunk-UVQMUBZ6.js.map} +1 -1
  101. package/dist/{chunk-IV3FENV2.js → chunk-W6K6NSRT.js} +5 -5
  102. package/dist/{chunk-IV3FENV2.js.map → chunk-W6K6NSRT.js.map} +1 -1
  103. package/dist/core/index.d.cts +3 -3
  104. package/dist/core/index.d.ts +3 -3
  105. package/dist/{ddl-wlEdaCQK.d.cts → ddl-B9lzB8Zi.d.cts} +3 -3
  106. package/dist/{ddl-DkFrUTn_.d.ts → ddl-DuZWvxBb.d.ts} +3 -3
  107. package/dist/graph-extension/index.d.cts +2 -2
  108. package/dist/graph-extension/index.d.ts +2 -2
  109. package/dist/graph-merge/index.cjs +122 -122
  110. package/dist/graph-merge/index.d.cts +7 -6
  111. package/dist/graph-merge/index.d.ts +7 -6
  112. package/dist/graph-merge/index.js +10 -10
  113. package/dist/{graph-templates-B4gkXVqg.d.ts → graph-templates-ClBhrXiA.d.ts} +2 -2
  114. package/dist/{graph-templates-6zTU7bNe.d.cts → graph-templates-DfmKDARd.d.cts} +2 -2
  115. package/dist/index.cjs +73 -73
  116. package/dist/index.d.cts +10 -10
  117. package/dist/index.d.ts +10 -10
  118. package/dist/index.js +11 -11
  119. package/dist/indexes/index.cjs +8 -8
  120. package/dist/indexes/index.d.cts +4 -4
  121. package/dist/indexes/index.d.ts +4 -4
  122. package/dist/indexes/index.js +3 -3
  123. package/dist/{ingestion-import-target-im9wEB00.d.cts → ingestion-import-target-BSgJagqI.d.cts} +1 -1
  124. package/dist/{ingestion-import-target-SopMSm-T.d.ts → ingestion-import-target-PNw10V4T.d.ts} +1 -1
  125. package/dist/interchange/index.cjs +29 -29
  126. package/dist/interchange/index.d.cts +7 -6
  127. package/dist/interchange/index.d.ts +7 -6
  128. package/dist/interchange/index.js +6 -6
  129. package/dist/{local-store-impl-ARNXBBSF.cjs → local-store-impl-QGSRYFZF.cjs} +17 -17
  130. package/dist/{local-store-impl-ARNXBBSF.cjs.map → local-store-impl-QGSRYFZF.cjs.map} +1 -1
  131. package/dist/{local-store-impl-FTGRP2V7.js → local-store-impl-VEVK2VGA.js} +14 -14
  132. package/dist/{local-store-impl-FTGRP2V7.js.map → local-store-impl-VEVK2VGA.js.map} +1 -1
  133. package/dist/{pglite-store-impl-CNQZYRBC.cjs → pglite-store-impl-33CI3P3M.cjs} +17 -17
  134. package/dist/{pglite-store-impl-CNQZYRBC.cjs.map → pglite-store-impl-33CI3P3M.cjs.map} +1 -1
  135. package/dist/{pglite-store-impl-NULC2IHH.js → pglite-store-impl-RDPTOOP3.js} +14 -14
  136. package/dist/{pglite-store-impl-NULC2IHH.js.map → pglite-store-impl-RDPTOOP3.js.map} +1 -1
  137. package/dist/{postgres-Dd3TrFku.d.ts → postgres-2FBMdOE_.d.ts} +3 -3
  138. package/dist/{postgres-cLQPlKtp.d.cts → postgres-BR3AeXm9.d.ts} +1 -1
  139. package/dist/{postgres-CLPfTNYN.d.ts → postgres-CRatyTVL.d.cts} +1 -1
  140. package/dist/{postgres-B4VD_rVy.d.cts → postgres-lbZf0zyg.d.cts} +3 -3
  141. package/dist/{profile-Co154QBx.d.ts → profile-BipG05-8.d.ts} +2 -2
  142. package/dist/{profile-BqThShR_.d.cts → profile-DKtvxVyA.d.cts} +2 -2
  143. package/dist/profiler/index.d.cts +8 -7
  144. package/dist/profiler/index.d.ts +8 -7
  145. package/dist/provenance/index.cjs +15 -15
  146. package/dist/provenance/index.cjs.map +1 -1
  147. package/dist/provenance/index.d.cts +6 -5
  148. package/dist/provenance/index.d.ts +6 -5
  149. package/dist/provenance/index.js +2 -2
  150. package/dist/provenance/index.js.map +1 -1
  151. package/dist/{repair-validity-windows-BLoClfCq.d.cts → repair-validity-windows-BnSHFIsR.d.cts} +1 -1
  152. package/dist/{repair-validity-windows-C__28ckL.d.ts → repair-validity-windows-DfRb4gZm.d.ts} +1 -1
  153. package/dist/{resolve-DgFSIK99.d.ts → resolve-BbjZDYTw.d.ts} +1 -1
  154. package/dist/{resolve-DSUxNIqw.d.cts → resolve-mLksuBg2.d.cts} +1 -1
  155. package/dist/schema/index.cjs +36 -36
  156. package/dist/schema/index.d.cts +7 -7
  157. package/dist/schema/index.d.ts +7 -7
  158. package/dist/schema/index.js +6 -6
  159. package/dist/{searchable-CZKn12eY.d.cts → searchable-BEAN91Ce.d.cts} +1 -1
  160. package/dist/{searchable-CUWWphQI.d.ts → searchable-Bg2lMPRm.d.ts} +1 -1
  161. package/dist/{sqlite-mSd_eVk4.d.ts → sqlite-Cal3rHgZ.d.ts} +3 -3
  162. package/dist/{sqlite-RdH7w-ix.d.cts → sqlite-CvajLABd.d.cts} +1 -1
  163. package/dist/{sqlite-qXLIybR2.d.cts → sqlite-DQxKoWAH.d.cts} +3 -3
  164. package/dist/{sqlite-CoBmhiFd.d.ts → sqlite-jH5J-Jb8.d.ts} +1 -1
  165. package/dist/{store-BzmMsCcw.d.ts → store-B5WZ8E5m.d.ts} +313 -177
  166. package/dist/{store-CL6uTm_W.d.cts → store-DdhFpX53.d.cts} +313 -177
  167. package/dist/{types-BUoh7cc3.d.cts → types-BUA3dZ99.d.cts} +1 -1
  168. package/dist/{types-ClC0IFIS.d.ts → types-CPtb7KNf.d.ts} +1 -1
  169. package/dist/{types-Blq8PG_N.d.cts → types-Dky3sCFz.d.cts} +9 -0
  170. package/dist/{types-Blq8PG_N.d.ts → types-Dky3sCFz.d.ts} +9 -0
  171. package/dist/{where-61C-QoM8.d.ts → where-BReEkAiy.d.ts} +1 -1
  172. package/dist/{where-o3Me5iJx.d.cts → where-Cz11nPRu.d.cts} +1 -1
  173. package/package.json +2 -2
  174. package/dist/chunk-4MZQVVPX.cjs.map +0 -1
  175. package/dist/chunk-7JUD57B4.js.map +0 -1
  176. package/dist/chunk-FHFPUORN.cjs.map +0 -1
  177. package/dist/chunk-HWWPL2YL.js.map +0 -1
  178. package/dist/chunk-IV5W7LKW.cjs.map +0 -1
  179. package/dist/chunk-YTYB5KCQ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/query/dialect/postgres.ts","../src/query/dialect/sqlite.ts","../src/query/dialect/index.ts","../src/indexes/compiler.ts"],"names":[],"mappings":"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","file":"chunk-YTYB5KCQ.js","sourcesContent":["/**\n * PostgreSQL Dialect Adapter\n *\n * Implements dialect-specific SQL generation for PostgreSQL databases.\n * Uses PostgreSQL's native JSONB operators for JSON operations.\n */\nimport { type ValueType } from \"../ast\";\nimport { type JsonPointer, parseJsonPointer } from \"../json-pointer\";\nimport { sql, type SqlFragment } from \"../sql-fragment\";\nimport { tsvectorStrategy } from \"./fulltext-strategy\";\nimport { likeEscapeClause } from \"./like-escape\";\nimport {\n getSqlDialectProfile,\n inlineSqlStringLiteral,\n packSqlListValue,\n} from \"./profile\";\nimport { type DialectAdapter } from \"./types\";\n\n/**\n * Escapes a string for use in a PostgreSQL string literal, independent of\n * server configuration.\n *\n * A plain `'…'` literal is only safe when the value contains no backslash:\n * under the legacy `standard_conforming_strings = off` setting, backslashes\n * act as escape characters inside regular literals, so a value ending in\n * `\\` could swallow the closing quote and change how the statement parses.\n * Values containing a backslash therefore use the `E'…'` form — where\n * backslash is an escape character under BOTH settings — with backslashes\n * and quotes doubled. Backslash-free values keep the plain form so the\n * emitted SQL text (which callers rely on being identical across clauses)\n * is unchanged for the common case.\n */\n/**\n * Converts a JSON pointer to PostgreSQL's text array path.\n *\n * Uses raw SQL (non-parameterized) to ensure the same expression text\n * is generated when the same field is used in multiple clauses (SELECT, GROUP BY).\n * Pointers usually come from schema definitions, but some (e.g. a weighted\n * traversal's `weightProperty`) are runtime strings — safe either way\n * because the shared PostgreSQL literal renderer escapes independently of server\n * configuration.\n *\n * @example\n * \"/name\" → ARRAY['name']\n * \"/items/0\" → ARRAY['items', '0']\n * \"/a/b/c\" → ARRAY['a', 'b', 'c']\n */\nfunction toPostgresPath(pointer: JsonPointer): SqlFragment {\n if (!pointer || pointer === \"\" || pointer === \"/\") {\n return sql.raw(\"ARRAY[]::text[]\");\n }\n\n const segments = parseJsonPointer(pointer);\n if (segments.length === 0) {\n return sql.raw(\"ARRAY[]::text[]\");\n }\n\n // Use raw SQL for path segments to ensure identical SQL text\n // when the same field is used in multiple clauses (e.g., SELECT and GROUP BY)\n const escapedSegments = segments\n .map((segment) => inlineSqlStringLiteral(segment, \"postgres\"))\n .join(\", \");\n return sql.raw(`ARRAY[${escapedSegments}]`);\n}\n\n/**\n * The cast that turns a text element of a list-valued `IN` parameter into the\n * type its left operand was extracted as. Mirrors the `jsonExtract*` casts:\n * `jsonExtractNumber` yields numeric, `jsonExtractBoolean` boolean,\n * `jsonExtractDate` timestamptz, and everything else stays text.\n */\nfunction postgresElementCast(elementType: ValueType | undefined): SqlFragment {\n switch (elementType) {\n case \"number\": {\n return sql.raw(\"::numeric\");\n }\n case \"boolean\": {\n return sql.raw(\"::boolean\");\n }\n case \"date\": {\n return sql.raw(\"::timestamptz\");\n }\n // `jsonExtractText` leaves these as text, so the elements must stay text\n // too. The compiler rejects array/object/embedding before reaching here.\n case \"string\":\n case \"array\":\n case \"object\":\n case \"embedding\":\n case \"unknown\":\n case undefined: {\n return sql.empty();\n }\n }\n}\n\n/**\n * PostgreSQL dialect adapter implementation.\n */\nexport const postgresDialect: DialectAdapter = {\n name: \"postgres\",\n capabilities: {\n standardQueryStrategy: \"cte_project\",\n recursiveQueryStrategy: \"recursive_cte\",\n materializeIntermediateTraversalCtes: false,\n emitNotMaterializedHint: true,\n forceRecursiveWorktableOuterJoinOrder: false,\n vectorPredicateStrategy: \"native\",\n vectorMetrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n supportsFulltext: true,\n subgraphMembershipStrategy: \"materialized-ids\",\n },\n\n binaryText(expression) {\n return sql`${expression} COLLATE \"C\"`;\n },\n\n analyzeTemporaryTable(table) {\n return sql`ANALYZE ${table}`;\n },\n\n setTransactionWorkingMemory(workingMemory) {\n // The parameterizable form of `SET LOCAL work_mem`: is_local => true\n // scopes the override to the current transaction, matching the pgvector\n // iterative-scan GUC handling elsewhere in the backend.\n return sql`SELECT set_config('work_mem', ${workingMemory}, true)`;\n },\n\n // ============================================================\n // JSON Path Operations\n // ============================================================\n\n compilePath(pointer) {\n return toPostgresPath(pointer);\n },\n\n jsonExtract(column, pointer) {\n // #> returns JSONB value at path\n const path = toPostgresPath(pointer);\n return sql`${column} #> ${path}`;\n },\n\n jsonExtractText(column, pointer) {\n // #>> returns text value at path\n const path = toPostgresPath(pointer);\n return sql`${column} #>> ${path}`;\n },\n\n jsonExtractNumber(column, pointer) {\n // Extract as text then cast to numeric\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::numeric`;\n },\n\n jsonExtractDouble(column, pointer) {\n // float8, not ::numeric — decimal arithmetic would diverge from\n // SQLite's binary doubles when values accumulate.\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::double precision`;\n },\n\n jsonExtractBoolean(column, pointer) {\n // Extract as text then cast to boolean\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::boolean`;\n },\n\n jsonExtractDate(column, pointer) {\n // Extract as text then cast to timestamptz\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::timestamptz`;\n },\n\n // ============================================================\n // JSON Array Operations\n // ============================================================\n\n jsonArrayLength(column) {\n return sql`jsonb_array_length(${column})`;\n },\n\n jsonArrayContains(column, value) {\n // @> checks if left contains right\n const jsonValue = JSON.stringify([value]);\n return sql`${column} @> ${jsonValue}::jsonb`;\n },\n\n jsonArrayContainsAll(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=1\");\n }\n\n // @> with full array checks all values\n const jsonValue = JSON.stringify(values);\n return sql`${column} @> ${jsonValue}::jsonb`;\n },\n\n jsonArrayContainsAny(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=0\");\n }\n\n // Check each value with @> and OR them together\n // PostgreSQL doesn't have a native \"overlaps\" for jsonb arrays\n const conditions = values.map((value) => {\n const jsonValue = JSON.stringify([value]);\n return sql`${column} @> ${jsonValue}::jsonb`;\n });\n return sql`(${sql.join(conditions, sql` OR `)})`;\n },\n\n // ============================================================\n // JSON Object Operations\n // ============================================================\n\n jsonHasPath(column, pointer) {\n const path = toPostgresPath(pointer);\n return sql`${column} #> ${path} IS NOT NULL`;\n },\n\n jsonPathIsNull(column, pointer) {\n const path = toPostgresPath(pointer);\n // Type-based, not the `#>> path = 'null'` text comparison this used to\n // be: `#>>` renders a JSON null as SQL NULL (making the old form\n // three-valued, so `.pathIsNull()` silently missed stored JSON nulls) and\n // renders the JSON *string* \"null\" as the same text 'null' (falsely\n // matching it). jsonb_typeof distinguishes both, and COALESCE maps a\n // missing path to TRUE, keeping the predicate two-valued.\n return sql`COALESCE(jsonb_typeof(${column} #> ${path}) = 'null', TRUE)`;\n },\n\n jsonPathIsNumber(column, pointer) {\n const path = toPostgresPath(pointer);\n // jsonb_typeof returns NULL for a missing path; COALESCE keeps the\n // predicate two-valued so negations don't silently drop rows.\n return sql`COALESCE(jsonb_typeof(${column} #> ${path}) = 'number', FALSE)`;\n },\n\n jsonPathIsNotNull(column, pointer) {\n const path = toPostgresPath(pointer);\n // Mirror image of jsonPathIsNull; COALESCE maps a missing path to FALSE.\n return sql`COALESCE(jsonb_typeof(${column} #> ${path}) <> 'null', FALSE)`;\n },\n\n jsonScalarPathEquals(column, pointer, value) {\n const path = toPostgresPath(pointer);\n return sql`${column} #> ${path} = CAST(${JSON.stringify(value)} AS jsonb)`;\n },\n\n jsonSetProperties(column, patch, unsetProperties = []) {\n const withReplacements =\n Object.keys(patch).length === 0 ?\n column\n : sql`${column} || ${JSON.stringify(patch)}::jsonb`;\n if (unsetProperties.length === 0) return withReplacements;\n const properties = unsetProperties.map((property) => sql`${property}`);\n return sql`(${withReplacements}) - ARRAY[${sql.join(properties, sql`, `)}]::text[]`;\n },\n\n // ============================================================\n // Comparison Operations\n // ============================================================\n\n nullSafeEquals(left, right) {\n return sql`${left} IS NOT DISTINCT FROM ${right}`;\n },\n\n inList(left, values, negated) {\n const operator = negated ? sql.raw(\"NOT IN\") : sql.raw(\"IN\");\n const placeholders = values.map((value) => sql`${value}`);\n return sql`${left} ${operator} (${sql.join(placeholders, sql`, `)})`;\n },\n\n inListParameter(left, packedValues, { negated, elementType }) {\n const operator = negated ? sql.raw(\"NOT IN\") : sql.raw(\"IN\");\n // One placeholder for the whole list: the binding is JSON text, cast to\n // jsonb and expanded into a one-column relation, so arity never reaches\n // the SQL text. Elements arrive as text (`jsonb_array_elements_text`) and\n // are cast to whatever type the left operand was extracted as, mirroring\n // the jsonExtract* casts above.\n const element = sql`in_list_element.value${postgresElementCast(elementType)}`;\n return sql`${left} ${operator} (SELECT ${element} FROM jsonb_array_elements_text(${packedValues}::jsonb) AS in_list_element(value))`;\n },\n\n packListValue(values) {\n return packSqlListValue(values, \"postgres\");\n },\n\n // ============================================================\n // String Operations\n // ============================================================\n\n ilike(column, pattern) {\n // PostgreSQL has native ILIKE operator. Declaring backslash as the escape\n // character is a no-op (it is the LIKE default) but keeps the emitted SQL\n // identical in intent to SQLite, which has no default escape character.\n return sql`${column} ILIKE ${pattern} ${likeEscapeClause}`;\n },\n\n // ============================================================\n // Set Operations\n // ============================================================\n\n wrapSetOperationOperand(inner) {\n // PostgreSQL allows a complete SELECT (incl. its own WITH) as a\n // parenthesized compound operand.\n return sql`(${inner})`;\n },\n\n // ============================================================\n // Recursive CTE Path Operations\n // ============================================================\n\n initializePath(nodeId) {\n // PostgreSQL uses text arrays: ARRAY[id]\n return sql`ARRAY[${nodeId}]`;\n },\n\n extendPath(currentPath, nodeId) {\n // Array concatenation: path || id\n return sql`${currentPath} || ${nodeId}`;\n },\n\n cycleCheck(nodeId, path) {\n // Check that id is NOT in array path\n // Returns TRUE if no cycle (id not in array)\n return sql`${nodeId} != ALL(${path})`;\n },\n\n // ============================================================\n // Value Binding & Literals\n // ============================================================\n\n bindValue(value) {\n return getSqlDialectProfile(\"postgres\").bindValue(value);\n },\n\n booleanLiteral(value) {\n return sql.raw(\n getSqlDialectProfile(\"postgres\").booleanLiteralString(value),\n );\n },\n\n booleanLiteralString(value) {\n return getSqlDialectProfile(\"postgres\").booleanLiteralString(value);\n },\n\n quoteIdentifier(name) {\n // PostgreSQL uses double quotes, escape embedded quotes by doubling\n return `\"${name.replaceAll('\"', '\"\"')}\"`;\n },\n\n // ============================================================\n // Vector Operations\n // ============================================================\n\n // Compile-time gate for `field.similarTo(...)`; the active\n // `VectorStrategy` (pgvector) owns the distance SQL.\n supportsVectors: true,\n\n // ============================================================\n // Fulltext Operations\n // ============================================================\n\n fulltext: tsvectorStrategy,\n};\n","/**\n * SQLite Dialect Adapter\n *\n * Implements dialect-specific SQL generation for SQLite databases.\n * Uses SQLite's JSON1 extension for JSON operations.\n */\nimport { type JsonPointer, parseJsonPointer } from \"../json-pointer\";\nimport { sql } from \"../sql-fragment\";\nimport { fts5Strategy } from \"./fulltext-strategy\";\nimport { likeEscapeClause } from \"./like-escape\";\nimport { getSqlDialectProfile, packSqlListValue } from \"./profile\";\nimport { type DialectAdapter } from \"./types\";\n\n/**\n * Escapes a string for use in a SQLite string literal.\n * SQLite uses single quotes and escapes embedded single quotes by doubling them.\n */\nfunction escapeSqliteLiteral(value: string): string {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\n/**\n * Converts a JSON pointer to SQLite's JSON path syntax.\n *\n * @example\n * \"/name\" → \"$.\\\"name\\\"\"\n * \"/items/0\" → \"$.\\\"items\\\"[0]\"\n * \"/a/b/c\" → \"$.\\\"a\\\".\\\"b\\\".\\\"c\\\"\"\n */\nfunction toSqlitePath(pointer: JsonPointer): string {\n if (!pointer || pointer === \"\" || pointer === \"/\") {\n return \"$\";\n }\n\n const segments = parseJsonPointer(pointer);\n const parts: string[] = [\"$\"];\n\n for (const segment of segments) {\n if (isArrayIndex(segment)) {\n parts.push(`[${segment}]`);\n } else {\n // Quote the key to handle special characters\n parts.push(`.${JSON.stringify(segment)}`);\n }\n }\n\n return parts.join(\"\");\n}\n\n/**\n * Returns a JSON path for an object property, even when the property name is a\n * numeric string. `toSqlitePath()` interprets numeric pointer segments as\n * array indexes, which is correct for query pointers but not for the\n * top-level object keys accepted by set-based patches.\n */\nfunction toSqliteObjectPropertyPath(property: string): string {\n return `$.${JSON.stringify(property)}`;\n}\n\n// SQLite builds before 3.48 default to 127 function arguments. Each json_set\n// replacement consumes a path/value pair in addition to the input document, so\n// compose bounded calls instead of making schema breadth an engine-version\n// dependency.\nconst JSON_SET_REPLACEMENTS_PER_CALL = 50;\n\n/**\n * Checks if a JSON pointer segment is an array index.\n */\nfunction isArrayIndex(segment: string): boolean {\n return /^\\d+$/.test(segment);\n}\n\n/**\n * SQLite dialect adapter implementation.\n */\nexport const sqliteDialect: DialectAdapter = {\n name: \"sqlite\",\n capabilities: {\n standardQueryStrategy: \"cte_project\",\n recursiveQueryStrategy: \"recursive_cte\",\n materializeIntermediateTraversalCtes: true,\n emitNotMaterializedHint: false,\n forceRecursiveWorktableOuterJoinOrder: true,\n vectorPredicateStrategy: \"native\",\n vectorMetrics: [\"cosine\", \"l2\"] as const,\n supportsFulltext: true,\n subgraphMembershipStrategy: \"inline-cte\",\n },\n\n binaryText(expression) {\n return expression;\n },\n\n analyzeTemporaryTable(): undefined {\n return;\n },\n\n setTransactionWorkingMemory(): undefined {\n // SQLite has no per-transaction working-memory budget to raise.\n return;\n },\n\n // ============================================================\n // JSON Path Operations\n // ============================================================\n\n compilePath(pointer) {\n // Use raw SQL to ensure the path is a literal, which allows expression\n // indexes on json_extract(...) to be used by the query planner.\n return sql.raw(escapeSqliteLiteral(toSqlitePath(pointer)));\n },\n\n jsonExtract(column, pointer) {\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractText(column, pointer) {\n // SQLite's json_extract returns the native JSON type, which works\n // for text comparisons. For explicit text, we use the same function.\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractNumber(column, pointer) {\n // SQLite json_extract returns numbers natively when the value is numeric\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractDouble(column, pointer) {\n // json_extract already yields INTEGER/REAL affinity for JSON numbers,\n // and SQLite arithmetic on those values is IEEE 754 double.\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractBoolean(column, pointer) {\n // SQLite json_extract returns 0/1 for boolean values\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractDate(column, pointer) {\n // SQLite stores dates as ISO strings, json_extract returns them as text\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n // ============================================================\n // JSON Array Operations\n // ============================================================\n\n jsonArrayLength(column) {\n return sql`json_array_length(${column})`;\n },\n\n jsonArrayContains(column, value) {\n return sql`EXISTS (SELECT 1 FROM json_each(${column}) WHERE json_each.value = ${value})`;\n },\n\n jsonArrayContainsAll(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=1\");\n }\n const packedValues = JSON.stringify(values);\n return sql`\n NOT EXISTS (\n SELECT 1 FROM json_each(${packedValues}) AS tg_required\n WHERE NOT EXISTS (\n SELECT 1 FROM json_each(${column}) AS tg_actual\n WHERE tg_actual.value = tg_required.value\n )\n )\n `;\n },\n\n jsonArrayContainsAny(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=0\");\n }\n const packedValues = JSON.stringify(values);\n return sql`\n EXISTS (\n SELECT 1\n FROM json_each(${column}) AS tg_actual\n JOIN json_each(${packedValues}) AS tg_wanted\n ON tg_actual.value = tg_wanted.value\n )\n `;\n },\n\n // ============================================================\n // JSON Object Operations\n // ============================================================\n\n jsonHasPath(column, pointer) {\n const path = toSqlitePath(pointer);\n return sql`json_type(${column}, ${sql.raw(escapeSqliteLiteral(path))}) IS NOT NULL`;\n },\n\n jsonPathIsNull(column, pointer) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n return sql`COALESCE(json_type(${column}, ${pathSql}) = 'null', 1)`;\n },\n\n jsonPathIsNumber(column, pointer) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n // json_type returns NULL for a missing path; COALESCE keeps the\n // predicate two-valued so negations don't silently drop rows.\n return sql`COALESCE(json_type(${column}, ${pathSql}) IN ('integer', 'real'), 0)`;\n },\n\n jsonPathIsNotNull(column, pointer) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n return sql`COALESCE(json_type(${column}, ${pathSql}) <> 'null', 0)`;\n },\n\n jsonScalarPathEquals(column, pointer, value) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n if (value === null) {\n return sql`json_type(${column}, ${pathSql}) = 'null'`;\n }\n if (typeof value === \"boolean\") {\n return sql`json_type(${column}, ${pathSql}) IN ('true', 'false') AND json_extract(${column}, ${pathSql}) = ${value ? 1 : 0}`;\n }\n if (typeof value === \"number\") {\n return sql`json_type(${column}, ${pathSql}) IN ('integer', 'real') AND json_extract(${column}, ${pathSql}) = ${value}`;\n }\n return sql`json_type(${column}, ${pathSql}) = 'text' AND json_extract(${column}, ${pathSql}) = ${value}`;\n },\n\n jsonSetProperties(column, patch, unsetProperties = []) {\n const entries = Object.entries(patch);\n let patchedColumn = column;\n for (\n let offset = 0;\n offset < entries.length;\n offset += JSON_SET_REPLACEMENTS_PER_CALL\n ) {\n const replacements = entries\n .slice(offset, offset + JSON_SET_REPLACEMENTS_PER_CALL)\n .flatMap(([property, value]) => [\n sql.raw(escapeSqliteLiteral(toSqliteObjectPropertyPath(property))),\n sql`json(${JSON.stringify(value)})`,\n ]);\n patchedColumn = sql`json_set(${patchedColumn}, ${sql.join(replacements, sql`, `)})`;\n }\n if (unsetProperties.length === 0) return patchedColumn;\n const removalPaths = unsetProperties.map((property) =>\n sql.raw(escapeSqliteLiteral(toSqliteObjectPropertyPath(property))),\n );\n return sql`json_remove(${patchedColumn}, ${sql.join(removalPaths, sql`, `)})`;\n },\n\n // ============================================================\n // Comparison Operations\n // ============================================================\n\n nullSafeEquals(left, right) {\n // SQLite's IS operator is null-safe equality (equivalent to = for\n // non-null operands, TRUE when both sides are NULL).\n return sql`${left} IS ${right}`;\n },\n\n inList(left, values, negated) {\n const operator = negated ? sql.raw(\"NOT IN\") : sql.raw(\"IN\");\n const packedValues = JSON.stringify(values);\n return sql`${left} ${operator} (SELECT value FROM json_each(${packedValues}))`;\n },\n\n inListParameter(left, packedValues, { negated }) {\n const operator = negated ? sql.raw(\"NOT IN\") : sql.raw(\"IN\");\n // Same packed shape as the literal `inList` above, with the JSON text\n // supplied by the caller's binding instead of baked in. SQLite's dynamic\n // typing makes `json_each.value` compare correctly against every extracted\n // column type, so the element type needs no cast here.\n return sql`${left} ${operator} (SELECT value FROM json_each(${packedValues}))`;\n },\n\n packListValue(values) {\n return packSqlListValue(values, \"sqlite\");\n },\n\n // ============================================================\n // String Operations\n // ============================================================\n\n ilike(column, pattern) {\n // SQLite LIKE is case-insensitive for ASCII by default, but we use\n // LOWER() for consistency with non-ASCII characters. SQLite has no default\n // LIKE escape character, so declare backslash explicitly to honor the\n // escaping the compiler applies to the pattern (parity with Postgres).\n return sql`LOWER(${column}) LIKE LOWER(${pattern}) ${likeEscapeClause}`;\n },\n\n // ============================================================\n // Set Operations\n // ============================================================\n\n wrapSetOperationOperand(inner) {\n // SQLite forbids parenthesized compound operands, but a FROM-subquery may\n // carry its own WITH clause, so wrap each operand as a subquery.\n return sql`SELECT * FROM (${inner})`;\n },\n\n // ============================================================\n // Recursive CTE Path Operations\n // ============================================================\n\n initializePath(nodeId) {\n // SQLite uses string-based paths with delimiters: '|id|'\n return sql`'|' || ${nodeId} || '|'`;\n },\n\n extendPath(currentPath, nodeId) {\n // Append: path || id || '|'\n return sql`${currentPath} || ${nodeId} || '|'`;\n },\n\n cycleCheck(nodeId, path) {\n // Check that id is NOT in path using INSTR\n // Returns TRUE if no cycle (id not found in path)\n return sql`INSTR(${path}, '|' || ${nodeId} || '|') = 0`;\n },\n\n // ============================================================\n // Value Binding & Literals\n // ============================================================\n\n bindValue(value) {\n return getSqlDialectProfile(\"sqlite\").bindValue(value);\n },\n\n booleanLiteral(value) {\n return sql.raw(getSqlDialectProfile(\"sqlite\").booleanLiteralString(value));\n },\n\n booleanLiteralString(value) {\n return getSqlDialectProfile(\"sqlite\").booleanLiteralString(value);\n },\n\n quoteIdentifier(name) {\n // SQLite uses double quotes (or backticks), escape embedded quotes by doubling\n return `\"${name.replaceAll('\"', '\"\"')}\"`;\n },\n\n // ============================================================\n // Vector Operations\n // ============================================================\n\n // Compile-time gate for `field.similarTo(...)`; the active\n // `VectorStrategy` (sqlite-vec / libSQL-native) owns the distance SQL.\n supportsVectors: true,\n\n // ============================================================\n // Fulltext Operations\n // ============================================================\n\n fulltext: fts5Strategy,\n};\n","/**\n * SQL Dialect Module\n *\n * Provides dialect adapters for different SQL databases.\n * Use `getDialect()` to get the appropriate adapter for a dialect name.\n */\n\nexport type { FulltextStrategy } from \"./fulltext-strategy\";\nexport {\n ALL_FULLTEXT_MODES,\n buildFulltextCapabilities,\n fts5Strategy,\n tsvectorStrategy,\n} from \"./fulltext-strategy\";\nexport { postgresDialect } from \"./postgres\";\nexport { sqliteDialect } from \"./sqlite\";\nexport type {\n DialectAdapter,\n DialectCapabilities,\n DialectRecursiveQueryStrategy,\n DialectStandardQueryStrategy,\n DialectSubgraphMembershipStrategy,\n DialectVectorPredicateStrategy,\n InListParameterOptions,\n SqlDialect,\n} from \"./types\";\nexport {\n buildVectorCapabilities,\n type VectorSlot,\n type VectorStrategy,\n} from \"./vector-strategy\";\n\nimport { postgresDialect } from \"./postgres\";\nimport { sqliteDialect } from \"./sqlite\";\nimport { type DialectAdapter, type SqlDialect } from \"./types\";\n\n/**\n * Map of dialect names to their adapters.\n */\nconst DIALECT_ADAPTERS: Record<SqlDialect, DialectAdapter> = {\n sqlite: sqliteDialect,\n postgres: postgresDialect,\n};\n\n/**\n * Gets the dialect adapter for a given dialect name.\n *\n * @param dialect - The dialect name (\"sqlite\" or \"postgres\")\n * @returns The dialect adapter\n *\n * @example\n * ```typescript\n * const adapter = getDialect(\"postgres\");\n * const sql = adapter.jsonExtract(column, \"/name\");\n * ```\n */\nexport function getDialect(dialect: SqlDialect): DialectAdapter {\n return DIALECT_ADAPTERS[dialect];\n}\n\n/**\n * Default dialect used when none is specified.\n */\nexport const DEFAULT_DIALECT: SqlDialect = \"sqlite\";\n","import { type ValueType } from \"../query/ast\";\nimport { getDialect } from \"../query/dialect\";\nimport { type SqlDialect } from \"../query/dialect/types\";\nimport { type JsonPointer, jsonPointer } from \"../query/json-pointer\";\nimport { sql, type SqlFragment } from \"../query/sql-fragment\";\nimport {\n type EdgeIndexDeclaration,\n type IndexWhereExpression,\n type IndexWhereLiteral,\n type IndexWhereOp,\n type IndexWhereOperand,\n type NodeIndexDeclaration,\n type SystemColumnName,\n} from \"./types\";\n\n// ============================================================\n// Public Types\n// ============================================================\n\nexport type IndexCompilationContext = Readonly<{\n dialect: SqlDialect;\n propsColumn: SqlFragment;\n systemColumn: (column: SystemColumnName) => SqlFragment;\n}>;\n\ntype CompiledIndexKeys = Readonly<{\n /** SQL expressions in index key order */\n keys: readonly SqlFragment[];\n}>;\n\n// ============================================================\n// Index Key Compilation\n// ============================================================\n\nexport function compileNodeIndexKeys(\n index: NodeIndexDeclaration,\n dialect: SqlDialect,\n propsColumn: SqlFragment,\n systemColumn: (column: SystemColumnName) => SqlFragment,\n): CompiledIndexKeys {\n const adapter = getDialect(dialect);\n const keys: SqlFragment[] = [];\n\n const systemColumns = [\n ...getNodeScopeColumns(index.scope),\n ...(index.keySystemColumns ?? []),\n ];\n for (const column of systemColumns) {\n keys.push(systemColumn(column));\n }\n\n const allPointers = [...index.fields, ...index.coveringFields];\n const allValueTypes = [\n ...index.fieldValueTypes,\n ...index.coveringFieldValueTypes,\n ];\n\n for (const [pointerIndex, pointer] of allPointers.entries()) {\n const valueType = allValueTypes[pointerIndex];\n const extracted = compileIndexKeyValue(\n adapter,\n propsColumn,\n pointer,\n valueType,\n );\n keys.push(sql`(${extracted})`);\n }\n\n return { keys };\n}\n\nexport function compileEdgeIndexKeys(\n index: EdgeIndexDeclaration,\n dialect: SqlDialect,\n propsColumn: SqlFragment,\n systemColumn: (column: SystemColumnName) => SqlFragment,\n): CompiledIndexKeys {\n const adapter = getDialect(dialect);\n const keys: SqlFragment[] = [];\n\n for (const column of getEdgeScopeColumns(index.scope, index.direction)) {\n keys.push(systemColumn(column));\n }\n\n const allPointers = [...index.fields, ...index.coveringFields];\n const allValueTypes = [\n ...index.fieldValueTypes,\n ...index.coveringFieldValueTypes,\n ];\n\n for (const [pointerIndex, pointer] of allPointers.entries()) {\n const valueType = allValueTypes[pointerIndex];\n const extracted = compileIndexKeyValue(\n adapter,\n propsColumn,\n pointer,\n valueType,\n );\n keys.push(sql`(${extracted})`);\n }\n\n return { keys };\n}\n\n/**\n * Compiles the per-field key-extraction expressions for a node index's\n * **lookup keys** — `index.fields` only, excluding scope columns and\n * `coveringFields` (which are index payload, not part of the lookup key).\n *\n * Each expression is the exact extraction the index DDL builds for that\n * field (via the shared {@link compileIndexKeyValue}), so a runtime lookup\n * predicate stays byte-identical to the materialized index expression —\n * the single source of truth that lets the planner use the physical index.\n */\nexport function compileNodeIndexFieldKeys(\n index: NodeIndexDeclaration,\n ctx: IndexCompilationContext,\n): readonly SqlFragment[] {\n const adapter = getDialect(ctx.dialect);\n const keys: SqlFragment[] = [];\n for (const [position, pointer] of index.fields.entries()) {\n const extracted = compileIndexKeyValue(\n adapter,\n ctx.propsColumn,\n pointer,\n index.fieldValueTypes[position],\n );\n keys.push(sql`(${extracted})`);\n }\n return keys;\n}\n\nfunction compileIndexKeyValue(\n dialect: ReturnType<typeof getDialect>,\n propsColumn: SqlFragment,\n pointer: JsonPointer,\n valueType: ValueType | undefined,\n): SqlFragment {\n switch (valueType) {\n case \"number\": {\n return dialect.jsonExtractNumber(propsColumn, pointer);\n }\n case \"boolean\": {\n return dialect.jsonExtractBoolean(propsColumn, pointer);\n }\n case \"date\": {\n return dialect.jsonExtractDate(propsColumn, pointer);\n }\n case \"string\":\n case \"unknown\":\n case undefined: {\n return dialect.jsonExtractText(propsColumn, pointer);\n }\n case \"array\":\n case \"object\":\n case \"embedding\": {\n // For advanced index types (GIN/json), callers should use dialect.jsonExtract\n // or index the props column directly. We keep this as a conservative fallback.\n return dialect.jsonExtract(propsColumn, pointer);\n }\n }\n}\n\nexport function getNodeScopeColumns(\n scope: NodeIndexDeclaration[\"scope\"],\n): readonly SystemColumnName[] {\n switch (scope) {\n case \"graphAndKind\": {\n return [\"graph_id\", \"kind\"];\n }\n case \"graph\": {\n return [\"graph_id\"];\n }\n case \"none\": {\n return [];\n }\n }\n}\n\nfunction getEdgeScopeColumns(\n scope: EdgeIndexDeclaration[\"scope\"],\n direction: EdgeIndexDeclaration[\"direction\"],\n): readonly SystemColumnName[] {\n const base =\n scope === \"graphAndKind\" ? ([\"graph_id\", \"kind\"] as const)\n : scope === \"graph\" ? ([\"graph_id\"] as const)\n : ([] as const);\n\n if (direction === \"out\") {\n return [...base, \"from_id\"];\n }\n if (direction === \"in\") {\n return [...base, \"to_id\"];\n }\n return [...base];\n}\n\n// ============================================================\n// WHERE Clause Compilation\n// ============================================================\n\nfunction isIndexWhereLiteralList(\n value: IndexWhereLiteral | readonly IndexWhereLiteral[],\n): value is readonly IndexWhereLiteral[] {\n return Array.isArray(value);\n}\n\nexport function compileIndexWhere(\n ctx: IndexCompilationContext,\n expression: IndexWhereExpression,\n): SqlFragment {\n switch (expression.__type) {\n case \"index_where_and\": {\n return sql`(${sql.join(\n expression.predicates.map((p) => compileIndexWhere(ctx, p)),\n sql` AND `,\n )})`;\n }\n case \"index_where_or\": {\n return sql`(${sql.join(\n expression.predicates.map((p) => compileIndexWhere(ctx, p)),\n sql` OR `,\n )})`;\n }\n case \"index_where_not\": {\n return sql`(NOT ${compileIndexWhere(ctx, expression.predicate)})`;\n }\n case \"index_where_null_check\": {\n const operand = compileIndexWhereOperand(ctx, expression.operand);\n return expression.op === \"isNull\" ?\n sql`${operand} IS NULL`\n : sql`${operand} IS NOT NULL`;\n }\n case \"index_where_comparison\": {\n const left = compileIndexWhereOperand(ctx, expression.left);\n\n const right = expression.right;\n if (isIndexWhereLiteralList(right)) {\n if (expression.op !== \"in\" && expression.op !== \"notIn\") {\n throw new Error(\n `Operator \"${expression.op}\" does not support list comparison in index WHERE clause`,\n );\n }\n const values = right.map((literal) =>\n compileIndexWhereLiteral(ctx.dialect, literal),\n );\n const operator = expression.op === \"in\" ? sql`IN` : sql`NOT IN`;\n return sql`${left} ${operator} (${sql.join(values, sql`, `)})`;\n }\n\n if (expression.op === \"in\" || expression.op === \"notIn\") {\n throw new Error(\n `Operator \"${expression.op}\" requires a list of values in index WHERE clause`,\n );\n }\n\n const rightLiteral = compileIndexWhereLiteral(ctx.dialect, right);\n const opSql = compileComparisonOperator(expression.op);\n return sql`${left} ${opSql} ${rightLiteral}`;\n }\n }\n}\n\nfunction compileIndexWhereOperand(\n ctx: IndexCompilationContext,\n operand: IndexWhereOperand,\n): SqlFragment {\n if (operand.__type === \"index_operand_system\") {\n return ctx.systemColumn(operand.column);\n }\n\n const adapter = getDialect(ctx.dialect);\n const pointer = jsonPointer([operand.field]);\n\n switch (operand.valueType) {\n case \"number\": {\n return adapter.jsonExtractNumber(ctx.propsColumn, pointer);\n }\n case \"boolean\": {\n return adapter.jsonExtractBoolean(ctx.propsColumn, pointer);\n }\n case \"date\": {\n return adapter.jsonExtractDate(ctx.propsColumn, pointer);\n }\n case \"array\":\n case \"object\":\n case \"embedding\": {\n return adapter.jsonExtract(ctx.propsColumn, pointer);\n }\n case \"string\":\n case \"unknown\":\n case undefined: {\n return adapter.jsonExtractText(ctx.propsColumn, pointer);\n }\n }\n}\n\nfunction compileIndexWhereLiteral(\n dialect: SqlDialect,\n literal: IndexWhereLiteral,\n): SqlFragment {\n switch (literal.valueType) {\n case \"string\":\n case \"date\": {\n return sql.raw(escapeStringLiteral(literal.value.toString()));\n }\n case \"number\": {\n return sql.raw(literal.value.toString());\n }\n case \"boolean\": {\n return getDialect(dialect).booleanLiteral(literal.value as boolean);\n }\n case \"array\":\n case \"object\":\n case \"embedding\":\n case \"unknown\": {\n return sql.raw(escapeStringLiteral(literal.value.toString()));\n }\n }\n}\n\ntype ComparisonIndexWhereOp = Exclude<IndexWhereOp, \"in\" | \"notIn\">;\n\nfunction compileComparisonOperator(op: ComparisonIndexWhereOp): SqlFragment {\n switch (op) {\n case \"eq\": {\n return sql`=`;\n }\n case \"neq\": {\n return sql`<>`;\n }\n case \"gt\": {\n return sql`>`;\n }\n case \"gte\": {\n return sql`>=`;\n }\n case \"lt\": {\n return sql`<`;\n }\n case \"lte\": {\n return sql`<=`;\n }\n }\n}\n\nfunction escapeStringLiteral(value: string): string {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n"]}