@strapi/database 4.0.4 → 4.0.8
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.
|
@@ -14,15 +14,20 @@ class MysqlDialect extends Dialect {
|
|
|
14
14
|
this.db.config.connection.connection.supportBigNumbers = true;
|
|
15
15
|
this.db.config.connection.connection.bigNumberStrings = true;
|
|
16
16
|
this.db.config.connection.connection.typeCast = (field, next) => {
|
|
17
|
-
if (field.type
|
|
17
|
+
if (field.type === 'DECIMAL' || field.type === 'NEWDECIMAL') {
|
|
18
18
|
var value = field.string();
|
|
19
19
|
return value === null ? null : Number(value);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
if (field.type
|
|
22
|
+
if (field.type === 'TINY' && field.length === 1) {
|
|
23
23
|
let value = field.string();
|
|
24
|
-
return value ? value
|
|
24
|
+
return value ? value === '1' : null;
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
if (field.type === 'DATE') {
|
|
28
|
+
return field.string();
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
return next();
|
|
27
32
|
};
|
|
28
33
|
}
|
|
@@ -16,6 +16,7 @@ class PostgresDialect extends Dialect {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
initialize() {
|
|
19
|
+
this.db.connection.client.driver.types.setTypeParser(1082, 'text', v => v); // Don't cast DATE string to Date()
|
|
19
20
|
this.db.connection.client.driver.types.setTypeParser(1700, 'text', parseFloat);
|
|
20
21
|
}
|
|
21
22
|
|
package/lib/fields.js
CHANGED
|
@@ -98,6 +98,8 @@ class BigIntegerField extends NumberField {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
const timeRegex = new RegExp('^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$');
|
|
101
|
+
const dateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
|
|
102
|
+
const partialDateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;
|
|
101
103
|
|
|
102
104
|
const parseTime = value => {
|
|
103
105
|
if (dateFns.isDate(value)) return dateFns.format(value, 'HH:mm:ss.SSS');
|
|
@@ -118,16 +120,23 @@ const parseTime = value => {
|
|
|
118
120
|
};
|
|
119
121
|
|
|
120
122
|
const parseDate = value => {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
let date = dateFns.parseISO(value);
|
|
123
|
+
const found = _.isString(value) ? value.match(partialDateRegex) || [] : [];
|
|
124
|
+
const extractedValue = found[0];
|
|
124
125
|
|
|
125
|
-
|
|
126
|
+
if (extractedValue && !dateRegex.test(value)) {
|
|
127
|
+
// TODO V5: throw an error when format yyyy-MM-dd is not respected
|
|
128
|
+
// throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);
|
|
129
|
+
process.emitWarning(
|
|
130
|
+
`[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
126
133
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
throw new InvalidDateError(`Invalid
|
|
134
|
+
let date = dateFns.parseISO(extractedValue);
|
|
135
|
+
if (!dateFns.isValid(date)) {
|
|
136
|
+
throw new InvalidDateError(`Invalid date`);
|
|
130
137
|
}
|
|
138
|
+
|
|
139
|
+
return extractedValue;
|
|
131
140
|
};
|
|
132
141
|
|
|
133
142
|
const parseDateTimeOrTimestamp = value => {
|
|
@@ -151,8 +160,7 @@ class DateField extends Field {
|
|
|
151
160
|
}
|
|
152
161
|
|
|
153
162
|
fromDB(value) {
|
|
154
|
-
|
|
155
|
-
return dateFns.isValid(cast) ? dateFns.formatISO(cast, { representation: 'date' }) : null;
|
|
163
|
+
return value;
|
|
156
164
|
}
|
|
157
165
|
}
|
|
158
166
|
class DatetimeField extends Field {
|
|
@@ -249,12 +249,16 @@ const applyOperator = (qb, column, operator, value) => {
|
|
|
249
249
|
case '$null': {
|
|
250
250
|
if (value) {
|
|
251
251
|
qb.whereNull(column);
|
|
252
|
+
} else {
|
|
253
|
+
qb.whereNotNull(column);
|
|
252
254
|
}
|
|
253
255
|
break;
|
|
254
256
|
}
|
|
255
257
|
case '$notNull': {
|
|
256
258
|
if (value) {
|
|
257
259
|
qb.whereNotNull(column);
|
|
260
|
+
} else {
|
|
261
|
+
qb.whereNull(column);
|
|
258
262
|
}
|
|
259
263
|
break;
|
|
260
264
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/database",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.8",
|
|
4
4
|
"description": "Strapi's database layer",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"node": ">=12.22.0 <=16.x.x",
|
|
43
43
|
"npm": ">=6.0.0"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "669bb2f0440d3b21a23c8d665fdba98bd3d8cc71"
|
|
46
46
|
}
|