@@ -3,12 +3,20 @@ const { isString, mergeMaps } = require('../utils/objectUtils');
3
3
const QueryBuilderContextBase = require ( './QueryBuilderContextBase' ) ;
4
4
const QueryBuilderUserContext = require ( './QueryBuilderUserContext' ) ;
5
5
6
+ const SelectSelector = / ^ ( s e l e c t | c o l u m n s | c o l u m n | d i s t i n c t | c o u n t | c o u n t D i s t i n c t | m i n | m a x | s u m | s u m D i s t i n c t | a v g | a v g D i s t i n c t ) $ / ;
7
+ const WhereSelector = / ^ ( w h e r e | o r W h e r e | a n d W h e r e ) / ;
8
+ const OnSelector = / ^ ( o n | o r O n | a n d O n ) / ;
9
+ const OrderBySelector = / o r d e r B y / ;
10
+ const JoinSelector = / ( j o i n | j o i n R a w ) $ / i;
11
+ const FromSelector = / ^ ( f r o m | i n t o | t a b l e ) $ / ;
12
+
6
13
class QueryBuilderOperationSupport {
7
14
constructor ( knex ) {
8
15
this . _knex = knex ;
9
16
this . _operations = [ ] ;
10
17
this . _context = new this . constructor . QueryBuilderContext ( this ) ;
11
18
this . _parentQuery = null ;
19
+ this . _isPartialQuery = false ;
12
20
}
13
21
14
22
static get QueryBuilderContext ( ) {
@@ -19,6 +27,42 @@ class QueryBuilderOperationSupport {
19
27
return QueryBuilderUserContext ;
20
28
}
21
29
30
+ static get SelectSelector ( ) {
31
+ return SelectSelector ;
32
+ }
33
+
34
+ static get WhereSelector ( ) {
35
+ return WhereSelector ;
36
+ }
37
+
38
+ static get OnSelector ( ) {
39
+ return OnSelector ;
40
+ }
41
+
42
+ static get JoinSelector ( ) {
43
+ return JoinSelector ;
44
+ }
45
+
46
+ static get FromSelector ( ) {
47
+ return FromSelector ;
48
+ }
49
+
50
+ static get OrderBySelector ( ) {
51
+ return OrderBySelector ;
52
+ }
53
+
54
+ clearSelect ( ) {
55
+ return this . clear ( SelectSelector ) ;
56
+ }
57
+
58
+ clearWhere ( ) {
59
+ return this . clear ( WhereSelector ) ;
60
+ }
61
+
62
+ clearOrder ( ) {
63
+ return this . clear ( OrderBySelector ) ;
64
+ }
65
+
22
66
context ( obj ) {
23
67
const ctx = this . _context ;
24
68
@@ -55,6 +99,15 @@ class QueryBuilderOperationSupport {
55
99
}
56
100
}
57
101
102
+ isPartialQuery ( isPartialQuery ) {
103
+ if ( arguments . length === 0 ) {
104
+ return this . _isPartialQuery ;
105
+ } else {
106
+ this . _isPartialQuery = isPartialQuery ;
107
+ return this ;
108
+ }
109
+ }
110
+
58
111
tableNameFor ( tableName , newTableName ) {
59
112
const ctx = this . internalContext ( ) ;
60
113
const tableMap = ctx . tableMap ;
@@ -106,15 +159,18 @@ class QueryBuilderOperationSupport {
106
159
}
107
160
108
161
subqueryOf ( query ) {
109
- const ctx = query . internalContext ( ) ;
162
+ if ( query ) {
163
+ const ctx = this . internalContext ( ) ;
110
164
111
- // Merge alias and table name maps for subqueries.
112
- ctx . aliasMap = mergeMaps ( query . internalContext ( ) . aliasMap , ctx . aliasMap ) ;
113
- ctx . tableMap = mergeMaps ( query . internalContext ( ) . tableMap , ctx . tableMap ) ;
165
+ // Merge alias and table name maps for subqueries.
166
+ ctx . aliasMap = mergeMaps ( query . internalContext ( ) . aliasMap , ctx . aliasMap ) ;
167
+ ctx . tableMap = mergeMaps ( query . internalContext ( ) . tableMap , ctx . tableMap ) ;
114
168
115
- if ( query ) {
116
169
this . _parentQuery = query ;
117
- this . knex ( query . unsafeKnex ( ) ) ;
170
+
171
+ if ( this . unsafeKnex ( ) === null ) {
172
+ this . knex ( query . unsafeKnex ( ) ) ;
173
+ }
118
174
}
119
175
120
176
return this ;
@@ -259,6 +315,7 @@ class QueryBuilderOperationSupport {
259
315
builder . _operations = this . _operations . slice ( ) ;
260
316
builder . _context = this . _context . clone ( ) ;
261
317
builder . _parentQuery = this . _parentQuery ;
318
+ builder . _isPartialQuery = this . _isPartialQuery ;
262
319
263
320
return builder ;
264
321
}
0 commit comments