objection 3.9.0 → 4.0.0-rc.1

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 (248) hide show
  1. package/lib/dbErrors/LICENSE +21 -0
  2. package/lib/dbErrors/errorCodes/mssql.js +19 -0
  3. package/lib/dbErrors/errorCodes/mysql.js +805 -0
  4. package/lib/dbErrors/errorCodes/postgres.js +241 -0
  5. package/lib/dbErrors/errors/CheckViolationError.js +10 -0
  6. package/lib/dbErrors/errors/ConstraintViolationError.js +3 -0
  7. package/lib/dbErrors/errors/DBError.js +9 -0
  8. package/lib/dbErrors/errors/DataError.js +3 -0
  9. package/lib/dbErrors/errors/ForeignKeyViolationError.js +11 -0
  10. package/lib/dbErrors/errors/NotNullViolationError.js +12 -0
  11. package/lib/dbErrors/errors/UniqueViolationError.js +12 -0
  12. package/lib/dbErrors/index.js +59 -0
  13. package/lib/dbErrors/parsers/mssql/DBError/CheckViolationError/parser.js +28 -0
  14. package/lib/dbErrors/parsers/mssql/DBError/DataError/parser.js +25 -0
  15. package/lib/dbErrors/parsers/mssql/DBError/ForeignKeyViolationError/parser.js +39 -0
  16. package/lib/dbErrors/parsers/mssql/DBError/NotNullViolationError/parser.js +30 -0
  17. package/lib/dbErrors/parsers/mssql/DBError/UniqueViolationError/parser.js +53 -0
  18. package/lib/dbErrors/parsers/mssql/DBError/parser.js +51 -0
  19. package/lib/dbErrors/parsers/mssql/DBError/util.js +16 -0
  20. package/lib/dbErrors/parsers/mysql/DBError/ConstraintViolationError/ForeignKeyViolationError/parser.js +43 -0
  21. package/lib/dbErrors/parsers/mysql/DBError/ConstraintViolationError/NotNullViolationError/parser.js +29 -0
  22. package/lib/dbErrors/parsers/mysql/DBError/ConstraintViolationError/UniqueViolationError/parser.js +27 -0
  23. package/lib/dbErrors/parsers/mysql/DBError/ConstraintViolationError/parser.js +23 -0
  24. package/lib/dbErrors/parsers/mysql/DBError/DataError/parser.js +24 -0
  25. package/lib/dbErrors/parsers/mysql/DBError/parser.js +28 -0
  26. package/lib/dbErrors/parsers/postgres/DBError/ConstraintViolationError/CheckViolationError/parser.js +18 -0
  27. package/lib/dbErrors/parsers/postgres/DBError/ConstraintViolationError/ForeignKeyViolationError/parser.js +18 -0
  28. package/lib/dbErrors/parsers/postgres/DBError/ConstraintViolationError/NotNullViolationError/parser.js +18 -0
  29. package/lib/dbErrors/parsers/postgres/DBError/ConstraintViolationError/UniqueViolationError/parser.js +40 -0
  30. package/lib/dbErrors/parsers/postgres/DBError/ConstraintViolationError/parser.js +25 -0
  31. package/lib/dbErrors/parsers/postgres/DBError/DataError/parser.js +16 -0
  32. package/lib/dbErrors/parsers/postgres/DBError/parser.js +27 -0
  33. package/lib/dbErrors/parsers/sqlite/DBError/ConstraintViolationError/CheckViolationError/parser.js +20 -0
  34. package/lib/dbErrors/parsers/sqlite/DBError/ConstraintViolationError/ForeignKeyViolationError/parser.js +20 -0
  35. package/lib/dbErrors/parsers/sqlite/DBError/ConstraintViolationError/NotNullViolationError/parser.js +27 -0
  36. package/lib/dbErrors/parsers/sqlite/DBError/ConstraintViolationError/UniqueViolationError/parser.js +28 -0
  37. package/lib/dbErrors/parsers/sqlite/DBError/ConstraintViolationError/parser.js +24 -0
  38. package/lib/dbErrors/parsers/sqlite/DBError/parser.js +23 -0
  39. package/lib/dbErrors/utils/sqlState.js +3 -0
  40. package/lib/initialize.js +1 -7
  41. package/lib/model/AjvValidator.js +51 -117
  42. package/lib/model/Model.js +84 -59
  43. package/lib/model/ModifierNotFoundError.js +1 -7
  44. package/lib/model/NotFoundError.js +1 -7
  45. package/lib/model/RelationDoesNotExistError.js +1 -7
  46. package/lib/model/ValidationError.js +3 -10
  47. package/lib/model/Validator.js +1 -7
  48. package/lib/model/getModel.js +7 -6
  49. package/lib/model/inheritModel.js +1 -7
  50. package/lib/model/modelBindKnex.js +4 -10
  51. package/lib/model/modelClone.js +5 -11
  52. package/lib/model/modelColPropMap.js +3 -10
  53. package/lib/model/modelId.js +3 -10
  54. package/lib/model/modelJsonAttributes.js +35 -16
  55. package/lib/model/modelParseRelations.js +2 -8
  56. package/lib/model/modelQueryProps.js +43 -27
  57. package/lib/model/modelSet.js +89 -41
  58. package/lib/model/modelTableMetadata.js +4 -11
  59. package/lib/model/modelToJson.js +8 -23
  60. package/lib/model/modelUtils.js +14 -13
  61. package/lib/model/modelValidate.js +3 -9
  62. package/lib/model/modelValues.js +5 -14
  63. package/lib/model/modelVisitor.js +1 -7
  64. package/lib/objection.js +33 -71
  65. package/lib/queryBuilder/FunctionBuilder.js +4 -11
  66. package/lib/queryBuilder/InternalOptions.js +4 -9
  67. package/lib/queryBuilder/JoinBuilder.js +5 -8
  68. package/lib/queryBuilder/QueryBuilder.js +126 -95
  69. package/lib/queryBuilder/QueryBuilderBase.js +41 -123
  70. package/lib/queryBuilder/QueryBuilderContext.js +2 -8
  71. package/lib/queryBuilder/QueryBuilderContextBase.js +2 -8
  72. package/lib/queryBuilder/QueryBuilderOperationSupport.js +7 -21
  73. package/lib/queryBuilder/QueryBuilderUserContext.js +1 -7
  74. package/lib/queryBuilder/RawBuilder.js +5 -13
  75. package/lib/queryBuilder/ReferenceBuilder.js +20 -48
  76. package/lib/queryBuilder/RelationExpression.js +18 -16
  77. package/lib/queryBuilder/StaticHookArguments.js +74 -16
  78. package/lib/queryBuilder/ValueBuilder.js +11 -13
  79. package/lib/queryBuilder/getJoinBuilder.js +10 -0
  80. package/lib/queryBuilder/graph/GraphLoader.js +304 -0
  81. package/lib/queryBuilder/graph/GraphNode.js +235 -0
  82. package/lib/queryBuilder/graph/GraphOptions.js +55 -248
  83. package/lib/queryBuilder/graph/GraphPlan.js +395 -0
  84. package/lib/queryBuilder/graph/GraphUpsert.js +466 -410
  85. package/lib/queryBuilder/graph/GraphWriter.js +1263 -0
  86. package/lib/queryBuilder/join/JoinResultColumn.js +1 -7
  87. package/lib/queryBuilder/join/JoinResultParser.js +6 -11
  88. package/lib/queryBuilder/join/RelationJoiner.js +66 -84
  89. package/lib/queryBuilder/join/TableNode.js +2 -8
  90. package/lib/queryBuilder/join/TableTree.js +3 -9
  91. package/lib/queryBuilder/join/utils.js +5 -15
  92. package/lib/queryBuilder/jsonDialects/JsonDialect.js +51 -0
  93. package/lib/queryBuilder/jsonDialects/MySqlJsonDialect.js +81 -0
  94. package/lib/queryBuilder/jsonDialects/PostgresJsonDialect.js +45 -0
  95. package/lib/queryBuilder/jsonDialects/SqliteJsonDialect.js +67 -0
  96. package/lib/queryBuilder/jsonDialects/index.js +44 -0
  97. package/lib/queryBuilder/operations/DelegateOperation.js +2 -8
  98. package/lib/queryBuilder/operations/DeleteOperation.js +13 -35
  99. package/lib/queryBuilder/operations/FindByIdOperation.js +7 -12
  100. package/lib/queryBuilder/operations/FindByIdsOperation.js +4 -8
  101. package/lib/queryBuilder/operations/FindOperation.js +14 -34
  102. package/lib/queryBuilder/operations/FirstOperation.js +6 -10
  103. package/lib/queryBuilder/operations/FromOperation.js +3 -9
  104. package/lib/queryBuilder/operations/InsertAndFetchOperation.js +13 -12
  105. package/lib/queryBuilder/operations/InsertGraphAndFetchOperation.js +4 -10
  106. package/lib/queryBuilder/operations/InsertGraphOperation.js +7 -18
  107. package/lib/queryBuilder/operations/InsertOperation.js +118 -43
  108. package/lib/queryBuilder/operations/InstanceDeleteOperation.js +5 -12
  109. package/lib/queryBuilder/operations/InstanceFindOperation.js +4 -11
  110. package/lib/queryBuilder/operations/InstanceInsertOperation.js +2 -8
  111. package/lib/queryBuilder/operations/InstanceUpdateOperation.js +7 -14
  112. package/lib/queryBuilder/operations/JoinRelatedOperation.js +5 -11
  113. package/lib/queryBuilder/operations/KnexOperation.js +2 -8
  114. package/lib/queryBuilder/operations/LimitPerParentOperation.js +7 -69
  115. package/lib/queryBuilder/operations/MergeOperation.js +5 -11
  116. package/lib/queryBuilder/operations/NoneOperation.js +2 -8
  117. package/lib/queryBuilder/operations/ObjectionToKnexConvertingOperation.js +20 -49
  118. package/lib/queryBuilder/operations/OnBuildKnexOperation.js +2 -8
  119. package/lib/queryBuilder/operations/OnBuildOperation.js +2 -8
  120. package/lib/queryBuilder/operations/OnErrorOperation.js +2 -8
  121. package/lib/queryBuilder/operations/QueryBuilderOperation.js +1 -7
  122. package/lib/queryBuilder/operations/RangeOperation.js +11 -26
  123. package/lib/queryBuilder/operations/RelateOperation.js +2 -8
  124. package/lib/queryBuilder/operations/ReturningOperation.js +3 -9
  125. package/lib/queryBuilder/operations/RunAfterOperation.js +2 -12
  126. package/lib/queryBuilder/operations/RunBeforeOperation.js +2 -8
  127. package/lib/queryBuilder/operations/UnrelateOperation.js +2 -8
  128. package/lib/queryBuilder/operations/UpdateAndFetchOperation.js +14 -17
  129. package/lib/queryBuilder/operations/UpdateOperation.js +39 -125
  130. package/lib/queryBuilder/operations/UpsertGraphAndFetchOperation.js +8 -11
  131. package/lib/queryBuilder/operations/UpsertGraphOperation.js +6 -12
  132. package/lib/queryBuilder/operations/WhereCompositeOperation.js +3 -9
  133. package/lib/queryBuilder/operations/WhereGroupOperation.js +2 -8
  134. package/lib/queryBuilder/operations/eager/EagerOperation.js +3 -9
  135. package/lib/queryBuilder/operations/eager/JoinEagerOperation.js +72 -10
  136. package/lib/queryBuilder/operations/eager/NaiveEagerOperation.js +2 -8
  137. package/lib/queryBuilder/operations/eager/WhereInEagerOperation.js +23 -44
  138. package/lib/queryBuilder/operations/fieldExpressions.js +122 -0
  139. package/lib/queryBuilder/operations/jsonApi/WhereJsonHasOperation.js +20 -0
  140. package/lib/queryBuilder/operations/jsonApi/WhereJsonOperation.js +44 -0
  141. package/lib/queryBuilder/operations/jsonApi/WhereJsonTypeOperation.js +14 -0
  142. package/lib/queryBuilder/operations/select/SelectOperation.js +11 -21
  143. package/lib/queryBuilder/operations/select/Selection.js +19 -17
  144. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeMsSqlOperation.js +4 -10
  145. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeOperation.js +4 -10
  146. package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeSqliteOperation.js +4 -10
  147. package/lib/queryBuilder/operations/windowOrder.js +56 -0
  148. package/lib/queryBuilder/parsers/jsonFieldExpressionParser.js +3 -7
  149. package/lib/queryBuilder/parsers/relationExpressionParser.js +42 -43
  150. package/lib/queryBuilder/parsers/relationExpressionParser.pegjs +39 -36
  151. package/lib/queryBuilder/transformations/CompositeQueryTransformation.js +2 -8
  152. package/lib/queryBuilder/transformations/QueryTransformation.js +1 -7
  153. package/lib/queryBuilder/transformations/WrapMysqlModifySubqueryTransformation.js +3 -9
  154. package/lib/queryBuilder/transformations/index.js +3 -11
  155. package/lib/queryBuilder/whereGroups.js +9 -24
  156. package/lib/queryBuilder/withoutOrder.js +4 -11
  157. package/lib/relations/Relation.js +47 -28
  158. package/lib/relations/RelationDeleteOperation.js +4 -14
  159. package/lib/relations/RelationFindOperation.js +119 -90
  160. package/lib/relations/RelationInsertOperation.js +2 -8
  161. package/lib/relations/RelationOwner.js +5 -11
  162. package/lib/relations/RelationProperty.js +4 -10
  163. package/lib/relations/RelationUpdateOperation.js +4 -14
  164. package/lib/relations/RelationWriteResultOperation.js +15 -0
  165. package/lib/relations/belongsToMany/BelongsToManyDeleteOperation.js +23 -0
  166. package/lib/relations/belongsToMany/BelongsToManyFindOperation.js +35 -0
  167. package/lib/relations/belongsToMany/BelongsToManyInsertOperation.js +28 -0
  168. package/lib/relations/belongsToMany/BelongsToManyRelateOperation.js +16 -0
  169. package/lib/relations/belongsToMany/BelongsToManyRelation.js +276 -0
  170. package/lib/relations/belongsToMany/BelongsToManyUnrelateOperation.js +11 -0
  171. package/lib/relations/belongsToOne/BelongsToOneDeleteOperation.js +2 -8
  172. package/lib/relations/belongsToOne/BelongsToOneInsertOperation.js +6 -11
  173. package/lib/relations/belongsToOne/BelongsToOneRelateOperation.js +3 -9
  174. package/lib/relations/belongsToOne/BelongsToOneRelation.js +8 -19
  175. package/lib/relations/belongsToOne/BelongsToOneUnrelateOperation.js +53 -27
  176. package/lib/relations/hasMany/HasManyInsertOperation.js +8 -9
  177. package/lib/relations/hasMany/HasManyRelateOperation.js +5 -11
  178. package/lib/relations/hasMany/HasManyRelation.js +9 -11
  179. package/lib/relations/hasMany/HasManyUnrelateOperation.js +3 -9
  180. package/lib/relations/hasOne/HasOneRelation.js +2 -8
  181. package/lib/relations/hasOneThrough/HasOneThroughRelation.js +2 -8
  182. package/lib/relations/manyToMany/ManyToManyModifyMixin.js +10 -15
  183. package/lib/relations/manyToMany/ManyToManyMySqlModifyMixin.js +2 -8
  184. package/lib/relations/manyToMany/ManyToManyRelation.js +82 -50
  185. package/lib/relations/manyToMany/ManyToManySqliteModifyMixin.js +2 -8
  186. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperation.js +5 -9
  187. package/lib/relations/manyToMany/delete/ManyToManyDeleteOperationBase.js +2 -8
  188. package/lib/relations/manyToMany/delete/ManyToManyDeleteSqliteOperation.js +3 -9
  189. package/lib/relations/manyToMany/find/ManyToManyFindOperation.js +20 -59
  190. package/lib/relations/manyToMany/insert/ManyToManyInsertOperation.js +6 -11
  191. package/lib/relations/manyToMany/relate/ManyToManyRelateOperation.js +4 -10
  192. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateMySqlOperation.js +3 -9
  193. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperation.js +5 -9
  194. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperationBase.js +3 -9
  195. package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateSqliteOperation.js +3 -9
  196. package/lib/relations/manyToMany/update/ManyToManyUpdateMySqlOperation.js +3 -9
  197. package/lib/relations/manyToMany/update/ManyToManyUpdateOperation.js +5 -9
  198. package/lib/relations/manyToMany/update/ManyToManyUpdateOperationBase.js +79 -64
  199. package/lib/relations/manyToMany/update/ManyToManyUpdateSqliteOperation.js +3 -9
  200. package/lib/transaction.js +3 -9
  201. package/lib/utils/assert.js +3 -11
  202. package/lib/utils/buildUtils.js +2 -8
  203. package/lib/utils/classUtils.js +1 -7
  204. package/lib/utils/createModifier.js +2 -8
  205. package/lib/utils/identifierMapping.js +23 -27
  206. package/lib/utils/internalPropUtils.js +1 -7
  207. package/lib/utils/knexUtils.js +84 -40
  208. package/lib/utils/mixin.js +3 -10
  209. package/lib/utils/normalizeIds.js +2 -8
  210. package/lib/utils/objectUtils.js +41 -60
  211. package/lib/utils/parseFieldExpression.js +29 -14
  212. package/lib/utils/promiseUtils/after.js +2 -8
  213. package/lib/utils/promiseUtils/afterReturn.js +2 -8
  214. package/lib/utils/promiseUtils/index.js +7 -16
  215. package/lib/utils/promiseUtils/isPromise.js +2 -8
  216. package/lib/utils/promiseUtils/map.js +25 -14
  217. package/lib/utils/promiseUtils/mapAfterAllReturn.js +2 -8
  218. package/lib/utils/promiseUtils/try.js +2 -8
  219. package/lib/utils/resolveModel.js +10 -17
  220. package/lib/utils/tmpColumnUtils.js +2 -9
  221. package/lib/utils/warnings.js +2 -14
  222. package/package.json +25 -17
  223. package/typings/objection/index.d.ts +3217 -2179
  224. package/lib/.eslintrc.json +0 -8
  225. package/lib/model/graph/ModelGraph.js +0 -80
  226. package/lib/model/graph/ModelGraphBuilder.js +0 -241
  227. package/lib/model/graph/ModelGraphEdge.js +0 -52
  228. package/lib/model/graph/ModelGraphNode.js +0 -253
  229. package/lib/queryBuilder/graph/GraphAction.js +0 -69
  230. package/lib/queryBuilder/graph/GraphData.js +0 -53
  231. package/lib/queryBuilder/graph/GraphFetcher.js +0 -199
  232. package/lib/queryBuilder/graph/GraphNodeDbExistence.js +0 -184
  233. package/lib/queryBuilder/graph/GraphOperation.js +0 -27
  234. package/lib/queryBuilder/graph/delete/GraphDelete.js +0 -73
  235. package/lib/queryBuilder/graph/delete/GraphDeleteAction.js +0 -88
  236. package/lib/queryBuilder/graph/insert/DeferredRelationGraphInsertAction.js +0 -57
  237. package/lib/queryBuilder/graph/insert/GraphInsert.js +0 -257
  238. package/lib/queryBuilder/graph/insert/GraphInsertAction.js +0 -238
  239. package/lib/queryBuilder/graph/insert/JoinRowGraphInsertAction.js +0 -92
  240. package/lib/queryBuilder/graph/patch/GraphPatch.js +0 -20
  241. package/lib/queryBuilder/graph/patch/GraphPatchAction.js +0 -277
  242. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsert.js +0 -31
  243. package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsertAction.js +0 -126
  244. package/lib/queryBuilder/operations/jsonApi/WhereJsonHasPostgresOperation.js +0 -30
  245. package/lib/queryBuilder/operations/jsonApi/WhereJsonNotObjectPostgresOperation.js +0 -37
  246. package/lib/queryBuilder/operations/jsonApi/WhereJsonPostgresOperation.js +0 -62
  247. package/lib/queryBuilder/operations/jsonApi/postgresJsonApi.js +0 -192
  248. package/lib/utils/wrapDbError.js +0 -50
