@polyglot-sql/sdk 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1507,6 +1507,38 @@ class WasmWindowDefBuilder {
1507
1507
  }
1508
1508
  }
1509
1509
  if (Symbol.dispose) WasmWindowDefBuilder.prototype[Symbol.dispose] = WasmWindowDefBuilder.prototype.free;
1510
+ function annotate_types$1(sql, dialect, schema_json) {
1511
+ let deferred4_0;
1512
+ let deferred4_1;
1513
+ try {
1514
+ const retptr = wasm$3.__wbindgen_add_to_stack_pointer(-16);
1515
+ const ptr0 = passStringToWasm0(sql, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1516
+ const len0 = WASM_VECTOR_LEN;
1517
+ const ptr1 = passStringToWasm0(dialect, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1518
+ const len1 = WASM_VECTOR_LEN;
1519
+ const ptr2 = passStringToWasm0(schema_json, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1520
+ const len2 = WASM_VECTOR_LEN;
1521
+ wasm$3.annotate_types(retptr, ptr0, len0, ptr1, len1, ptr2, len2);
1522
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1523
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1524
+ deferred4_0 = r0;
1525
+ deferred4_1 = r1;
1526
+ return getStringFromWasm0(r0, r1);
1527
+ } finally {
1528
+ wasm$3.__wbindgen_add_to_stack_pointer(16);
1529
+ wasm$3.__wbindgen_export4(deferred4_0, deferred4_1, 1);
1530
+ }
1531
+ }
1532
+ function annotate_types_value$1(sql, dialect, schema_json) {
1533
+ const ptr0 = passStringToWasm0(sql, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1534
+ const len0 = WASM_VECTOR_LEN;
1535
+ const ptr1 = passStringToWasm0(dialect, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1536
+ const len1 = WASM_VECTOR_LEN;
1537
+ const ptr2 = passStringToWasm0(schema_json, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1538
+ const len2 = WASM_VECTOR_LEN;
1539
+ const ret = wasm$3.annotate_types_value(ptr0, len0, ptr1, len1, ptr2, len2);
1540
+ return takeObject(ret);
1541
+ }
1510
1542
  function ast_add_where$1(ast_json, condition_json, use_or) {
1511
1543
  let deferred3_0;
1512
1544
  let deferred3_1;
@@ -1933,6 +1965,30 @@ function lineage_sql$1(sql, column, dialect, trim_selects) {
1933
1965
  wasm$3.__wbindgen_export4(deferred4_0, deferred4_1, 1);
1934
1966
  }
1935
1967
  }
1968
+ function lineage_sql_with_schema$1(sql, column, schema_json, dialect, trim_selects) {
1969
+ let deferred5_0;
1970
+ let deferred5_1;
1971
+ try {
1972
+ const retptr = wasm$3.__wbindgen_add_to_stack_pointer(-16);
1973
+ const ptr0 = passStringToWasm0(sql, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1974
+ const len0 = WASM_VECTOR_LEN;
1975
+ const ptr1 = passStringToWasm0(column, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1976
+ const len1 = WASM_VECTOR_LEN;
1977
+ const ptr2 = passStringToWasm0(schema_json, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1978
+ const len2 = WASM_VECTOR_LEN;
1979
+ const ptr3 = passStringToWasm0(dialect, wasm$3.__wbindgen_export, wasm$3.__wbindgen_export2);
1980
+ const len3 = WASM_VECTOR_LEN;
1981
+ wasm$3.lineage_sql_with_schema(retptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, trim_selects);
1982
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1983
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1984
+ deferred5_0 = r0;
1985
+ deferred5_1 = r1;
1986
+ return getStringFromWasm0(r0, r1);
1987
+ } finally {
1988
+ wasm$3.__wbindgen_add_to_stack_pointer(16);
1989
+ wasm$3.__wbindgen_export4(deferred5_0, deferred5_1, 1);
1990
+ }
1991
+ }
1936
1992
  function parse$2(sql, dialect) {
1937
1993
  let deferred3_0;
1938
1994
  let deferred3_1;
@@ -2816,6 +2872,8 @@ async function __polyglot_init_wasm() {
2816
2872
  __wbg_wasmsetopbuilder_free = __vite__wasmModule.__wbg_wasmsetopbuilder_free;
2817
2873
  __wbg_wasmupdatebuilder_free = __vite__wasmModule.__wbg_wasmupdatebuilder_free;
2818
2874
  __wbg_wasmwindowdefbuilder_free = __vite__wasmModule.__wbg_wasmwindowdefbuilder_free;
2875
+ annotate_types = __vite__wasmModule.annotate_types;
2876
+ annotate_types_value = __vite__wasmModule.annotate_types_value;
2819
2877
  ast_add_where = __vite__wasmModule.ast_add_where;
2820
2878
  ast_get_aggregate_functions = __vite__wasmModule.ast_get_aggregate_functions;
2821
2879
  ast_get_column_names = __vite__wasmModule.ast_get_column_names;
@@ -2841,6 +2899,7 @@ async function __polyglot_init_wasm() {
2841
2899
  get_dialects = __vite__wasmModule.get_dialects;
2842
2900
  get_dialects_value = __vite__wasmModule.get_dialects_value;
2843
2901
  lineage_sql = __vite__wasmModule.lineage_sql;
2902
+ lineage_sql_with_schema = __vite__wasmModule.lineage_sql_with_schema;
2844
2903
  parse$1 = __vite__wasmModule.parse;
2845
2904
  parse_value = __vite__wasmModule.parse_value;
2846
2905
  plan$1 = __vite__wasmModule.plan;
@@ -2999,6 +3058,8 @@ let __wbg_wasmselectbuilder_free;
2999
3058
  let __wbg_wasmsetopbuilder_free;
3000
3059
  let __wbg_wasmupdatebuilder_free;
3001
3060
  let __wbg_wasmwindowdefbuilder_free;
3061
+ let annotate_types;
3062
+ let annotate_types_value;
3002
3063
  let ast_add_where;
3003
3064
  let ast_get_aggregate_functions;
3004
3065
  let ast_get_column_names;
@@ -3024,6 +3085,7 @@ let generate_value;
3024
3085
  let get_dialects;
3025
3086
  let get_dialects_value;
3026
3087
  let lineage_sql;
3088
+ let lineage_sql_with_schema;
3027
3089
  let parse$1;
3028
3090
  let parse_value;
3029
3091
  let plan$1;
@@ -3184,6 +3246,8 @@ const wasm$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3184
3246
  __wbindgen_export2,
3185
3247
  __wbindgen_export3,
3186
3248
  __wbindgen_export4,
3249
+ annotate_types,
3250
+ annotate_types_value,
3187
3251
  ast_add_where,
3188
3252
  ast_get_aggregate_functions,
3189
3253
  ast_get_column_names,
@@ -3209,6 +3273,7 @@ const wasm$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3209
3273
  get_dialects,
3210
3274
  get_dialects_value,
3211
3275
  lineage_sql,
3276
+ lineage_sql_with_schema,
3212
3277
  memory,
3213
3278
  parse: parse$1,
3214
3279
  parse_value,
@@ -3361,6 +3426,8 @@ const wasmModule = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3361
3426
  WasmSetOpBuilder,
3362
3427
  WasmUpdateBuilder,
3363
3428
  WasmWindowDefBuilder,
3429
+ annotate_types: annotate_types$1,
3430
+ annotate_types_value: annotate_types_value$1,
3364
3431
  ast_add_where: ast_add_where$1,
3365
3432
  ast_get_aggregate_functions: ast_get_aggregate_functions$1,
3366
3433
  ast_get_column_names: ast_get_column_names$1,
@@ -3386,6 +3453,7 @@ const wasmModule = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
3386
3453
  get_dialects: get_dialects$1,
3387
3454
  get_dialects_value: get_dialects_value$1,
3388
3455
  lineage_sql: lineage_sql$1,
3456
+ lineage_sql_with_schema: lineage_sql_with_schema$1,
3389
3457
  parse: parse$2,
3390
3458
  parse_value: parse_value$1,
3391
3459
  plan: plan$2,
@@ -3435,6 +3503,16 @@ function isExpressionValue(value) {
3435
3503
  function makeExpr(type, data) {
3436
3504
  return { [type]: data };
3437
3505
  }
3506
+ function getInferredType(expr) {
3507
+ const data = getExprData(expr);
3508
+ if (data && typeof data === "object" && "inferred_type" in data) {
3509
+ const it = data["inferred_type"];
3510
+ if (it != null) {
3511
+ return it;
3512
+ }
3513
+ }
3514
+ return void 0;
3515
+ }
3438
3516
  function isType(type) {
3439
3517
  return (expr) => type in expr;
3440
3518
  }
@@ -4013,6 +4091,7 @@ const index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
4013
4091
  getExprType,
4014
4092
  getFunctions,
4015
4093
  getIdentifiers,
4094
+ getInferredType,
4016
4095
  getLiterals,
4017
4096
  getNodeDepth,
4018
4097
  getParent,
@@ -4992,6 +5071,16 @@ function lineage(column, sql, dialect = "generic", trimSelects = false) {
4992
5071
  const resultJson = lineage_sql$1(sql, column, dialect, trimSelects);
4993
5072
  return JSON.parse(resultJson);
4994
5073
  }
5074
+ function lineageWithSchema(column, sql, schema, dialect = "generic", trimSelects = false) {
5075
+ const resultJson = lineage_sql_with_schema$1(
5076
+ sql,
5077
+ column,
5078
+ JSON.stringify(schema),
5079
+ dialect,
5080
+ trimSelects
5081
+ );
5082
+ return JSON.parse(resultJson);
5083
+ }
4995
5084
  function getSourceTables(column, sql, dialect = "generic") {
4996
5085
  const resultJson = source_tables$1(sql, column, dialect);
4997
5086
  return JSON.parse(resultJson);
@@ -5177,6 +5266,30 @@ function getDialects() {
5177
5266
  function getVersion() {
5178
5267
  return wasm.version();
5179
5268
  }
5269
+ function annotateTypes(sql, dialect = "generic", schema) {
5270
+ try {
5271
+ const schemaJson = schema ? JSON.stringify(schema) : "";
5272
+ if (typeof wasm.annotate_types_value === "function") {
5273
+ return decodeWasmPayload(
5274
+ wasm.annotate_types_value(sql, dialect, schemaJson)
5275
+ );
5276
+ }
5277
+ if (typeof wasm.annotate_types === "function") {
5278
+ return JSON.parse(
5279
+ wasm.annotate_types(sql, dialect, schemaJson)
5280
+ );
5281
+ }
5282
+ return {
5283
+ success: false,
5284
+ error: "annotate_types not available in this WASM build"
5285
+ };
5286
+ } catch (error) {
5287
+ return {
5288
+ success: false,
5289
+ error: `WASM annotate_types failed: ${errorMessage(error)}`
5290
+ };
5291
+ }
5292
+ }
5180
5293
  class Polyglot {
5181
5294
  static instance = null;
5182
5295
  constructor() {
@@ -5244,6 +5357,12 @@ class Polyglot {
5244
5357
  getVersion() {
5245
5358
  return getVersion();
5246
5359
  }
5360
+ /**
5361
+ * Parse SQL and annotate the AST with inferred type information.
5362
+ */
5363
+ annotateTypes(sql, dialect = "generic", schema) {
5364
+ return annotateTypes(sql, dialect, schema);
5365
+ }
5247
5366
  }
5248
5367
  const index = {
5249
5368
  init,
@@ -5253,9 +5372,11 @@ const index = {
5253
5372
  tokenize,
5254
5373
  generate,
5255
5374
  format,
5375
+ annotateTypes,
5256
5376
  getDialects,
5257
5377
  getVersion,
5258
5378
  lineage,
5379
+ lineageWithSchema,
5259
5380
  getSourceTables,
5260
5381
  diff,
5261
5382
  hasChanges,
@@ -5279,6 +5400,7 @@ exports.WindowDefBuilder = WindowDefBuilder;
5279
5400
  exports.abs = abs;
5280
5401
  exports.alias = alias;
5281
5402
  exports.and = and;
5403
+ exports.annotateTypes = annotateTypes;
5282
5404
  exports.ast = index$1;
5283
5405
  exports.avg = avg;
5284
5406
  exports.boolean = boolean;
@@ -5312,6 +5434,7 @@ exports.func = func;
5312
5434
  exports.generate = generate;
5313
5435
  exports.getColumns = getColumns;
5314
5436
  exports.getDialects = getDialects;
5437
+ exports.getInferredType = getInferredType;
5315
5438
  exports.getSourceTables = getSourceTables;
5316
5439
  exports.getVersion = getVersion;
5317
5440
  exports.greatest = greatest;
@@ -5330,6 +5453,7 @@ exports.isSelect = isSelect;
5330
5453
  exports.least = least;
5331
5454
  exports.length = length;
5332
5455
  exports.lineage = lineage;
5456
+ exports.lineageWithSchema = lineageWithSchema;
5333
5457
  exports.lit = lit;
5334
5458
  exports.ln = ln;
5335
5459
  exports.lower = lower;
package/dist/index.d.cts CHANGED
@@ -49,6 +49,10 @@ declare type AggFunc = {
49
49
  * LIMIT inside aggregate (e.g., ARRAY_AGG(x ORDER BY y LIMIT 2))
50
50
  */
51
51
  limit?: Expression | null;
52
+ /**
53
+ * Inferred data type from type annotation
54
+ */
55
+ inferred_type?: DataType | null;
52
56
  };
53
57
 
54
58
  /**
@@ -93,6 +97,10 @@ declare type AggregateFunction = {
93
97
  * IGNORE NULLS / RESPECT NULLS
94
98
  */
95
99
  ignore_nulls?: boolean | null;
100
+ /**
101
+ * Inferred data type from type annotation
102
+ */
103
+ inferred_type?: DataType | null;
96
104
  };
97
105
 
98
106
  /**
@@ -146,6 +154,10 @@ declare type Alias = {
146
154
  * Trailing comments that appeared after the alias
147
155
  */
148
156
  trailing_comments: Array<string>;
157
+ /**
158
+ * Inferred data type from type annotation
159
+ */
160
+ inferred_type?: DataType | null;
149
161
  };
150
162
 
151
163
  /** Create an expr AS name alias expression. */
@@ -614,6 +626,51 @@ declare type Annotated = {
614
626
  trailing_comments: Array<string>;
615
627
  };
616
628
 
629
+ /**
630
+ * Parse SQL and annotate the AST with inferred type information.
631
+ *
632
+ * Parses the given SQL and runs bottom-up type inference, populating the
633
+ * `inferred_type` field on value-producing AST nodes (columns, operators,
634
+ * functions, casts, etc.). Use `ast.getInferredType(expr)` to read the
635
+ * inferred type from any expression node.
636
+ *
637
+ * @param sql - The SQL string to parse and annotate
638
+ * @param dialect - The dialect to use for parsing (default: Generic)
639
+ * @param schema - Optional schema for column type resolution
640
+ *
641
+ * @example
642
+ * ```typescript
643
+ * import { annotateTypes, ast, Dialect } from '@polyglot-sql/sdk';
644
+ *
645
+ * const result = annotateTypes(
646
+ * "SELECT a + b FROM t",
647
+ * Dialect.PostgreSQL,
648
+ * { tables: { t: { a: "INT", b: "DOUBLE" } } }
649
+ * );
650
+ *
651
+ * if (result.success) {
652
+ * // Walk the AST and inspect inferred types
653
+ * ast.walk(result.ast![0], (node) => {
654
+ * const dt = ast.getInferredType(node);
655
+ * if (dt) {
656
+ * console.log(ast.getExprType(node), "=>", dt);
657
+ * }
658
+ * });
659
+ * }
660
+ * ```
661
+ */
662
+ export declare function annotateTypes(sql: string, dialect?: Dialect, schema?: Schema): AnnotateTypesResult;
663
+
664
+ /**
665
+ * Result of an annotateTypes operation
666
+ */
667
+ export declare interface AnnotateTypesResult {
668
+ success: boolean;
669
+ /** The AST with `inferred_type` fields populated on value-producing nodes */
670
+ ast?: Expression[];
671
+ error?: string;
672
+ }
673
+
617
674
  /**
618
675
  * Anonymous
619
676
  */
@@ -834,6 +891,7 @@ export declare namespace ast {
834
891
  ExpressionType,
835
892
  getExprData,
836
893
  getExprType,
894
+ getInferredType,
837
895
  isExpressionValue,
838
896
  makeExpr,
839
897
  Alias,
@@ -1139,6 +1197,10 @@ declare type BinaryFunc = {
1139
1197
  * Original function name for round-trip preservation (e.g., NVL vs IFNULL)
1140
1198
  */
1141
1199
  original_name?: string | null;
1200
+ /**
1201
+ * Inferred data type from type annotation
1202
+ */
1203
+ inferred_type?: DataType | null;
1142
1204
  };
1143
1205
 
1144
1206
  /**
@@ -1165,6 +1227,10 @@ declare type BinaryOp = {
1165
1227
  * Comments after the right operand
1166
1228
  */
1167
1229
  trailing_comments: Array<string>;
1230
+ /**
1231
+ * Inferred data type from type annotation
1232
+ */
1233
+ inferred_type?: DataType | null;
1168
1234
  };
1169
1235
 
1170
1236
  /**
@@ -1270,6 +1336,10 @@ declare type Case = {
1270
1336
  * Comments from the CASE keyword (emitted after END)
1271
1337
  */
1272
1338
  comments?: Array<string>;
1339
+ /**
1340
+ * Inferred data type from type annotation
1341
+ */
1342
+ inferred_type?: DataType | null;
1273
1343
  };
1274
1344
 
1275
1345
  /**
@@ -1339,6 +1409,10 @@ declare type Cast = {
1339
1409
  * DEFAULT value ON CONVERSION ERROR (Oracle): CAST(x AS type DEFAULT val ON CONVERSION ERROR)
1340
1410
  */
1341
1411
  default?: Expression | null;
1412
+ /**
1413
+ * Inferred data type from type annotation
1414
+ */
1415
+ inferred_type?: DataType | null;
1342
1416
  };
1343
1417
 
1344
1418
  /** Create a CAST(expr AS type) expression. */
@@ -1465,6 +1539,13 @@ declare type ClusterBy = {
1465
1539
  expressions: Array<Ordered>;
1466
1540
  };
1467
1541
 
1542
+ /**
1543
+ * BigQuery CLUSTER BY property in CREATE TABLE statements.
1544
+ */
1545
+ declare type ClusterByColumnsProperty = {
1546
+ columns: Array<Identifier>;
1547
+ };
1548
+
1468
1549
  /**
1469
1550
  * ClusteredByProperty
1470
1551
  */
@@ -1528,6 +1609,10 @@ declare type Column = {
1528
1609
  * Source position span
1529
1610
  */
1530
1611
  span?: Span | null;
1612
+ /**
1613
+ * Inferred data type from type annotation
1614
+ */
1615
+ inferred_type?: DataType | null;
1531
1616
  };
1532
1617
 
1533
1618
  /**
@@ -3138,9 +3223,11 @@ declare const _default: {
3138
3223
  tokenize: typeof tokenize;
3139
3224
  generate: typeof generate;
3140
3225
  format: typeof format;
3226
+ annotateTypes: typeof annotateTypes;
3141
3227
  getDialects: typeof getDialects;
3142
3228
  getVersion: typeof getVersion;
3143
3229
  lineage: typeof lineage;
3230
+ lineageWithSchema: typeof lineageWithSchema;
3144
3231
  getSourceTables: typeof getSourceTables;
3145
3232
  diff: typeof diff;
3146
3233
  hasChanges: typeof hasChanges;
@@ -3326,12 +3413,6 @@ declare type Detach = {
3326
3413
  exists: boolean;
3327
3414
  };
3328
3415
 
3329
- /**
3330
- * Polyglot SQL Dialect Translator
3331
- *
3332
- * A WebAssembly-powered SQL dialect translator that can convert SQL
3333
- * between different database dialects (PostgreSQL, MySQL, BigQuery, etc.)
3334
- */
3335
3416
  /**
3336
3417
  * Supported SQL dialects
3337
3418
  */
@@ -5092,8 +5173,12 @@ declare type Expression = {
5092
5173
  "on_commit_property": OnCommitProperty;
5093
5174
  } | {
5094
5175
  "partitioned_by_property": PartitionedByProperty;
5176
+ } | {
5177
+ "partition_by_property": PartitionByProperty;
5095
5178
  } | {
5096
5179
  "partitioned_by_bucket": PartitionedByBucket;
5180
+ } | {
5181
+ "cluster_by_columns_property": ClusterByColumnsProperty;
5097
5182
  } | {
5098
5183
  "partition_by_truncate": PartitionByTruncate;
5099
5184
  } | {
@@ -5186,6 +5271,8 @@ declare type Expression = {
5186
5271
  "include_property": IncludeProperty;
5187
5272
  } | {
5188
5273
  "properties": Properties;
5274
+ } | {
5275
+ "options_property": OptionsProperty;
5189
5276
  } | {
5190
5277
  "input_output_format": InputOutputFormat;
5191
5278
  } | {
@@ -6209,6 +6296,10 @@ declare type Function_2 = {
6209
6296
  * Source position span
6210
6297
  */
6211
6298
  span?: Span | null;
6299
+ /**
6300
+ * Inferred data type from type annotation
6301
+ */
6302
+ inferred_type?: DataType | null;
6212
6303
  };
6213
6304
 
6214
6305
  /**
@@ -6531,6 +6622,27 @@ declare function getFunctions(node: Expression): Expression[];
6531
6622
  */
6532
6623
  declare function getIdentifiers(node: Expression): Expression[];
6533
6624
 
6625
+ /**
6626
+ * Get the inferred data type from an Expression, if it has been type-annotated.
6627
+ *
6628
+ * After calling `annotateTypes()`, value-producing expressions (columns, operators,
6629
+ * functions, casts, etc.) carry an `inferred_type` field with their resolved SQL type.
6630
+ *
6631
+ * @example
6632
+ * ```typescript
6633
+ * const result = annotateTypes("SELECT 1 + 2", Dialect.Generic);
6634
+ * if (result.success) {
6635
+ * const addExpr = result.ast![0]; // the SELECT
6636
+ * // Navigate to the "1 + 2" expression and check its type:
6637
+ * const dt = getInferredType(someExpr);
6638
+ * // dt => { data_type: "int", length: null, integer_spelling: false }
6639
+ * }
6640
+ * ```
6641
+ *
6642
+ * @returns The inferred DataType, or `undefined` if not annotated or not a value-producing expression.
6643
+ */
6644
+ export declare function getInferredType(expr: Expression): DataType | undefined;
6645
+
6534
6646
  /**
6535
6647
  * Get all literals in the AST (via WASM)
6536
6648
  */
@@ -8521,6 +8633,10 @@ declare type LikeOp = {
8521
8633
  * Quantifier: ANY, ALL, or SOME
8522
8634
  */
8523
8635
  quantifier: string | null;
8636
+ /**
8637
+ * Inferred data type from type annotation
8638
+ */
8639
+ inferred_type?: DataType | null;
8524
8640
  };
8525
8641
 
8526
8642
  /**
@@ -8597,6 +8713,36 @@ export declare interface LineageResult {
8597
8713
  error?: string;
8598
8714
  }
8599
8715
 
8716
+ /**
8717
+ * Trace the lineage of a column through a SQL query using schema metadata.
8718
+ *
8719
+ * When a schema is provided, columns are fully qualified and type-annotated.
8720
+ * Each `LineageNode.expression` will have its `inferred_type` field populated
8721
+ * with the resolved SQL data type. Use `ast.getInferredType(node.expression)`
8722
+ * to read it.
8723
+ *
8724
+ * @param column - Column name to trace
8725
+ * @param sql - SQL string to analyze
8726
+ * @param schema - ValidationSchema-compatible schema object
8727
+ * @param dialect - Dialect for parsing/qualification (default: 'generic')
8728
+ * @param trimSelects - Trim SELECT to only target column (default: false)
8729
+ *
8730
+ * @example
8731
+ * ```typescript
8732
+ * import { lineageWithSchema, ast } from '@polyglot-sql/sdk';
8733
+ *
8734
+ * const result = lineageWithSchema("name", "SELECT name FROM users", {
8735
+ * tables: { users: { name: "TEXT", id: "INT" } }
8736
+ * });
8737
+ *
8738
+ * if (result.success) {
8739
+ * const dt = ast.getInferredType(result.lineage!.expression);
8740
+ * // dt => { data_type: "text" }
8741
+ * }
8742
+ * ```
8743
+ */
8744
+ export declare function lineageWithSchema(column: string, sql: string, schema: Schema, dialect?: string, trimSelects?: boolean): LineageResult;
8745
+
8600
8746
  /**
8601
8747
  * List
8602
8748
  */
@@ -9470,6 +9616,21 @@ declare type Operator = {
9470
9616
  comments?: Array<string>;
9471
9617
  };
9472
9618
 
9619
+ /**
9620
+ * Key/value pair in a BigQuery OPTIONS (...) clause.
9621
+ */
9622
+ declare type OptionEntry = {
9623
+ key: Identifier;
9624
+ value: Expression;
9625
+ };
9626
+
9627
+ /**
9628
+ * Typed BigQuery OPTIONS (...) property for CREATE TABLE and related DDL.
9629
+ */
9630
+ declare type OptionsProperty = {
9631
+ entries: Array<OptionEntry>;
9632
+ };
9633
+
9473
9634
  /** Chain multiple conditions with OR. */
9474
9635
  export declare function or(...conditions: ExprInput[]): Expr;
9475
9636
 
@@ -9793,6 +9954,13 @@ declare type PartitionByListProperty = {
9793
9954
  create_expressions: Expression | null;
9794
9955
  };
9795
9956
 
9957
+ /**
9958
+ * BigQuery PARTITION BY property in CREATE TABLE statements.
9959
+ */
9960
+ declare type PartitionByProperty = {
9961
+ expressions: Array<Expression>;
9962
+ };
9963
+
9796
9964
  /**
9797
9965
  * PartitionByRangeProperty
9798
9966
  */
@@ -10091,6 +10259,10 @@ export declare class Polyglot {
10091
10259
  * Get library version.
10092
10260
  */
10093
10261
  getVersion(): string;
10262
+ /**
10263
+ * Parse SQL and annotate the AST with inferred type information.
10264
+ */
10265
+ annotateTypes(sql: string, dialect?: Dialect, schema?: Schema): AnnotateTypesResult;
10094
10266
  }
10095
10267
 
10096
10268
  /**
@@ -12129,6 +12301,10 @@ declare type Subquery = {
12129
12301
  * Trailing comments after the closing paren
12130
12302
  */
12131
12303
  trailing_comments: Array<string>;
12304
+ /**
12305
+ * Inferred data type from type annotation
12306
+ */
12307
+ inferred_type?: DataType | null;
12132
12308
  };
12133
12309
 
12134
12310
  /**
@@ -13265,6 +13441,10 @@ declare type UnaryFunc = {
13265
13441
  * Original function name for round-trip preservation (e.g., CHAR_LENGTH vs LENGTH)
13266
13442
  */
13267
13443
  original_name?: string | null;
13444
+ /**
13445
+ * Inferred data type from type annotation
13446
+ */
13447
+ inferred_type?: DataType | null;
13268
13448
  };
13269
13449
 
13270
13450
  /**
@@ -13277,6 +13457,10 @@ declare type UnaryOp = {
13277
13457
  * The operand expression.
13278
13458
  */
13279
13459
  this: Expression;
13460
+ /**
13461
+ * Inferred data type from type annotation
13462
+ */
13463
+ inferred_type?: DataType | null;
13280
13464
  };
13281
13465
 
13282
13466
  /**
@@ -13801,6 +13985,10 @@ declare type VarArgFunc = {
13801
13985
  * Original function name for round-trip preservation (e.g., COALESCE vs IFNULL)
13802
13986
  */
13803
13987
  original_name?: string | null;
13988
+ /**
13989
+ * Inferred data type from type annotation
13990
+ */
13991
+ inferred_type?: DataType | null;
13804
13992
  };
13805
13993
 
13806
13994
  /**
@@ -14577,6 +14765,10 @@ declare type WindowFunction = {
14577
14765
  * Oracle KEEP clause: KEEP (DENSE_RANK FIRST|LAST ORDER BY ...)
14578
14766
  */
14579
14767
  keep?: Keep | null;
14768
+ /**
14769
+ * Inferred data type from type annotation
14770
+ */
14771
+ inferred_type?: DataType | null;
14580
14772
  };
14581
14773
 
14582
14774
  /**