@snowtop/ent 0.2.0-alpha.8 → 0.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.
- package/core/base.d.ts +1 -0
- package/core/query_impl.js +18 -1
- package/package.json +1 -1
- package/schema/struct_field.js +35 -11
package/core/base.d.ts
CHANGED
|
@@ -86,6 +86,7 @@ interface JoinOptions<T2 extends Data = Data, K2 = keyof T2> {
|
|
|
86
86
|
tableName: string;
|
|
87
87
|
alias?: string;
|
|
88
88
|
clause: clause.Clause<T2, K2>;
|
|
89
|
+
type?: "inner" | "outer" | "left" | "right";
|
|
89
90
|
}
|
|
90
91
|
export interface QueryDataOptions<T extends Data = Data, K = keyof T> {
|
|
91
92
|
distinct?: boolean;
|
package/core/query_impl.js
CHANGED
|
@@ -36,7 +36,24 @@ function getJoinInfo(join, clauseIdx = 1) {
|
|
|
36
36
|
? `${join.tableName} ${join.alias}`
|
|
37
37
|
: join.tableName;
|
|
38
38
|
valuesUsed += join.clause.values().length;
|
|
39
|
-
|
|
39
|
+
let joinType;
|
|
40
|
+
switch (join.type) {
|
|
41
|
+
case "left":
|
|
42
|
+
joinType = "LEFT JOIN";
|
|
43
|
+
break;
|
|
44
|
+
case "right":
|
|
45
|
+
joinType = "RIGHT JOIN";
|
|
46
|
+
break;
|
|
47
|
+
case "outer":
|
|
48
|
+
joinType = "FULL OUTER JOIN";
|
|
49
|
+
break;
|
|
50
|
+
case "inner":
|
|
51
|
+
joinType = "INNER JOIN";
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
joinType = "JOIN";
|
|
55
|
+
}
|
|
56
|
+
return `${joinType} ${joinTable} ON ${join.clause.clause(clauseIdx)}`;
|
|
40
57
|
})
|
|
41
58
|
.join(" ");
|
|
42
59
|
return {
|
package/package.json
CHANGED
package/schema/struct_field.js
CHANGED
|
@@ -36,8 +36,7 @@ class StructField extends field_1.BaseField {
|
|
|
36
36
|
throw new Error("valid was not called");
|
|
37
37
|
}
|
|
38
38
|
let ret = {};
|
|
39
|
-
|
|
40
|
-
const field = this.options.fields[k];
|
|
39
|
+
const processField = (k, field) => {
|
|
41
40
|
// check two values
|
|
42
41
|
// store in dbKey format
|
|
43
42
|
// check both fieldName and dbKey and store in dbKey for
|
|
@@ -52,7 +51,7 @@ class StructField extends field_1.BaseField {
|
|
|
52
51
|
val = obj[dbKey];
|
|
53
52
|
}
|
|
54
53
|
if (val === undefined) {
|
|
55
|
-
|
|
54
|
+
return;
|
|
56
55
|
}
|
|
57
56
|
if (field.format) {
|
|
58
57
|
// indicate nested so this isn't JSON stringified
|
|
@@ -61,6 +60,16 @@ class StructField extends field_1.BaseField {
|
|
|
61
60
|
else {
|
|
62
61
|
ret[dbKey] = val;
|
|
63
62
|
}
|
|
63
|
+
};
|
|
64
|
+
for (const k in this.options.fields) {
|
|
65
|
+
const field = this.options.fields[k];
|
|
66
|
+
processField(k, field);
|
|
67
|
+
if (field.getDerivedFields) {
|
|
68
|
+
const derivedFields = field.getDerivedFields(k);
|
|
69
|
+
for (const k in derivedFields) {
|
|
70
|
+
processField(k, derivedFields[k]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
64
73
|
}
|
|
65
74
|
// don't json.stringify if nested or list
|
|
66
75
|
if (nested) {
|
|
@@ -114,11 +123,7 @@ class StructField extends field_1.BaseField {
|
|
|
114
123
|
return false;
|
|
115
124
|
}
|
|
116
125
|
let promises = [];
|
|
117
|
-
|
|
118
|
-
let valid = true;
|
|
119
|
-
for (const k in this.options.fields) {
|
|
120
|
-
const field = this.options.fields[k];
|
|
121
|
-
let dbKey = (0, schema_1.getStorageKey)(field, k);
|
|
126
|
+
const processField = (k, dbKey, field) => {
|
|
122
127
|
let fieldName = (0, names_1.toFieldName)(k);
|
|
123
128
|
let val = obj[fieldName];
|
|
124
129
|
let uniqueKeyField = false;
|
|
@@ -145,15 +150,34 @@ class StructField extends field_1.BaseField {
|
|
|
145
150
|
if (val === undefined || val === null) {
|
|
146
151
|
// nullable, nothing to do here
|
|
147
152
|
if (field.nullable) {
|
|
148
|
-
|
|
153
|
+
return;
|
|
149
154
|
}
|
|
150
155
|
valid = false;
|
|
151
|
-
|
|
156
|
+
return false;
|
|
152
157
|
}
|
|
153
158
|
if (!field.valid) {
|
|
154
|
-
|
|
159
|
+
return;
|
|
155
160
|
}
|
|
156
161
|
promises.push(field.valid(val));
|
|
162
|
+
};
|
|
163
|
+
// TODO probably need to support optional fields...
|
|
164
|
+
let valid = true;
|
|
165
|
+
for (const k in this.options.fields) {
|
|
166
|
+
const field = this.options.fields[k];
|
|
167
|
+
let dbKey = (0, schema_1.getStorageKey)(field, k);
|
|
168
|
+
if (processField(k, dbKey, field) === false) {
|
|
169
|
+
valid = false;
|
|
170
|
+
}
|
|
171
|
+
if (field.getDerivedFields) {
|
|
172
|
+
const derivedFields = field.getDerivedFields(k);
|
|
173
|
+
for (const k in derivedFields) {
|
|
174
|
+
const derivedField = derivedFields[k];
|
|
175
|
+
let dbKey = (0, schema_1.getStorageKey)(derivedField, k);
|
|
176
|
+
if (processField(k, dbKey, derivedField) === false) {
|
|
177
|
+
valid = false;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
157
181
|
}
|
|
158
182
|
if (!valid) {
|
|
159
183
|
return valid;
|