@@ -1,32 +1,20 @@
1
- 'use strict';
2
-
3
- const { QueryBuilderOperationSupport } = require('./QueryBuilderOperationSupport');
4
- const { isSqlite, isMsSql } = require('../utils/knexUtils');
5
-
6
- const { KnexOperation } = require('./operations/KnexOperation');
7
- const { MergeOperation } = require('./operations/MergeOperation');
8
- const { SelectOperation } = require('./operations/select/SelectOperation');
9
- const { ReturningOperation } = require('./operations/ReturningOperation');
10
- const { WhereCompositeOperation } = require('./operations/WhereCompositeOperation');
11
- const { WhereJsonPostgresOperation } = require('./operations/jsonApi/WhereJsonPostgresOperation');
12
-
13
- const {
14
- WhereInCompositeOperation,
15
- } = require('./operations/whereInComposite/WhereInCompositeOperation');
16
- const {
17
- WhereInCompositeSqliteOperation,
18
- } = require('./operations/whereInComposite/WhereInCompositeSqliteOperation');
19
- const {
20
- WhereInCompositeMsSqlOperation,
21
- } = require('./operations/whereInComposite/WhereInCompositeMsSqlOperation');
22
- const {
23
- WhereJsonHasPostgresOperation,
24
- } = require('./operations/jsonApi/WhereJsonHasPostgresOperation');
25
- const {
26
- WhereJsonNotObjectPostgresOperation,
27
- } = require('./operations/jsonApi/WhereJsonNotObjectPostgresOperation');
28
-
29
- class QueryBuilderBase extends QueryBuilderOperationSupport {
1
+ import { QueryBuilderOperationSupport } from './QueryBuilderOperationSupport.js';
2
+ import { isSqlite, isMsSql } from '../utils/knexUtils.js';
3
+
4
+ import { KnexOperation } from './operations/KnexOperation.js';
5
+ import { MergeOperation } from './operations/MergeOperation.js';
6
+ import { SelectOperation } from './operations/select/SelectOperation.js';
7
+ import { ReturningOperation } from './operations/ReturningOperation.js';
8
+ import { WhereCompositeOperation } from './operations/WhereCompositeOperation.js';
9
+ import { WhereJsonOperation } from './operations/jsonApi/WhereJsonOperation.js';
10
+
11
+ import { WhereInCompositeOperation } from './operations/whereInComposite/WhereInCompositeOperation.js';
12
+ import { WhereInCompositeSqliteOperation } from './operations/whereInComposite/WhereInCompositeSqliteOperation.js';
13
+ import { WhereInCompositeMsSqlOperation } from './operations/whereInComposite/WhereInCompositeMsSqlOperation.js';
14
+ import { WhereJsonHasOperation } from './operations/jsonApi/WhereJsonHasOperation.js';
15
+ import { WhereJsonTypeOperation } from './operations/jsonApi/WhereJsonTypeOperation.js';
16
+
17
+ export class QueryBuilderBase extends QueryBuilderOperationSupport {
30
18
  modify(...args) {
31
19
  const func = args[0];
32
20
 
@@ -613,19 +601,8 @@ class QueryBuilderBase extends QueryBuilderOperationSupport {
613
601
  return this.addOperation(new KnexOperation('andWhereJsonPath'), args);
614
602
  }
615
603
 
616
- // whereJson(Not)SupersetOf / whereJson(Not)SubsetOf are now supported by knex >= 1.0, but for now
617
- // objection handles them differently and only for postgres.
618
- // Changing them to utilize knex methods directly may require a major version bump and upgrade guide.
619
- // On MySQL, the simple `(column, object | array)` form is passed on to knex (ditojs#113).
620
604
  whereJsonSupersetOf(...args) {
621
- return this.addOperation(
622
- new WhereJsonPostgresOperation('whereJsonSupersetOf', {
623
- operator: '@>',
624
- bool: 'and',
625
- knexMethod: 'whereJsonSupersetOf',
626
- }),
627
- args,
628
- );
605
+ return this.addOperation(new WhereJsonOperation('whereJsonSupersetOf', { bool: 'and' }), args);
629
606
  }
630
607
 
631
608
  andWhereJsonSupersetOf(...args) {
@@ -633,24 +610,12 @@ class QueryBuilderBase extends QueryBuilderOperationSupport {
633
610
  }
634
611
 
635
612
  orWhereJsonSupersetOf(...args) {
636
- return this.addOperation(
637
- new WhereJsonPostgresOperation('orWhereJsonSupersetOf', {
638
- operator: '@>',
639
- bool: 'or',
640
- knexMethod: 'whereJsonSupersetOf',
641
- }),
642
- args,
643
- );
613
+ return this.addOperation(new WhereJsonOperation('orWhereJsonSupersetOf', { bool: 'or' }), args);
644
614
  }
645
615
 
646
616
  whereJsonNotSupersetOf(...args) {
647
617
  return this.addOperation(
648
- new WhereJsonPostgresOperation('whereJsonNotSupersetOf', {
649
- operator: '@>',
650
- bool: 'and',
651
- prefix: 'not',
652
- knexMethod: 'whereJsonNotSupersetOf',
653
- }),
618
+ new WhereJsonOperation('whereJsonNotSupersetOf', { bool: 'and', not: true }),
654
619
  args,
655
620
  );
656
621
  }
@@ -661,23 +626,14 @@ class QueryBuilderBase extends QueryBuilderOperationSupport {
661
626
 
662
627
  orWhereJsonNotSupersetOf(...args) {
663
628
  return this.addOperation(
664
- new WhereJsonPostgresOperation('orWhereJsonNotSupersetOf', {
665
- operator: '@>',
666
- bool: 'or',
667
- prefix: 'not',
668
- knexMethod: 'whereJsonNotSupersetOf',
669
- }),
629
+ new WhereJsonOperation('orWhereJsonNotSupersetOf', { bool: 'or', not: true }),
670
630
  args,
671
631
  );
672
632
  }
673
633
 
674
634
  whereJsonSubsetOf(...args) {
675
635
  return this.addOperation(
676
- new WhereJsonPostgresOperation('whereJsonSubsetOf', {
677
- operator: '<@',
678
- bool: 'and',
679
- knexMethod: 'whereJsonSubsetOf',
680
- }),
636
+ new WhereJsonOperation('whereJsonSubsetOf', { bool: 'and', subset: true }),
681
637
  args,
682
638
  );
683
639
  }
@@ -688,23 +644,14 @@ class QueryBuilderBase extends QueryBuilderOperationSupport {
688
644
 
689
645
  orWhereJsonSubsetOf(...args) {
690
646
  return this.addOperation(
691
- new WhereJsonPostgresOperation('orWhereJsonSubsetOf', {
692
- operator: '<@',
693
- bool: 'or',
694
- knexMethod: 'whereJsonSubsetOf',
695
- }),
647
+ new WhereJsonOperation('orWhereJsonSubsetOf', { bool: 'or', subset: true }),
696
648
  args,
697
649
  );
698
650
  }
699
651
 
700
652
  whereJsonNotSubsetOf(...args) {
701
653
  return this.addOperation(
702
- new WhereJsonPostgresOperation('whereJsonNotSubsetOf', {
703
- operator: '<@',
704
- bool: 'and',
705
- prefix: 'not',
706
- knexMethod: 'whereJsonNotSubsetOf',
707
- }),
654
+ new WhereJsonOperation('whereJsonNotSubsetOf', { bool: 'and', subset: true, not: true }),
708
655
  args,
709
656
  );
710
657
  }
@@ -715,111 +662,86 @@ class QueryBuilderBase extends QueryBuilderOperationSupport {
715
662
 
716
663
  orWhereJsonNotSubsetOf(...args) {
717
664
  return this.addOperation(
718
- new WhereJsonPostgresOperation('orWhereJsonNotSubsetOf', {
719
- operator: '<@',
720
- bool: 'or',
721
- prefix: 'not',
722
- knexMethod: 'whereJsonNotSubsetOf',
723
- }),
665
+ new WhereJsonOperation('orWhereJsonNotSubsetOf', { bool: 'or', subset: true, not: true }),
724
666
  args,
725
667
  );
726
668
  }
727
669
 
728
670
  whereJsonNotArray(...args) {
729
671
  return this.addOperation(
730
- new WhereJsonNotObjectPostgresOperation('whereJsonNotArray', {
731
- bool: 'and',
732
- compareValue: [],
733
- }),
672
+ new WhereJsonTypeOperation('whereJsonNotArray', { bool: 'and', type: 'array', not: true }),
734
673
  args,
735
674
  );
736
675
  }
737
676
 
738
677
  orWhereJsonNotArray(...args) {
739
678
  return this.addOperation(
740
- new WhereJsonNotObjectPostgresOperation('orWhereJsonNotArray', {
741
- bool: 'or',
742
- compareValue: [],
743
- }),
679
+ new WhereJsonTypeOperation('orWhereJsonNotArray', { bool: 'or', type: 'array', not: true }),
744
680
  args,
745
681
  );
746
682
  }
747
683
 
748
684
  whereJsonNotObject(...args) {
749
685
  return this.addOperation(
750
- new WhereJsonNotObjectPostgresOperation('whereJsonNotObject', {
751
- bool: 'and',
752
- compareValue: {},
753
- }),
686
+ new WhereJsonTypeOperation('whereJsonNotObject', { bool: 'and', type: 'object', not: true }),
754
687
  args,
755
688
  );
756
689
  }
757
690
 
758
691
  orWhereJsonNotObject(...args) {
759
692
  return this.addOperation(
760
- new WhereJsonNotObjectPostgresOperation('orWhereJsonNotObject', {
761
- bool: 'or',
762
- compareValue: {},
763
- }),
693
+ new WhereJsonTypeOperation('orWhereJsonNotObject', { bool: 'or', type: 'object', not: true }),
764
694
  args,
765
695
  );
766
696
  }
767
697
 
768
698
  whereJsonHasAny(...args) {
769
- return this.addOperation(
770
- new WhereJsonHasPostgresOperation('whereJsonHasAny', { bool: 'and', operator: '?|' }),
771
- args,
772
- );
699
+ return this.addOperation(new WhereJsonHasOperation('whereJsonHasAny', { bool: 'and' }), args);
773
700
  }
774
701
 
775
702
  orWhereJsonHasAny(...args) {
776
- return this.addOperation(
777
- new WhereJsonHasPostgresOperation('orWhereJsonHasAny', { bool: 'or', operator: '?|' }),
778
- args,
779
- );
703
+ return this.addOperation(new WhereJsonHasOperation('orWhereJsonHasAny', { bool: 'or' }), args);
780
704
  }
781
705
 
782
706
  whereJsonHasAll(...args) {
783
707
  return this.addOperation(
784
- new WhereJsonHasPostgresOperation('whereJsonHasAll', { bool: 'and', operator: '?&' }),
708
+ new WhereJsonHasOperation('whereJsonHasAll', { bool: 'and', all: true }),
785
709
  args,
786
710
  );
787
711
  }
788
712
 
789
713
  orWhereJsonHasAll(...args) {
790
714
  return this.addOperation(
791
- new WhereJsonHasPostgresOperation('orWhereJsonHasAll', { bool: 'or', operator: '?&' }),
715
+ new WhereJsonHasOperation('orWhereJsonHasAll', { bool: 'or', all: true }),
792
716
  args,
793
717
  );
794
718
  }
795
719
 
796
- // Not passed on to knex like `whereJsonSupersetOf()`, as MySQL's `json_contains()`
797
- // also matches `{}` in arrays of objects.
798
720
  whereJsonIsArray(fieldExpression) {
799
721
  return this.addOperation(
800
- new WhereJsonPostgresOperation('whereJsonSupersetOf', { operator: '@>', bool: 'and' }),
801
- [fieldExpression, []],
722
+ new WhereJsonTypeOperation('whereJsonIsArray', { bool: 'and', type: 'array' }),
723
+ [fieldExpression],
802
724
  );
803
725
  }
804
726
 
805
727
  orWhereJsonIsArray(fieldExpression) {
806
728
  return this.addOperation(
807
- new WhereJsonPostgresOperation('orWhereJsonSupersetOf', { operator: '@>', bool: 'or' }),
808
- [fieldExpression, []],
729
+ new WhereJsonTypeOperation('orWhereJsonIsArray', { bool: 'or', type: 'array' }),
730
+ [fieldExpression],
809
731
  );
810
732
  }
811
733
 
812
734
  whereJsonIsObject(fieldExpression) {
813
735
  return this.addOperation(
814
- new WhereJsonPostgresOperation('whereJsonSupersetOf', { operator: '@>', bool: 'and' }),
815
- [fieldExpression, {}],
736
+ new WhereJsonTypeOperation('whereJsonIsObject', { bool: 'and', type: 'object' }),
737
+ [fieldExpression],
816
738
  );
817
739
  }
818
740
 
819
741
  orWhereJsonIsObject(fieldExpression) {
820
742
  return this.addOperation(
821
- new WhereJsonPostgresOperation('orWhereJsonSupersetOf', { operator: '@>', bool: 'or' }),
822
- [fieldExpression, {}],
743
+ new WhereJsonTypeOperation('orWhereJsonIsObject', { bool: 'or', type: 'object' }),
744
+ [fieldExpression],
823
745
  );
824
746
  }
825
747
 
@@ -867,7 +789,3 @@ Object.defineProperties(QueryBuilderBase.prototype, {
867
789
  value: true,
868
790
  },
869
791
  });
870
-
871
- module.exports = {
872
- QueryBuilderBase,
873
- };
@@ -1,8 +1,6 @@
1
- 'use strict';
1
+ import { QueryBuilderContextBase } from './QueryBuilderContextBase.js';
2
2
 
3
- const { QueryBuilderContextBase } = require('./QueryBuilderContextBase');
4
-
5
- class QueryBuilderContext extends QueryBuilderContextBase {
3
+ export class QueryBuilderContext extends QueryBuilderContextBase {
6
4
  constructor(builder) {
7
5
  super(builder);
8
6
 
@@ -21,7 +19,3 @@ class QueryBuilderContext extends QueryBuilderContextBase {
21
19
  return ctx;
22
20
  }
23
21
  }
24
-
25
- module.exports = {
26
- QueryBuilderContext,
27
- };
@@ -1,8 +1,6 @@
1
- 'use strict';
1
+ import { InternalOptions } from './InternalOptions.js';
2
2
 
3
- const { InternalOptions } = require('./InternalOptions');
4
-
5
- class QueryBuilderContextBase {
3
+ export class QueryBuilderContextBase {
6
4
  constructor(builder) {
7
5
  this.userContext = builder ? new builder.constructor.QueryBuilderUserContext(builder) : null;
8
6
  this.options = builder ? new this.constructor.InternalOptions() : null;
@@ -29,7 +27,3 @@ class QueryBuilderContextBase {
29
27
  return ctx;
30
28
  }
31
29
  }
32
-
33
- module.exports = {
34
- QueryBuilderContextBase,
35
- };
@@ -1,10 +1,7 @@
1
- 'use strict';
2
-
3
- const { isString, isFunction, isRegExp, mergeMaps, last } = require('../utils/objectUtils');
4
- const { QueryBuilderContextBase } = require('./QueryBuilderContextBase');
5
- const { QueryBuilderUserContext } = require('./QueryBuilderUserContext');
6
- const { deprecate } = require('../utils/warnings');
7
- const { getWhereGroupOperations } = require('./whereGroups');
1
+ import { isString, isFunction, isRegExp, mergeMaps, last } from '../utils/objectUtils.js';
2
+ import { QueryBuilderContextBase } from './QueryBuilderContextBase.js';
3
+ import { QueryBuilderUserContext } from './QueryBuilderUserContext.js';
4
+ import { getWhereGroupOperations } from './whereGroups.js';
8
5
 
9
6
  const AllSelector = () => true;
10
7
  const SelectSelector =
@@ -15,7 +12,7 @@ const OrderBySelector = /orderBy/;
15
12
  const JoinSelector = /(join|joinRaw|joinRelated)$/i;
16
13
  const FromSelector = /^(from|fromRaw|into|table)$/;
17
14
 
18
- class QueryBuilderOperationSupport {
15
+ export class QueryBuilderOperationSupport {
19
16
  constructor(...args) {
20
17
  this.constructor.init(this, ...args);
21
18
  }
@@ -415,9 +412,8 @@ class QueryBuilderOperationSupport {
415
412
  const shouldAdd = this.callOperationMethod(operation, 'onAdd', [this, args]);
416
413
 
417
414
  if (shouldAdd) {
418
- if (this._whereGroup) {
419
- operation.whereGroup = this._whereGroup;
420
- }
415
+ // Operations with their own where group, like `findById()`, keep it.
416
+ operation.whereGroup ??= this._whereGroup;
421
417
 
422
418
  if (this._activeOperations.length) {
423
419
  const { operation: parentOperation, hookName } = last(this._activeOperations);
@@ -520,12 +516,6 @@ class QueryBuilderOperationSupport {
520
516
  toSql() {
521
517
  return this.toString();
522
518
  }
523
-
524
- skipUndefined() {
525
- deprecate('skipUndefined() is deprecated and will be removed in objection 4.0');
526
- this.internalOptions().skipUndefined = true;
527
- return this;
528
- }
529
519
  }
530
520
 
531
521
  function buildFunctionForOperationSelector(operationSelector) {
@@ -546,7 +536,3 @@ function buildFunctionForOperationSelector(operationSelector) {
546
536
  return () => false;
547
537
  }
548
538
  }
549
-
550
- module.exports = {
551
- QueryBuilderOperationSupport,
552
- };
@@ -1,8 +1,6 @@
1
- 'use strict';
2
-
3
1
  const SYMBOL_BUILDER = Symbol();
4
2
 
5
- class QueryBuilderUserContext {
3
+ export class QueryBuilderUserContext {
6
4
  constructor(builder) {
7
5
  // This should never ever be accessed outside this class. We only
8
6
  // store it so that we can access builder.knex() lazily.
@@ -25,7 +23,3 @@ class QueryBuilderUserContext {
25
23
  return ctx;
26
24
  }
27
25
  }
28
-
29
- module.exports = {
30
- QueryBuilderUserContext,
31
- };
@@ -1,9 +1,7 @@
1
- 'use strict';
1
+ import { isPlainObject } from '../utils/objectUtils.js';
2
+ import { buildArg } from '../utils/buildUtils.js';
2
3
 
3
- const { isPlainObject } = require('../utils/objectUtils');
4
- const { buildArg } = require('../utils/buildUtils');
5
-
6
- class RawBuilder {
4
+ export class RawBuilder {
7
5
  constructor(sql, args) {
8
6
  this._sql = `${sql}`;
9
7
  this._args = args;
@@ -62,7 +60,7 @@ function buildObject(obj, builder) {
62
60
  }, {});
63
61
  }
64
62
 
65
- function normalizeRawArgs(argsIn) {
63
+ export function normalizeRawArgs(argsIn) {
66
64
  const [sql, ...restArgs] = argsIn;
67
65
 
68
66
  if (restArgs.length === 1 && Array.isArray(restArgs[0])) {
@@ -78,13 +76,7 @@ function normalizeRawArgs(argsIn) {
78
76
  }
79
77
  }
80
78
 
81
- function raw(...argsIn) {
79
+ export function raw(...argsIn) {
82
80
  const { sql, args } = normalizeRawArgs(argsIn);
83
81
  return new RawBuilder(sql, args);
84
82
  }
85
-
86
- module.exports = {
87
- RawBuilder,
88
- normalizeRawArgs,
89
- raw,
90
- };
@@ -1,13 +1,8 @@
1
- 'use strict';
1
+ import { parseFieldExpression } from '../utils/parseFieldExpression.js';
2
+ import { isObject } from '../utils/objectUtils.js';
3
+ import { getJsonDialect } from './jsonDialects/index.js';
2
4
 
3
- const {
4
- parseFieldExpression,
5
- toPostgresJsonPathLiteral,
6
- } = require('../utils/parseFieldExpression');
7
- const { isObject } = require('../utils/objectUtils');
8
- const { warnIfNotPostgres } = require('./operations/jsonApi/postgresJsonApi');
9
-
10
- class ReferenceBuilder {
5
+ export class ReferenceBuilder {
11
6
  constructor(expr) {
12
7
  this._expr = expr;
13
8
  this._parsedExpr = null;
@@ -164,13 +159,7 @@ class ReferenceBuilder {
164
159
  }
165
160
 
166
161
  toKnexRaw(builder) {
167
- const knex = builder.knex();
168
-
169
- if (this._parsedExpr.access.length > 0) {
170
- warnIfNotPostgres(knex);
171
- }
172
-
173
- return knex.raw(...this._createRawArgs(builder));
162
+ return builder.knex().raw(...this._createRawArgs(builder));
174
163
  }
175
164
 
176
165
  _parseExpression(expr) {
@@ -180,41 +169,29 @@ class ReferenceBuilder {
180
169
  }
181
170
 
182
171
  _createRawArgs(builder) {
183
- let bindings = [];
184
- let sql = this._createReferenceSql(builder, bindings);
185
-
186
- sql = this._maybeCast(sql, bindings);
187
- sql = this._maybeToJsonb(sql, bindings);
188
- sql = this._maybeAlias(sql, bindings);
172
+ const dialect = getJsonDialect(builder.knex());
173
+ const { access } = this._parsedExpr;
174
+ const bindings = [this.fullColumn(builder)];
175
+ let sql = '??';
189
176
 
190
- return [sql, bindings];
191
- }
192
-
193
- _createReferenceSql(builder, bindings) {
194
- bindings.push(this.fullColumn(builder));
177
+ if (access.length > 0 || this._toJson) {
178
+ dialect.checkSupport();
179
+ }
195
180
 
196
- if (this._parsedExpr.access.length > 0) {
197
- const extractor = this._cast ? '#>>' : '#>';
198
- return `??${extractor}${toPostgresJsonPathLiteral(this._parsedExpr.access)}`;
199
- } else {
200
- return '??';
181
+ if (access.length > 0) {
182
+ sql = dialect.extract(sql, access, this._cast);
201
183
  }
202
- }
203
184
 
204
- _maybeCast(sql) {
205
185
  if (this._cast) {
206
- return `CAST(${sql} AS ${this._cast})`;
207
- } else {
208
- return sql;
186
+ sql = dialect.cast(sql, this._cast);
209
187
  }
210
- }
211
188
 
212
- _maybeToJsonb(sql) {
213
189
  if (this._toJson) {
214
- return `to_jsonb(${sql})`;
215
- } else {
216
- return sql;
190
+ sql = dialect.toJson(sql, access.length === 0 && !this._cast);
217
191
  }
192
+
193
+ sql = this._maybeAlias(sql, bindings);
194
+ return [sql, bindings];
218
195
  }
219
196
 
220
197
  _maybeAlias(sql, bindings) {
@@ -247,15 +224,10 @@ Object.defineProperties(ReferenceBuilder.prototype, {
247
224
  },
248
225
  });
249
226
 
250
- const ref = (reference) => {
227
+ export const ref = (reference) => {
251
228
  if (isObject(reference) && reference.isObjectionReferenceBuilder) {
252
229
  return reference;
253
230
  } else {
254
231
  return new ReferenceBuilder(reference);
255
232
  }
256
233
  };
257
-
258
- module.exports = {
259
- ReferenceBuilder,
260
- ref,
261
- };
@@ -1,18 +1,24 @@
1
- 'use strict';
1
+ import * as parser from './parsers/relationExpressionParser.js';
2
+ import { isObject, isNumber, isString, union } from '../utils/objectUtils.js';
3
+ import { RelationDoesNotExistError } from '../model/RelationDoesNotExistError.js';
2
4
 
3
- const parser = require('./parsers/relationExpressionParser');
4
- const { isObject, isNumber, isString, union } = require('../utils/objectUtils');
5
- const { RelationDoesNotExistError } = require('../model/RelationDoesNotExistError');
6
-
7
- class RelationExpressionParseError extends Error {}
8
- class DuplicateRelationError extends RelationExpressionParseError {
5
+ export class RelationExpressionParseError extends Error {}
6
+ export class DuplicateRelationError extends RelationExpressionParseError {
9
7
  constructor(relationName) {
10
- super();
11
- this.relationName = relationName;
8
+ super(
9
+ `Duplicate relation name "${relationName}". For example, use "${relationName}.[foo, bar]" ` +
10
+ `instead of "[${relationName}.foo, ${relationName}.bar]".`,
11
+ );
12
+ }
13
+ }
14
+
15
+ export class MisplacedTokenError extends RelationExpressionParseError {
16
+ constructor(token) {
17
+ super(`"${token}" is only supported at the end of a relation path.`);
12
18
  }
13
19
  }
14
20
 
15
- class RelationExpression {
21
+ export class RelationExpression {
16
22
  constructor(node = newNode(), recursionDepth = 0) {
17
23
  this.node = node;
18
24
  this.recursionDepth = recursionDepth;
@@ -36,6 +42,8 @@ class RelationExpression {
36
42
  } catch (err) {
37
43
  if (err.duplicateRelationName) {
38
44
  throw new DuplicateRelationError(err.duplicateRelationName);
45
+ } else if (err.misplacedToken) {
46
+ throw new MisplacedTokenError(err.misplacedToken);
39
47
  } else {
40
48
  throw new RelationExpressionParseError(err.message);
41
49
  }
@@ -437,9 +445,3 @@ Object.defineProperties(RelationExpression.prototype, {
437
445
  value: true,
438
446
  },
439
447
  });
440
-
441
- module.exports = {
442
- RelationExpression,
443
- RelationExpressionParseError,
444
- DuplicateRelationError,
445
- };