@sqb/builder 4.1.3 → 4.2.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.
@@ -4,6 +4,7 @@ exports.SerializeContext = void 0;
4
4
  const enums_1 = require("./enums");
5
5
  const extensions_1 = require("./extensions");
6
6
  const Serializable_1 = require("./Serializable");
7
+ const typeguards_1 = require("./typeguards");
7
8
  class SerializeContext {
8
9
  constructor(opts) {
9
10
  this.reservedWords = [
@@ -52,9 +53,9 @@ class SerializeContext {
52
53
  return this.serialize(enums_1.SerializationType.ARRAY, vv, () => '(' + v.join(',')) + ')';
53
54
  }
54
55
  if (typeof v === 'object') {
55
- if (v.isSerializable) {
56
+ if ((0, typeguards_1.isSerializable)(v)) {
56
57
  const s = v._serialize(this);
57
- return s ? (v.isQuery ? '(' + s + ')' : s) :
58
+ return s ? ((0, typeguards_1.isQuery)(v) ? '(' + s + ')' : s) :
58
59
  /* istanbul ignore next */
59
60
  'null';
60
61
  }
package/dist/enums.d.ts CHANGED
@@ -29,6 +29,7 @@ export declare enum SerializationType {
29
29
  JOIN_CONDITIONS = "join_conditions",
30
30
  RAW = "raw",
31
31
  CASE_STATEMENT = "case_expression",
32
+ COALESCE_STATEMENT = "coalesce_expression",
32
33
  COUNT_STATEMENT = "count_expression",
33
34
  CONDITIONS_BLOCK = "conditions_block",
34
35
  COMPARISON_EXPRESSION = "comparison_expression",
package/dist/enums.js CHANGED
@@ -34,6 +34,7 @@ var SerializationType;
34
34
  SerializationType["JOIN_CONDITIONS"] = "join_conditions";
35
35
  SerializationType["RAW"] = "raw";
36
36
  SerializationType["CASE_STATEMENT"] = "case_expression";
37
+ SerializationType["COALESCE_STATEMENT"] = "coalesce_expression";
37
38
  SerializationType["COUNT_STATEMENT"] = "count_expression";
38
39
  SerializationType["CONDITIONS_BLOCK"] = "conditions_block";
39
40
  SerializationType["COMPARISON_EXPRESSION"] = "comparison_expression";
@@ -0,0 +1,22 @@
1
+ import { SerializationType } from '../enums';
2
+ import { Serializable } from '../Serializable';
3
+ import { SerializeContext } from '../SerializeContext';
4
+ export declare class CoalesceStatement extends Serializable {
5
+ _expressions: any[];
6
+ _alias?: string;
7
+ constructor(...expressions: any[]);
8
+ get _type(): SerializationType;
9
+ /**
10
+ * Sets alias to case expression.
11
+ */
12
+ as(alias: string): this;
13
+ /**
14
+ * Performs serialization
15
+ *
16
+ * @param {Object} ctx
17
+ * @return {string}
18
+ * @override
19
+ */
20
+ _serialize(ctx: SerializeContext): string;
21
+ protected __defaultSerialize(ctx: SerializeContext, o: any): string;
22
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CoalesceStatement = void 0;
4
+ const enums_1 = require("../enums");
5
+ const Serializable_1 = require("../Serializable");
6
+ class CoalesceStatement extends Serializable_1.Serializable {
7
+ constructor(...expressions) {
8
+ super();
9
+ this._expressions = expressions;
10
+ }
11
+ get _type() {
12
+ return enums_1.SerializationType.COALESCE_STATEMENT;
13
+ }
14
+ /**
15
+ * Sets alias to case expression.
16
+ */
17
+ as(alias) {
18
+ this._alias = alias;
19
+ return this;
20
+ }
21
+ /**
22
+ * Performs serialization
23
+ *
24
+ * @param {Object} ctx
25
+ * @return {string}
26
+ * @override
27
+ */
28
+ _serialize(ctx) {
29
+ if (!this._expressions.length)
30
+ return '';
31
+ const q = {
32
+ expressions: [],
33
+ };
34
+ for (const x of this._expressions) {
35
+ q.expressions.push(ctx.anyToSQL(x));
36
+ }
37
+ return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
38
+ }
39
+ __defaultSerialize(ctx, o) {
40
+ return 'coalesce(' + o.expressions.join(', ') + ')' +
41
+ (this._alias ? ' ' + this._alias : '');
42
+ }
43
+ }
44
+ exports.CoalesceStatement = CoalesceStatement;
@@ -5,6 +5,7 @@ import { SelectQuery } from './query/SelectQuery';
5
5
  import { UpdateQuery } from './query/UpdateQuery';
6
6
  import { Serializable } from './Serializable';
7
7
  import { CaseStatement } from './sql-objects/CaseStatement';
8
+ import { CoalesceStatement } from './sql-objects/CoalesceStatement';
8
9
  import { CountStatement } from './sql-objects/CountStatement';
9
10
  import { FieldExpression } from './sql-objects/FieldExpression';
10
11
  import { JoinStatement } from './sql-objects/JoinStatement';
@@ -24,6 +25,7 @@ export declare function RightOuterJoin(table: string | SelectQuery | RawStatemen
24
25
  export declare function OuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
25
26
  export declare function FullOuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
26
27
  export declare function Case(): CaseStatement;
28
+ export declare function Coalesce(...expressions: any[]): CoalesceStatement;
27
29
  export declare function Count(): CountStatement;
28
30
  export declare function Param(name: string, dataType?: DataType, isArray?: boolean): ParamExpression;
29
31
  export declare function Param(args: {
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Field = exports.Param = exports.Count = exports.Case = exports.FullOuterJoin = exports.OuterJoin = exports.RightOuterJoin = exports.RightJoin = exports.LeftOuterJoin = exports.LeftJoin = exports.InnerJoin = exports.Join = exports.Delete = exports.Update = exports.Insert = exports.Select = exports.Raw = void 0;
3
+ exports.Field = exports.Param = exports.Count = exports.Coalesce = exports.Case = exports.FullOuterJoin = exports.OuterJoin = exports.RightOuterJoin = exports.RightJoin = exports.LeftOuterJoin = exports.LeftJoin = exports.InnerJoin = exports.Join = exports.Delete = exports.Update = exports.Insert = exports.Select = exports.Raw = void 0;
4
4
  const enums_1 = require("./enums");
5
5
  const DeleteQuery_1 = require("./query/DeleteQuery");
6
6
  const InsertQuery_1 = require("./query/InsertQuery");
7
7
  const SelectQuery_1 = require("./query/SelectQuery");
8
8
  const UpdateQuery_1 = require("./query/UpdateQuery");
9
9
  const CaseStatement_1 = require("./sql-objects/CaseStatement");
10
+ const CoalesceStatement_1 = require("./sql-objects/CoalesceStatement");
10
11
  const CountStatement_1 = require("./sql-objects/CountStatement");
11
12
  const FieldExpression_1 = require("./sql-objects/FieldExpression");
12
13
  const JoinStatement_1 = require("./sql-objects/JoinStatement");
@@ -68,6 +69,10 @@ function Case() {
68
69
  return new CaseStatement_1.CaseStatement();
69
70
  }
70
71
  exports.Case = Case;
72
+ function Coalesce(...expressions) {
73
+ return new CoalesceStatement_1.CoalesceStatement(...expressions);
74
+ }
75
+ exports.Coalesce = Coalesce;
71
76
  function Count() {
72
77
  return new CountStatement_1.CountStatement();
73
78
  }
@@ -16,6 +16,7 @@ import type { RawStatement } from './sql-objects/RawStatement';
16
16
  import type { ReturningColumn } from './sql-objects/ReturningColumn';
17
17
  import type { TableName } from './sql-objects/TableName';
18
18
  export declare function isSerializable(value: any): value is Serializable;
19
+ export declare function isQuery(value: any): value is Serializable;
19
20
  export declare function isRawStatement(value: any): value is RawStatement;
20
21
  export declare function isSelectQuery(value: any): value is SelectQuery;
21
22
  export declare function isInsertQuery(value: any): value is InsertQuery;
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTableName = exports.isReturningColumn = exports.isGroupColumn = exports.isOrderColumn = exports.isSelectColumn = exports.isCompOperator = exports.isLogicalOperator = exports.isParamExpression = exports.isCountStatement = exports.isCaseStatement = exports.isJoinStatement = exports.isDeleteQuery = exports.isIUpdateQuery = exports.isInsertQuery = exports.isSelectQuery = exports.isRawStatement = exports.isSerializable = void 0;
3
+ exports.isTableName = exports.isReturningColumn = exports.isGroupColumn = exports.isOrderColumn = exports.isSelectColumn = exports.isCompOperator = exports.isLogicalOperator = exports.isParamExpression = exports.isCountStatement = exports.isCaseStatement = exports.isJoinStatement = exports.isDeleteQuery = exports.isIUpdateQuery = exports.isInsertQuery = exports.isSelectQuery = exports.isRawStatement = exports.isQuery = exports.isSerializable = void 0;
4
4
  const enums_1 = require("./enums");
5
+ const Query_1 = require("./query/Query");
5
6
  const Serializable_1 = require("./Serializable");
6
7
  function isSerializable(value) {
7
8
  return value instanceof Serializable_1.Serializable;
8
9
  }
9
10
  exports.isSerializable = isSerializable;
11
+ function isQuery(value) {
12
+ return value instanceof Query_1.Query;
13
+ }
14
+ exports.isQuery = isQuery;
10
15
  function isRawStatement(value) {
11
16
  return isSerializable(value) && value._type === enums_1.SerializationType.RAW;
12
17
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sqb/builder",
3
3
  "description": "Extensible multi-dialect SQL query builder written with TypeScript",
4
- "version": "4.1.3",
4
+ "version": "4.2.0",
5
5
  "author": "Panates",
6
6
  "private": false,
7
7
  "contributors": [
@@ -10,7 +10,8 @@
10
10
  "license": "Apache-2.0",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/sqbjs/sqb.git"
13
+ "url": "https://github.com/sqbjs/sqb.git",
14
+ "directory": "packages/builder"
14
15
  },
15
16
  "keywords": [
16
17
  "javascript",