bun-query-builder 0.2.21 → 0.2.23

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/bin/cli.js CHANGED
@@ -15800,6 +15800,18 @@ function createQueryBuilder(state) {
15800
15800
  }
15801
15801
  return this;
15802
15802
  },
15803
+ whereNull(column) {
15804
+ const keyword = SQL_PATTERNS.WHERE.test(sqlText) ? "AND" : "WHERE";
15805
+ sqlText = `${sqlText} ${keyword} ${quoteId(String(column))} IS NULL`;
15806
+ built = _sql.unsafe(sqlText, params);
15807
+ return this;
15808
+ },
15809
+ whereNotNull(column) {
15810
+ const keyword = SQL_PATTERNS.WHERE.test(sqlText) ? "AND" : "WHERE";
15811
+ sqlText = `${sqlText} ${keyword} ${quoteId(String(column))} IS NOT NULL`;
15812
+ built = _sql.unsafe(sqlText, params);
15813
+ return this;
15814
+ },
15803
15815
  returning(...cols) {
15804
15816
  const retText = `${sqlText} RETURNING ${cols.join(", ")}`;
15805
15817
  const q = params.length > 0 ? _sql.unsafe(retText, params) : _sql.unsafe(retText);
@@ -15927,6 +15939,16 @@ function createQueryBuilder(state) {
15927
15939
  built = applyWhere({}, ensureDelBuilt(), expr);
15928
15940
  return this;
15929
15941
  },
15942
+ whereNull(column) {
15943
+ sqlText += ` ${getWhereKeyword()} ${quoteId(String(column))} IS NULL`;
15944
+ built = null;
15945
+ return this;
15946
+ },
15947
+ whereNotNull(column) {
15948
+ sqlText += ` ${getWhereKeyword()} ${quoteId(String(column))} IS NOT NULL`;
15949
+ built = null;
15950
+ return this;
15951
+ },
15930
15952
  returning(...cols) {
15931
15953
  const retText = `${sqlText} RETURNING ${cols.join(", ")}`;
15932
15954
  const q = delParams.length > 0 ? _sql.unsafe(retText, delParams) : _sql.unsafe(retText);
@@ -17890,20 +17912,23 @@ async function buildPgTable(qb, table, enumLabels) {
17890
17912
  WHERE t.relname = $1 AND t.relkind = 'r'
17891
17913
  ORDER BY i.relname, ord`, [table]);
17892
17914
  const fkRows = await qb.unsafe(`SELECT kcu.column_name, ccu.table_name AS ref_table, ccu.column_name AS ref_column,
17893
- tc.constraint_name, rc.delete_rule, rc.update_rule,
17894
- (SELECT COUNT(*) FROM information_schema.key_column_usage count_kcu
17895
- WHERE count_kcu.constraint_name = tc.constraint_name
17896
- AND count_kcu.constraint_schema = tc.constraint_schema) AS constraint_column_count
17915
+ tc.constraint_name, rc.delete_rule, rc.update_rule
17897
17916
  FROM information_schema.table_constraints tc
17898
17917
  JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
17899
17918
  JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
17900
17919
  JOIN information_schema.referential_constraints rc ON rc.constraint_name = tc.constraint_name
17901
17920
  WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`, [table]);
17902
17921
  const fkByColumn = new Map;
17922
+ const fkColumnCounts = new Map;
17923
+ for (const fk of fkRows) {
17924
+ const constraintName = String(fk.constraint_name);
17925
+ fkColumnCounts.set(constraintName, (fkColumnCounts.get(constraintName) ?? 0) + 1);
17926
+ }
17903
17927
  for (const fk of fkRows) {
17904
17928
  const name = String(fk.column_name);
17905
17929
  const existing = fkByColumn.get(name);
17906
- const constraintNames = Number(fk.constraint_column_count) === 1 ? [...new Set([...existing?.constraintNames ?? [], String(fk.constraint_name)])] : existing?.constraintNames;
17930
+ const constraintName = String(fk.constraint_name);
17931
+ const constraintNames = fkColumnCounts.get(constraintName) === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17907
17932
  fkByColumn.set(name, existing ? { ...existing, constraintNames } : {
17908
17933
  table: String(fk.ref_table),
17909
17934
  column: String(fk.ref_column ?? "id"),
@@ -17948,21 +17973,22 @@ async function buildMysqlTable(qb, table) {
17948
17973
  WHERE table_name = ? AND table_schema = DATABASE()
17949
17974
  ORDER BY index_name, seq_in_index`, [table]);
17950
17975
  const fkRows = await qb.unsafe(`SELECT kcu.column_name, kcu.referenced_table_name AS ref_table, kcu.referenced_column_name AS ref_column,
17951
- kcu.constraint_name, rc.delete_rule, rc.update_rule,
17952
- (SELECT COUNT(*) FROM information_schema.key_column_usage count_kcu
17953
- WHERE count_kcu.constraint_name = kcu.constraint_name
17954
- AND count_kcu.constraint_schema = kcu.constraint_schema) AS constraint_column_count
17976
+ kcu.constraint_name, rc.delete_rule, rc.update_rule
17955
17977
  FROM information_schema.key_column_usage kcu
17956
17978
  JOIN information_schema.referential_constraints rc
17957
17979
  ON rc.constraint_name = kcu.constraint_name AND rc.constraint_schema = kcu.table_schema
17958
17980
  WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`, [table]);
17959
17981
  const fkByColumn = new Map;
17982
+ const fkColumnCounts = new Map;
17983
+ for (const fk of fkRows) {
17984
+ const constraintName = String(fk.constraint_name ?? fk.CONSTRAINT_NAME);
17985
+ fkColumnCounts.set(constraintName, (fkColumnCounts.get(constraintName) ?? 0) + 1);
17986
+ }
17960
17987
  for (const fk of fkRows) {
17961
17988
  const name = String(fk.column_name ?? fk.COLUMN_NAME);
17962
17989
  const existing = fkByColumn.get(name);
17963
- const columnCount = Number(fk.constraint_column_count ?? fk.CONSTRAINT_COLUMN_COUNT);
17964
17990
  const constraintName = String(fk.constraint_name ?? fk.CONSTRAINT_NAME);
17965
- const constraintNames = columnCount === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17991
+ const constraintNames = fkColumnCounts.get(constraintName) === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17966
17992
  fkByColumn.set(name, existing ? { ...existing, constraintNames } : {
17967
17993
  table: String(fk.ref_table ?? fk.REF_TABLE),
17968
17994
  column: String(fk.ref_column ?? fk.REF_COLUMN ?? "id"),
@@ -31630,7 +31656,7 @@ function getPrefix() {
31630
31656
  }
31631
31657
  var prefix = getPrefix();
31632
31658
  // package.json
31633
- var version2 = "0.2.21";
31659
+ var version2 = "0.2.23";
31634
31660
 
31635
31661
  // bin/cli.ts
31636
31662
  init_actions();
package/dist/client.d.ts CHANGED
@@ -238,6 +238,8 @@ export declare interface InsertQueryBuilder<DB extends DatabaseSchema<any>, TTab
238
238
  export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
239
239
  set: (values: Partial<{ [K in keyof DB[TTable]['columns']]: DB[TTable]['columns'][K] | SqlFragment }>) => UpdateQueryBuilder<DB, TTable>
240
240
  where: (expr: WhereExpression<DB[TTable]['columns']> | string | SqlFragment, op?: WhereOperator, value?: any) => UpdateQueryBuilder<DB, TTable>
241
+ whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
242
+ whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
241
243
  returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
242
244
  toSQL: () => string
243
245
  execute: () => Promise<number>
@@ -247,6 +249,8 @@ export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTab
247
249
  }
248
250
  export declare interface DeleteQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
249
251
  where: (expr: WhereExpression<DB[TTable]['columns']> | string, op?: WhereOperator, value?: any) => DeleteQueryBuilder<DB, TTable>
252
+ whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
253
+ whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
250
254
  returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
251
255
  toSQL: () => string
252
256
  execute: () => Promise<number>
package/dist/src/index.js CHANGED
@@ -15799,6 +15799,18 @@ function createQueryBuilder(state) {
15799
15799
  }
15800
15800
  return this;
15801
15801
  },
15802
+ whereNull(column) {
15803
+ const keyword = SQL_PATTERNS.WHERE.test(sqlText) ? "AND" : "WHERE";
15804
+ sqlText = `${sqlText} ${keyword} ${quoteId(String(column))} IS NULL`;
15805
+ built = _sql.unsafe(sqlText, params);
15806
+ return this;
15807
+ },
15808
+ whereNotNull(column) {
15809
+ const keyword = SQL_PATTERNS.WHERE.test(sqlText) ? "AND" : "WHERE";
15810
+ sqlText = `${sqlText} ${keyword} ${quoteId(String(column))} IS NOT NULL`;
15811
+ built = _sql.unsafe(sqlText, params);
15812
+ return this;
15813
+ },
15802
15814
  returning(...cols) {
15803
15815
  const retText = `${sqlText} RETURNING ${cols.join(", ")}`;
15804
15816
  const q = params.length > 0 ? _sql.unsafe(retText, params) : _sql.unsafe(retText);
@@ -15926,6 +15938,16 @@ function createQueryBuilder(state) {
15926
15938
  built = applyWhere({}, ensureDelBuilt(), expr);
15927
15939
  return this;
15928
15940
  },
15941
+ whereNull(column) {
15942
+ sqlText += ` ${getWhereKeyword()} ${quoteId(String(column))} IS NULL`;
15943
+ built = null;
15944
+ return this;
15945
+ },
15946
+ whereNotNull(column) {
15947
+ sqlText += ` ${getWhereKeyword()} ${quoteId(String(column))} IS NOT NULL`;
15948
+ built = null;
15949
+ return this;
15950
+ },
15929
15951
  returning(...cols) {
15930
15952
  const retText = `${sqlText} RETURNING ${cols.join(", ")}`;
15931
15953
  const q = delParams.length > 0 ? _sql.unsafe(retText, delParams) : _sql.unsafe(retText);
@@ -17889,20 +17911,23 @@ async function buildPgTable(qb, table, enumLabels) {
17889
17911
  WHERE t.relname = $1 AND t.relkind = 'r'
17890
17912
  ORDER BY i.relname, ord`, [table]);
17891
17913
  const fkRows = await qb.unsafe(`SELECT kcu.column_name, ccu.table_name AS ref_table, ccu.column_name AS ref_column,
17892
- tc.constraint_name, rc.delete_rule, rc.update_rule,
17893
- (SELECT COUNT(*) FROM information_schema.key_column_usage count_kcu
17894
- WHERE count_kcu.constraint_name = tc.constraint_name
17895
- AND count_kcu.constraint_schema = tc.constraint_schema) AS constraint_column_count
17914
+ tc.constraint_name, rc.delete_rule, rc.update_rule
17896
17915
  FROM information_schema.table_constraints tc
17897
17916
  JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
17898
17917
  JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
17899
17918
  JOIN information_schema.referential_constraints rc ON rc.constraint_name = tc.constraint_name
17900
17919
  WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`, [table]);
17901
17920
  const fkByColumn = new Map;
17921
+ const fkColumnCounts = new Map;
17922
+ for (const fk of fkRows) {
17923
+ const constraintName = String(fk.constraint_name);
17924
+ fkColumnCounts.set(constraintName, (fkColumnCounts.get(constraintName) ?? 0) + 1);
17925
+ }
17902
17926
  for (const fk of fkRows) {
17903
17927
  const name = String(fk.column_name);
17904
17928
  const existing = fkByColumn.get(name);
17905
- const constraintNames = Number(fk.constraint_column_count) === 1 ? [...new Set([...existing?.constraintNames ?? [], String(fk.constraint_name)])] : existing?.constraintNames;
17929
+ const constraintName = String(fk.constraint_name);
17930
+ const constraintNames = fkColumnCounts.get(constraintName) === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17906
17931
  fkByColumn.set(name, existing ? { ...existing, constraintNames } : {
17907
17932
  table: String(fk.ref_table),
17908
17933
  column: String(fk.ref_column ?? "id"),
@@ -17947,21 +17972,22 @@ async function buildMysqlTable(qb, table) {
17947
17972
  WHERE table_name = ? AND table_schema = DATABASE()
17948
17973
  ORDER BY index_name, seq_in_index`, [table]);
17949
17974
  const fkRows = await qb.unsafe(`SELECT kcu.column_name, kcu.referenced_table_name AS ref_table, kcu.referenced_column_name AS ref_column,
17950
- kcu.constraint_name, rc.delete_rule, rc.update_rule,
17951
- (SELECT COUNT(*) FROM information_schema.key_column_usage count_kcu
17952
- WHERE count_kcu.constraint_name = kcu.constraint_name
17953
- AND count_kcu.constraint_schema = kcu.constraint_schema) AS constraint_column_count
17975
+ kcu.constraint_name, rc.delete_rule, rc.update_rule
17954
17976
  FROM information_schema.key_column_usage kcu
17955
17977
  JOIN information_schema.referential_constraints rc
17956
17978
  ON rc.constraint_name = kcu.constraint_name AND rc.constraint_schema = kcu.table_schema
17957
17979
  WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`, [table]);
17958
17980
  const fkByColumn = new Map;
17981
+ const fkColumnCounts = new Map;
17982
+ for (const fk of fkRows) {
17983
+ const constraintName = String(fk.constraint_name ?? fk.CONSTRAINT_NAME);
17984
+ fkColumnCounts.set(constraintName, (fkColumnCounts.get(constraintName) ?? 0) + 1);
17985
+ }
17959
17986
  for (const fk of fkRows) {
17960
17987
  const name = String(fk.column_name ?? fk.COLUMN_NAME);
17961
17988
  const existing = fkByColumn.get(name);
17962
- const columnCount = Number(fk.constraint_column_count ?? fk.CONSTRAINT_COLUMN_COUNT);
17963
17989
  const constraintName = String(fk.constraint_name ?? fk.CONSTRAINT_NAME);
17964
- const constraintNames = columnCount === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17990
+ const constraintNames = fkColumnCounts.get(constraintName) === 1 ? [...new Set([...existing?.constraintNames ?? [], constraintName])] : existing?.constraintNames;
17965
17991
  fkByColumn.set(name, existing ? { ...existing, constraintNames } : {
17966
17992
  table: String(fk.ref_table ?? fk.REF_TABLE),
17967
17993
  column: String(fk.ref_column ?? fk.REF_COLUMN ?? "id"),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.2.21",
4
+ "version": "0.2.23",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",