{"version":3,"file":"expr.cjs","names":["isColumn"],"sources":["../../../../src/common/schema/sql/expr.ts"],"sourcesContent":["import type { Column } from './table'\nimport { isColumn } from './table'\n\nexport interface Expr {\n  readonly kind: 'expr'\n  readonly sql: string\n  readonly params: unknown[]\n  readonly refs: Column[]\n}\n\nfunction operand(v: any): Expr {\n  if (isColumn(v)) {\n    return {\n      kind: 'expr',\n      sql: `\"${v._table}\".\"${v._name}\"`,\n      params: [],\n      refs: [v],\n    }\n  }\n  if (v && v.kind === 'expr')\n    return v as Expr\n  return { kind: 'expr', sql: '?', params: [v], refs: [] }\n}\n\nfunction binop(op: string) {\n  return (a: Column | Expr | unknown, b: Column | Expr | unknown): Expr => {\n    const x = operand(a)\n    const y = operand(b)\n    return {\n      kind: 'expr',\n      sql: `${x.sql} ${op} ${y.sql}`,\n      params: [...x.params, ...y.params],\n      refs: [...x.refs, ...y.refs],\n    }\n  }\n}\n\nexport const eq = binop('=')\nexport const ne = binop('<>')\nexport const gt = binop('>')\nexport const gte = binop('>=')\nexport const lt = binop('<')\nexport const lte = binop('<=')\nexport const like = binop('LIKE')\n\nexport function and(...parts: (Expr | undefined | false | null)[]): Expr {\n  const list = parts.filter((p): p is Expr => !!p)\n  if (list.length === 0)\n    return { kind: 'expr', sql: '1=1', params: [], refs: [] }\n  if (list.length === 1)\n    return list[0]\n  return {\n    kind: 'expr',\n    sql: list.map(p => `(${p.sql})`).join(' AND '),\n    params: list.flatMap(p => p.params),\n    refs: list.flatMap(p => p.refs),\n  }\n}\n\nexport function or(...parts: (Expr | undefined | false | null)[]): Expr {\n  const list = parts.filter((p): p is Expr => !!p)\n  if (list.length === 0)\n    return { kind: 'expr', sql: '1=0', params: [], refs: [] }\n  if (list.length === 1)\n    return list[0]\n  return {\n    kind: 'expr',\n    sql: list.map(p => `(${p.sql})`).join(' OR '),\n    params: list.flatMap(p => p.params),\n    refs: list.flatMap(p => p.refs),\n  }\n}\n\nexport function not(e: Expr): Expr {\n  return { kind: 'expr', sql: `NOT (${e.sql})`, params: e.params, refs: e.refs }\n}\n\nexport function sqlIsNull(col: Column | Expr): Expr {\n  const x = operand(col)\n  return { kind: 'expr', sql: `${x.sql} IS NULL`, params: x.params, refs: x.refs }\n}\n\nexport function sqlIsNotNull(col: Column | Expr): Expr {\n  const x = operand(col)\n  return { kind: 'expr', sql: `${x.sql} IS NOT NULL`, params: x.params, refs: x.refs }\n}\n\nexport function inArray(col: Column | Expr, values: unknown[]): Expr {\n  const x = operand(col)\n  if (values.length === 0)\n    return { kind: 'expr', sql: '1=0', params: [], refs: x.refs }\n  const placeholders = values.map(() => '?').join(', ')\n  return {\n    kind: 'expr',\n    sql: `${x.sql} IN (${placeholders})`,\n    params: [...x.params, ...values],\n    refs: x.refs,\n  }\n}\n"],"mappings":"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"}