@mlagie/sql-connector 1.4.5 → 1.4.6
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/README.md +4 -5
- package/index.d.ts +1 -1
- package/index.js +1 -2
- package/package.json +1 -1
- package/src/models/Model.js +68 -4
- package/src/utils/sqlTypeMap.js +1 -0
- package/src/utils/sqlType.js +0 -15
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# sql-connector
|
|
2
|
-
|
|
3
|
-

|
|
2
|
+
    
|
|
3
|
+

|
|
4
4
|
|
|
5
5
|
# Documentation du module `sql-connector`
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ Le module `sql-connector` permet de gérer les connexions à une base de donnée
|
|
|
9
9
|
## Importation du module
|
|
10
10
|
|
|
11
11
|
```javascript
|
|
12
|
-
const { Schema, connect, logout, Model, client,
|
|
12
|
+
const { Schema, connect, logout, Model, client, sqlTypeMap } = require('sql-connector');
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
### Fonctions
|
|
@@ -244,7 +244,7 @@ await userInstance.updateOne({ mdp: 'newpassword' });
|
|
|
244
244
|
await userInstance.delete({ token: 'abc123' });
|
|
245
245
|
```
|
|
246
246
|
# Types SQL
|
|
247
|
-
Le module fournit
|
|
247
|
+
Le module fournit une map des types SQL courants via `sqlTypeMap`.
|
|
248
248
|
## Type
|
|
249
249
|
* String
|
|
250
250
|
* Number
|
|
@@ -258,7 +258,6 @@ Le module fournit également une map des types SQL courants via `sqlType`.
|
|
|
258
258
|
* Timestamp
|
|
259
259
|
* ### Exemple
|
|
260
260
|
```javascript
|
|
261
|
-
console.log(sqlType.String); // "String"
|
|
262
261
|
console.log(sqlTypeMap.String); // "VARCHAR"
|
|
263
262
|
```
|
|
264
263
|
## Conclusion
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -2,9 +2,8 @@ const { Model } = require("./src/models/Model");
|
|
|
2
2
|
const { ModelInstance } = require("./src/models/ModelInstance");
|
|
3
3
|
const { connect, logout } = require("./src/db/connect");
|
|
4
4
|
const {Schema} = require("./src/models/Schema");
|
|
5
|
-
const { sqlType } = require("./src/utils/sqlType");
|
|
6
5
|
const { sqlTypeMap } = require("./src/utils/sqlTypeMap");
|
|
7
6
|
|
|
8
7
|
let client = {};
|
|
9
8
|
|
|
10
|
-
module.exports = { client, connect, logout, Schema, Model, ModelInstance,
|
|
9
|
+
module.exports = { client, connect, logout, Schema, Model, ModelInstance, sqlTypeMap }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mlagie/sql-connector",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.6",
|
|
4
4
|
"description": "Le module sql-connector permet de gérer les connexions à une base de données MySQL, de définir des schémas de tables, et d'interagir avec les données de manière simple et efficace.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
package/src/models/Model.js
CHANGED
|
@@ -19,6 +19,70 @@ function getFieldType(field) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
function isDateLikeType(fieldType) {
|
|
23
|
+
const normalizedType = String(fieldType ?? "").toLowerCase();
|
|
24
|
+
return ["date", "datetime", "timestamp", "now"].includes(normalizedType);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isSqlTemporalDefault(defaultValue) {
|
|
28
|
+
if (typeof defaultValue !== "string") return false;
|
|
29
|
+
|
|
30
|
+
const normalizedValue = defaultValue.trim().toUpperCase();
|
|
31
|
+
return ["CURRENT_TIMESTAMP", "CURRENT_TIMESTAMP()", "NOW()"].includes(normalizedValue);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function formatDefaultSql(defaultValue, fieldType) {
|
|
35
|
+
if (defaultValue === undefined) return null;
|
|
36
|
+
if (defaultValue === null) return "DEFAULT NULL";
|
|
37
|
+
|
|
38
|
+
if (typeof defaultValue === "function") {
|
|
39
|
+
if (isDateLikeType(fieldType)) return "DEFAULT CURRENT_TIMESTAMP";
|
|
40
|
+
return formatDefaultSql(defaultValue(), fieldType);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (defaultValue instanceof Date) {
|
|
44
|
+
const formattedDate = defaultValue.toISOString().slice(0, 19).replace("T", " ");
|
|
45
|
+
return `DEFAULT "${formattedDate}"`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (isSqlTemporalDefault(defaultValue)) return "DEFAULT CURRENT_TIMESTAMP";
|
|
49
|
+
if (typeof defaultValue === "string") return `DEFAULT "${defaultValue.replace(/"/g, '\\"')}"`;
|
|
50
|
+
if (typeof defaultValue === "number" || typeof defaultValue === "bigint") return `DEFAULT ${defaultValue}`;
|
|
51
|
+
if (typeof defaultValue === "boolean") return `DEFAULT ${defaultValue ? 1 : 0}`;
|
|
52
|
+
if (typeof defaultValue === "object") return `DEFAULT "${JSON.stringify(defaultValue).replace(/"/g, '\\"')}"`;
|
|
53
|
+
|
|
54
|
+
return `DEFAULT "${String(defaultValue).replace(/"/g, '\\"')}"`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function normalizeDefaultValue(defaultValue, fieldType) {
|
|
58
|
+
if (defaultValue === undefined) return null;
|
|
59
|
+
if (defaultValue === null) return "null";
|
|
60
|
+
|
|
61
|
+
if (typeof defaultValue === "function") {
|
|
62
|
+
if (isDateLikeType(fieldType)) return "current_timestamp";
|
|
63
|
+
return normalizeDefaultValue(defaultValue(), fieldType);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (defaultValue instanceof Date) {
|
|
67
|
+
return defaultValue.toISOString().slice(0, 19).replace("T", " ");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (isSqlTemporalDefault(defaultValue)) return "current_timestamp";
|
|
71
|
+
if (typeof defaultValue === "boolean") return defaultValue ? "1" : "0";
|
|
72
|
+
if (typeof defaultValue === "object") return JSON.stringify(defaultValue);
|
|
73
|
+
|
|
74
|
+
return String(defaultValue);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function normalizeDbDefaultValue(defaultValue) {
|
|
78
|
+
if (defaultValue === null || defaultValue === undefined) return null;
|
|
79
|
+
|
|
80
|
+
const normalizedValue = String(defaultValue).trim();
|
|
81
|
+
if (/^current_timestamp(\(\))?$/i.test(normalizedValue)) return "current_timestamp";
|
|
82
|
+
if (/^now\(\)$/i.test(normalizedValue)) return "current_timestamp";
|
|
83
|
+
return normalizedValue;
|
|
84
|
+
}
|
|
85
|
+
|
|
22
86
|
function generateValueSQL(value) {
|
|
23
87
|
return value.map(item => {
|
|
24
88
|
if (item === null) return 'NULL';
|
|
@@ -67,8 +131,8 @@ function getColumnDefinition(fieldName, field) {
|
|
|
67
131
|
colDef = `${sqlTypeMap[fieldType]}${(sqlTypeMap[fieldType] == "VARCHAR" || sqlTypeMap[fieldType] == "INT") ? `(${field.length > 0 ? field.length : 255})` : ""}`;
|
|
68
132
|
}
|
|
69
133
|
if (field.required) colDef += ' NOT NULL';
|
|
70
|
-
|
|
71
|
-
if (
|
|
134
|
+
const defaultDefinition = formatDefaultSql(field.default, fieldType);
|
|
135
|
+
if (defaultDefinition !== null) colDef += ` ${defaultDefinition}`;
|
|
72
136
|
if (field.unique) colDef += ' UNIQUE';
|
|
73
137
|
if (field.auto_increment) colDef += ' AUTO_INCREMENT';
|
|
74
138
|
if (field.primary_key) colDef += ' PRIMARY KEY';
|
|
@@ -294,8 +358,8 @@ class Model {
|
|
|
294
358
|
}
|
|
295
359
|
|
|
296
360
|
// --- Vérification DEFAULT VALUE ---
|
|
297
|
-
const expectedDefault = field.default
|
|
298
|
-
const currentDefault = currentCol.Default;
|
|
361
|
+
const expectedDefault = normalizeDefaultValue(field.default, fieldType);
|
|
362
|
+
const currentDefault = normalizeDbDefaultValue(currentCol.Default);
|
|
299
363
|
|
|
300
364
|
// Gestion spéciale pour les valeurs par défaut
|
|
301
365
|
if (expectedDefault !== null && currentDefault === null) {
|
package/src/utils/sqlTypeMap.js
CHANGED
package/src/utils/sqlType.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const sqlType = {
|
|
2
|
-
String: "String",
|
|
3
|
-
Number: "Number",
|
|
4
|
-
Boolean: "Boolean",
|
|
5
|
-
Date: "Date",
|
|
6
|
-
Object: "Object",
|
|
7
|
-
Array: "Array",
|
|
8
|
-
Now: "Now",
|
|
9
|
-
Float: "Float",
|
|
10
|
-
Text: "Text",
|
|
11
|
-
DateTime: "DateTime",
|
|
12
|
-
Timestamp: "Timestamp",
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
module.exports = { sqlType }
|