@mlagie/sql-connector 1.4.9 → 1.5.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.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: lagie-marin
7
+
8
+ ---
9
+
10
+ ## Bug Description
11
+
12
+ ## Steps to Reproduce
13
+
14
+ 1. Call the method `...`
15
+ 2. Pass the following options/parameters `...`
16
+ 3. Execute the code
17
+ 4. See the error
18
+
19
+ ## Code Snippet / Logs
20
+
21
+ **JavaScript Code:**
22
+
23
+ ```javascript
24
+ // Insert the JavaScript code that triggers the issue here
25
+ const result = await MyModel.find({ ... });
26
+ ```
27
+
28
+ ## Error Logs / Output
29
+
30
+ ```txt
31
+ TypeError: ... is not a function
32
+ at ...
33
+ ```
34
+
35
+ ## Expected Behavior
36
+
37
+ Example: The `find()` method should return a native JavaScript Array of `ModelInstance` objects so that `.length` or indexation like `[0]` works out of the box when multiple rows are returned.
38
+
39
+ ## Environment
40
+
41
+ - sql-connector version: vX.X.X
42
+ - Node.js version: vXX.XX.X
43
+ - Database (MySQL/MariaDB...): MySQL vX.X
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: lagie-marin
7
+
8
+ ---
9
+
10
+ ## Feature Type
11
+ - [ ] New method / API addition
12
+ - [ ] Performance improvement
13
+ - [ ] Architecture Refactoring (ORM / Data Mapping)
14
+ - [ ] Other:
15
+
16
+ ## Problem Statement
17
+ *Example: Currently, the ORM wraps the raw driver payload `[rows, fields]` inside a single global `ModelInstance`. This forces developers to leak internal database structure by accessing nested arrays like `data[0][0]` when handling records, destroying proper encapsulation.*
18
+
19
+ ## Proposed Solution
20
+ *Example: Refactor the `find()` method to map and split the query results. It should return a native Array where each row is mapped into its own independent `ModelInstance`. Implement dynamic data-mapping (via continuous references, Getters/Setters, or a Proxy) to allow direct property access (`job.status`) without cloning the memory footprint.*
21
+
22
+ ## Desired Developer Experience (DX / Example)
23
+ ```javascript
24
+ // Provide an example of how the ideal code should look after this feature:
25
+ const jobs = await InjectionJobs.find({ where: { status: "running" } });
26
+
27
+ console.log(jobs.length); // Native array length works
28
+ console.log(jobs[0].status); // Direct property access on the instance
29
+ await jobs[0].updateOne({ status: "success" }); // Instance methods remain fully bound
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # sql-connector documentation
2
2
 
3
+ ![GitHub package.json version](https://img.shields.io/github/package-json/v/lagie-marin/sql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/d18m/%40mlagie%2Fsql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/dw/%40mlagie%2Fsql-connector?color=#008000) ![GitHub followers](https://img.shields.io/github/followers/lagie-marin?style=plastic&color=color%3D%23008000) ![GitHub repo size](https://img.shields.io/github/repo-size/lagie-marin/sql-connector?color=%green)
4
+ ![GitHub last commit](https://img.shields.io/github/last-commit/lagie-marin/sql-connector)
5
+
3
6
  [Français](./docs/fr/README.md) | English
4
7
 
5
8
  sql-connector helps manage MySQL connections, define table schemas, sync tables automatically, and work with database models through a small API.
@@ -32,41 +35,91 @@ await connect(config);
32
35
  await logout();
33
36
  ```
34
37
 
38
+ ### Example
39
+
40
+ ```js
41
+ const { connect: dbConnect, client, Model } = require("@mlagie/sql-connector");
42
+
43
+
44
+ await dbConnect({
45
+ host: 'localhost',
46
+ port: 3306,
47
+ user: 'root',
48
+ password: 'password',
49
+ database: 'mydatabase',
50
+ connectionLimit: 2,
51
+ multipleStatements: true,
52
+ idleTimeout: 10000,
53
+ typeCast: true,
54
+ }).then(() => { Logger.client("- connected to the database") }).catch(error => {
55
+ console.error(error);
56
+ process.exit();
57
+ });
58
+ ```
59
+
35
60
  ## Schema
36
61
 
37
62
  `Schema` describes the structure of a table. Each field can use the following properties.
38
63
 
39
- | Property | Type | Description |
40
- |---|---|---|
41
- | type | `SqlType` or `{ name: SqlType }` | SQL type for the field |
42
- | length | `number` | Maximum length |
43
- | required | `boolean` | Not null constraint |
44
- | default | `any` | Default value |
45
- | unique | `boolean` | Unique constraint |
46
- | auto_increment | `boolean` | Auto increment |
47
- | foreignKey | `string` | Foreign key reference |
48
- | enum | `string[]` | Allowed values |
49
- | primary_key | `boolean` | Primary key flag |
50
- | customize | `string` | Extra SQL options |
64
+ | Property | Type | Description |
65
+ |----------------|----------------------------------|------------------------|
66
+ | type | `SqlType` or `{ name: SqlType }` | SQL type for the field |
67
+ | length | `number` | Maximum length |
68
+ | required | `boolean` | Not null constraint |
69
+ | default | `any` | Default value |
70
+ | unique | `boolean` | Unique constraint |
71
+ | auto_increment | `boolean` | Auto increment |
72
+ | foreignKey | `string` | Foreign key reference |
73
+ | enum | `string[]` | Allowed values |
74
+ | primary_key | `boolean` | Primary key flag |
75
+ | customize | `string` | Extra SQL options |
76
+
77
+ ### Example Schema creation & Model Creation
51
78
 
52
79
  ```javascript
80
+ const { Schema, Model, sqlTypeMap } = require("@mlagie/sql-connector");
81
+
53
82
  const userSchema = new Schema({
54
- id: {
55
- type: Number,
56
- auto_increment: true,
57
- primary_key: true
58
- },
59
- email: {
60
- type: String,
61
- length: 255,
62
- unique: true,
63
- required: true
64
- },
65
- status: {
66
- type: String,
67
- enum: ['active', 'inactive', 'pending'],
68
- default: 'pending'
69
- }
83
+ id: {
84
+ type: Number,
85
+ auto_increment: true,
86
+ primary_key: true
87
+ },
88
+ group_uuid: {
89
+ type: String,
90
+ required: true,
91
+ primary_key: true,
92
+ length: 36
93
+ },
94
+ email: {
95
+ type: String,
96
+ length: 255,
97
+ unique: true,
98
+ required: true
99
+ },
100
+ status: {
101
+ type: String,
102
+ enum: ['active', 'inactive', 'pending'],
103
+ default: 'pending'
104
+ },
105
+ uuid: {
106
+ type: String,
107
+ required: true,
108
+ primary_key: true,
109
+ length: 36
110
+ },
111
+ my_uuid: {
112
+ type: String,
113
+ required: true,
114
+ length: 36
115
+ },
116
+ created_at: {
117
+ type: Date,
118
+ default: sqlTypeMap.CurrentTimestamp
119
+ }
120
+
121
+ module.exports = new Model("User", userSchema);
122
+
70
123
  });
71
124
  ```
72
125
 
@@ -92,25 +145,188 @@ Important: do not set both `primary_key: true` and `unique: true` on the same fi
92
145
 
93
146
  Main methods:
94
147
 
95
- - `save(data)` inserts a row
96
- - `findOne(filter, fields)` fetches a single row
97
- - `find(filter, fields)` fetches multiple rows
98
- - `findAll(options)` supports advanced queries
99
- - `count(filter)` counts rows
100
- - `customRequest(custom)` runs a custom SQL query
101
- - `delete(filter)` deletes a row
102
- - `dropTable()` drops the table
103
- - `generate_uuid()` generates a unique UUID
104
- - `Model.createAllTables()` creates tables in dependency order
148
+ - `save(data)` Inserts a row
149
+ - `find(options)` Retrieves entries from the table.
150
+ - `count(filter)` Counts rows
151
+ - `customRequest(custom)` Runs a custom SQL query
152
+ - `delete(filter)` Deletes a row
153
+ - `dropTable()` Drops the table
154
+ - `generate_uuid()` Generates a unique UUID
105
155
 
106
156
  ```javascript
107
157
  const userModel = new Model('users', userSchema);
108
158
 
109
- await Model.createAllTables();
159
+ await Model.syncAllTables();
110
160
  await userModel.save({ email: 'user@example.com', status: 'active' });
111
161
 
112
- const user = await userModel.findOne({ email: 'user@example.com' });
113
- await userModel.delete({ email: 'user@example.com' });
162
+ const user = await userModel.find({ where: { email: 'user@example.com' }});
163
+ await user[0].deleteOne();
164
+ ```
165
+
166
+ ## save function
167
+
168
+ Saves data to the database table.
169
+
170
+ - **Parameters** `data` *(Object)* - The data to insert into the table.
171
+ - **Returns** `Promise<Object>` - A promise that resolves with the result of the insertion.
172
+ - **Throws** `Error` - Throws an error if the insert fails.
173
+
174
+ ```js
175
+ const User = require("user");
176
+
177
+ async function createUser(email, stat) {
178
+ if (!email || !stat) {
179
+ console.error("Email & stat is required");
180
+ return;
181
+ }
182
+ await User.save({ email: email, status: stat });
183
+
184
+ }
185
+ ```
186
+
187
+ ## find function
188
+
189
+ Retrieves entries from the table.
190
+
191
+ - **Parameters** `options` *(Object)* - Query options
192
+ - **Parameters** `options.select` *(string[])* - Fields to be returned.
193
+ - **Parameters** `options.where` *(Object)* - Filters (key/value).
194
+ - **Parameters** `options.order` *(Array)* - Ex: [['points', 'DESC']]
195
+ - **Parameters** `options.limit` *(number)* - Limit of results.
196
+ - **Returns** `Promise<Array<ModelInstance>>`
197
+
198
+ ### find Options
199
+
200
+ | Option | Type | Description | Example |
201
+ |------------|-----------------|----------------------------------------------------------|----------------------------------------------|
202
+ | `select` | Array | Fields or transformations to retrieve | `['date_day']` |
203
+ | `where` | Object / String | Filtering conditions | `{ project_id: 1 }` |
204
+ | `groupBy` | Array | Fields used to group results | `['period']` |
205
+ | `orderBy` | Array | Sorting rules | `[{ field: 'date_day', direction: 'DESC' }]` |
206
+ | `having` | String | HAVING clause for aggregated queries | `'SUM(total_runs) > 100'` |
207
+ | `limit` | Number | Limits the number of results | `100` |
208
+
209
+ ## Example find
210
+
211
+ ```js
212
+ const User = require("user");
213
+
214
+ User.find({
215
+ select: [
216
+ { dateFormat: ['date_day', '%Y-%m'], as: 'period' },
217
+ { sum: 'error' },
218
+ { sum: 'reload' },
219
+ ],
220
+ groupBy: ['period'],
221
+ orderBy: [{ field: 'period', direction: 'ASC' }],
222
+ limit: 10
223
+ });
224
+ ```
225
+
226
+ ```js
227
+ const User = require("user");
228
+
229
+ User.find({
230
+ select: [
231
+ "email"
232
+ ],
233
+ where: {
234
+ id: 1
235
+ }
236
+ })
237
+ ```
238
+
239
+ ## count function
240
+
241
+ Counts the number of records matching the given filter.
242
+
243
+ - **Parameters** `filter` *(Object)* The filter criteria for the query. Should be an object where keys are column names and values are the values to filter by.
244
+ - **Returns** `Promise<ModelInstance|number>` - A promise that resolves to a `ModelInstance` if a record is found, or `0` if no records match the filter.
245
+
246
+ ## Example count
247
+
248
+ ```js
249
+ const User = require("user");
250
+
251
+ User.count({
252
+ id: id
253
+ })
254
+ ```
255
+
256
+ ## customRequest function
257
+
258
+ The customRequest function allows you to execute SQL queries that are not supported by sql-connector; this could be in queries where the keywords are not yet implemented.
259
+
260
+ - **Parameters** `custom` *(string)* The custom SQL_request query to execute.
261
+ - **Returns** `Promise<void>` A promise that resolves when the query is executed.
262
+ - **Throws** `Error` Throws an error if query execution fails.
263
+
264
+ ## Example customRequest
265
+
266
+ ```js
267
+ const User = require("user");
268
+
269
+ User.customRequest("SELECT id, email, status
270
+ FROM users
271
+ WHERE status IN ('active', 'pending')
272
+ AND email LIKE '%gmail.com';")
273
+ ```
274
+
275
+ ## delete function
276
+
277
+ Deletes an entry from the SQL table that matches the provided filter.
278
+
279
+ - **Parameters** `filter` *(Object)* An object representing the filter conditions for deletion.
280
+ - **Returns** `Promise<number>` A promise that resolves to 0 if no rows were deleted, * or to a ModelInstance representing the deleted row.
281
+ - **Throws** `Error` Throws an error if the SQL query fails.
282
+
283
+ ## Example delete
284
+
285
+ ```js
286
+ const User = require("user");
287
+
288
+ User.delete({
289
+ email: my@gmail.com
290
+ })
291
+ ```
292
+
293
+ ## dropTable function
294
+
295
+ Asynchronously drops a table if it exists in the database.
296
+
297
+ This function constructs a SQL_request query to drop a table with the name specified by the `this.name` property. It then executes the query using a promise-based approach.
298
+ If the query is successful, the result is logged to the console.
299
+ If an error occurs during the execution of the query, an error message is logged.
300
+
301
+ - **Returns** `Promise<void>` A promise that resolves when the query execution is complete.
302
+
303
+ ## Example dropTable
304
+
305
+ ```js
306
+ const User = require("user");
307
+
308
+ User.dropTable();
309
+ ```
310
+
311
+ ## generate_uuid function
312
+
313
+ Generates a unique UUID for the current model.
314
+ This function generates a UUID using the SQL_request `UUID()` function and checks if the generated UUID already exists in the database for the current model. If the UUID is unique, it is returned.
315
+ Otherwise, the function resolves to `null`.
316
+
317
+ - **Parameters** `string` var_uuid By default, it is set to uuid.
318
+ - **Returns** `Promise<string|null>` A promise that resolves to a unique UUID string if successful, or `null` if an error occurs or the UUID is not unique.
319
+ - **Throws** `Error` If there is an error executing the SQL_request query.
320
+
321
+ ## Example generate_uuid
322
+
323
+ ```js
324
+ const User = require("user");
325
+
326
+ const uuid = await User.generate_uuid();
327
+ const my_uuid = await User.generate_uuid("my_uuid");
328
+
329
+ await User.save{ email: "user@example.com", status: "active", uuid: uuid, my_uuid: my_uuid }
114
330
  ```
115
331
 
116
332
  ## Model instances
@@ -122,8 +338,8 @@ await userModel.delete({ email: 'user@example.com' });
122
338
  - `deleteOne()` deletes the instance row
123
339
  - `customRequest(custom)` runs a custom query
124
340
 
125
- ```javascript
126
- const userInstance = new ModelInstance('users', { email: 'user@example.com' });
341
+ ```js
342
+ const userInstance = await find({ select: "users", where: { email: 'user@example.com' }})[0];
127
343
 
128
344
  await userInstance.updateOne({ status: 'inactive' });
129
345
  await userInstance.deleteOne();
@@ -155,4 +371,4 @@ module.exports = client => {
155
371
 
156
372
  ## Summary
157
373
 
158
- sql-connector provides a small layer to connect to MySQL, describe schemas, synchronize tables, and manipulate data with typed models.
374
+ sql-connector provides a small layer to connect to MySQL, describe schemas, synchronize tables, and manipulate data with typed models.
package/docs/fr/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Documentation du module sql-connector
2
2
 
3
+ ![GitHub package.json version](https://img.shields.io/github/package-json/v/lagie-marin/sql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/d18m/%40mlagie%2Fsql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/dw/%40mlagie%2Fsql-connector?color=#008000) ![GitHub followers](https://img.shields.io/github/followers/lagie-marin?style=plastic&color=color%3D%23008000) ![GitHub repo size](https://img.shields.io/github/repo-size/lagie-marin/sql-connector?color=%green)
4
+ ![GitHub last commit](https://img.shields.io/github/last-commit/lagie-marin/sql-connector)
5
+
3
6
  [English](../../README.md) | Français
4
7
 
5
8
  Le module sql-connector permet de gérer des connexions MySQL, de définir des schémas, de synchroniser automatiquement des tables et d'exposer des modèles pour manipuler les données simplement.
@@ -36,18 +39,18 @@ await logout();
36
39
 
37
40
  `Schema` décrit la structure d'une table. Chaque champ peut utiliser les propriétés suivantes.
38
41
 
39
- | Propriété | Type | Description |
40
- |---|---|---|
41
- | type | `SqlType` ou `{ name: SqlType }` | Type SQL du champ |
42
- | length | `number` | Longueur maximale |
43
- | required | `boolean` | Champ obligatoire |
44
- | default | `any` | Valeur par défaut |
45
- | unique | `boolean` | Valeur unique |
46
- | auto_increment | `boolean` | Auto-incrément |
47
- | foreignKey | `string` | Référence de clé étrangère |
48
- | enum | `string[]` | Liste de valeurs autorisées |
49
- | primary_key | `boolean` | Clé primaire |
50
- | customize | `string` | Options SQL additionnelles |
42
+ | Propriété | Type | Description |
43
+ |----------------|----------------------------------|-----------------------------|
44
+ | type | `SqlType` ou `{ name: SqlType }` | Type SQL du champ |
45
+ | length | `number` | Longueur maximale |
46
+ | required | `boolean` | Champ obligatoire |
47
+ | default | `any` | Valeur par défaut |
48
+ | unique | `boolean` | Valeur unique |
49
+ | auto_increment | `boolean` | Auto-incrément |
50
+ | foreignKey | `string` | Référence de clé étrangère |
51
+ | enum | `string[]` | Liste de valeurs autorisées |
52
+ | primary_key | `boolean` | Clé primaire |
53
+ | customize | `string` | Options SQL additionnelles |
51
54
 
52
55
  ```javascript
53
56
  const userSchema = new Schema({
@@ -66,7 +69,22 @@ const userSchema = new Schema({
66
69
  type: String,
67
70
  enum: ['active', 'inactive', 'pending'],
68
71
  default: 'pending'
69
- }
72
+ },
73
+ uuid: {
74
+ type: String,
75
+ required: true,
76
+ primary_key: true,
77
+ length: 36
78
+ },
79
+ my_uuid: {
80
+ type: String,
81
+ required: true,
82
+ length: 36
83
+ },
84
+ created_at: {
85
+ type: Date,
86
+ default: sqlTypeMap.CurrentTimestamp
87
+ }
70
88
  });
71
89
  ```
72
90
 
@@ -93,24 +111,190 @@ Point important: ne combinez pas `primary_key: true` et `unique: true` sur le m
93
111
  Méthodes principales:
94
112
 
95
113
  - `save(data)` pour insérer une ligne
96
- - `findOne(filter, fields)` pour récupérer une seule entrée
97
114
  - `find(filter, fields)` pour récupérer plusieurs entrées
98
- - `findAll(options)` pour les recherches avancées
99
115
  - `count(filter)` pour compter les lignes
100
116
  - `customRequest(custom)` pour exécuter une requête SQL personnalisée
101
117
  - `delete(filter)` pour supprimer une entrée
102
118
  - `dropTable()` pour supprimer la table
103
119
  - `generate_uuid()` pour générer un UUID unique
104
- - `Model.createAllTables()` pour créer toutes les tables dans le bon ordre
105
120
 
106
121
  ```javascript
107
122
  const userModel = new Model('users', userSchema);
108
123
 
109
- await Model.createAllTables();
124
+ await Model.syncAllTables();
110
125
  await userModel.save({ email: 'user@example.com', status: 'active' });
111
126
 
112
- const user = await userModel.findOne({ email: 'user@example.com' });
113
- await userModel.delete({ email: 'user@example.com' });
127
+ const user = await userModel.find({ where: { email: 'user@example.com' }});
128
+ await user[0].deleteOne();
129
+ ```
130
+
131
+ ## Fonction save
132
+
133
+ Enregistre les données dans la table de la base de données.
134
+
135
+ - **Parameters** `data` *(Object)* - Les données à insérer dans la table.
136
+ - **Returns** `Promise<Object>` - Une promesse avec le résultat de l'insertion.
137
+ - **Throws** `Error` - Lève une erreur si l'insertion échoue.
138
+
139
+ ```js
140
+ const User = require("user");
141
+
142
+ async function createUser(email, stat) {
143
+ if (!email || !stat) {
144
+ console.error("Email & stat is required");
145
+ return;
146
+ }
147
+ await User.save({ email: email, status: stat });
148
+
149
+ }
150
+ ```
151
+
152
+ ## Fonction find
153
+
154
+ Récupère des entrées de la table.
155
+
156
+ - **Parameters** `options` *(Object)* - Options de requête
157
+ - **Parameters** `options.select` *(string[])* - Champs à renvoyer.
158
+ - **Parameters** `options.where` *(Object)* - Filtre (key/value).
159
+ - **Parameters** `options.order` *(Array)* - Ex: [['points', 'DESC']]
160
+ - **Parameters** `options.limit` *(number)* - Limite de résultats.
161
+ - **Returns** `Promise<Array<ModelInstance>>`
162
+
163
+ ### Options de find
164
+
165
+ | Option | Type | Description | Example |
166
+ |------------|-----------------|----------------------------------------------------------|----------------------------------------------|
167
+ | `select` | Array | Champs ou transformations à récupérer | `['date_day']` |
168
+ | `where` | Object / String | Conditions de filtrage | `{ project_id: 1 }` |
169
+ | `groupBy` | Array | Champs utilisés pour regrouper les résultats | `['period']` |
170
+ | `orderBy` | Array | Règles de tri | `[{ field: 'date_day', direction: 'DESC' }]` |
171
+ | `having` | String | Clause HAVING pour les requêtes agrégées | `'SUM(total_runs) > 100'` |
172
+ | `limit` | Number | Limite le nombre de résultats | `100` |
173
+
174
+ ## Exemple find
175
+
176
+ ```js
177
+ const User = require("user");
178
+
179
+ await User.find({
180
+ select: [
181
+ { dateFormat: ['date_day', '%Y-%m'], as: 'period' },
182
+ { sum: 'error' },
183
+ { sum: 'reload' },
184
+ ],
185
+ groupBy: ['period'],
186
+ orderBy: [{ field: 'period', direction: 'ASC' }],
187
+ limit: 10
188
+ });
189
+ ```
190
+
191
+ ```js
192
+ const User = require("user");
193
+
194
+ await User.find({
195
+ select: [
196
+ "email"
197
+ ],
198
+ where: {
199
+ id: 1
200
+ }
201
+ })
202
+ ```
203
+
204
+ ## Fonction count
205
+
206
+ Compte le nombre d'enregistrements correspondant au filtre donné.
207
+
208
+ - **Parameters** `filter` *(Object)* Les critères de filtrage de la requête. Il doit s'agir d'un objet dont les clés sont les noms des colonnes et les valeurs sont les valeurs de filtrage.
209
+ - **Returns** `Promise<ModelInstance|number>` - Une promesse qui se résout en une instance `ModelInstance` si un enregistrement est trouvé, ou en `0` si aucun enregistrement ne correspond au filtre.
210
+
211
+ ## Exemple count
212
+
213
+ ```js
214
+ const User = require("user");
215
+
216
+ await User.count({
217
+ id: id
218
+ })
219
+ ```
220
+
221
+ ## Fonction customRequest
222
+
223
+ La fonction customRequest vous permet d'exécuter des requêtes SQL non prises en charge par sql-connector ; cela peut concerner des requêtes utilisant des mots-clés qui ne sont pas encore implémentés.
224
+
225
+ - **Parameters** `custom` *(string)* La requête SQL personnalisée à exécuter.
226
+ - **Returns** `Promise<void>` Valeur retournée
227
+ - **Throws** `Error` Lève une erreur si l'exécution de la requête échoue.
228
+
229
+ ## Exemple customRequest
230
+
231
+ ```js
232
+ const User = require("user");
233
+
234
+ await User.customRequest("SELECT id, email, status
235
+ FROM users
236
+ WHERE status IN ('active', 'pending')
237
+ AND email LIKE '%gmail.com';")
238
+ ```
239
+
240
+ ## Fonction delete
241
+
242
+ Supprime de la table SQL une entrée correspondant au filtre fourni.
243
+
244
+ - **Parameters** `filter` *(Object)* Un objet représentant les conditions de filtrage pour la suppression.
245
+ - **Returns** `Promise<number>` Une promesse qui se résout à 0 si aucune ligne n'a été supprimée, ou à une instance de modèle représentant la ligne supprimée.
246
+ - **Throws** `Error` Une promesse qui se résout à 0 si aucune ligne n'a été supprimée, ou à une instance de modèle représentant la ligne supprimée.
247
+
248
+ ## Exemple delete
249
+
250
+ ```js
251
+ const User = require("user");
252
+
253
+ await User.delete({
254
+ email: my@gmail.com
255
+ })
256
+ ```
257
+
258
+ ## Fonction dropTable
259
+
260
+ Supprime de manière asynchrone une table si elle existe dans la base de données.
261
+
262
+ Cette fonction construit une requête SQL pour supprimer la table dont le nom est spécifié par la propriété `this.name`. Elle exécute ensuite la requête en utilisant une approche basée sur les promesses.
263
+ Si la requête aboutit, le résultat est consigné dans la console.
264
+
265
+ En cas d'erreur lors de l'exécution de la requête, un message d'erreur est consigné.
266
+
267
+ - **Returns** `Promise<void>` Une promesse qui se résout une fois l'exécution de la requête terminée.
268
+
269
+ ## Example dropTable
270
+
271
+ ```js
272
+ const User = require("user");
273
+
274
+ await User.dropTable();
275
+ ```
276
+
277
+ ## generate_uuid function
278
+
279
+ Génère un UUID unique pour le modèle actuel.
280
+
281
+ Cette fonction génère un UUID à l'aide de la fonction `UUID()` de SQL_request et vérifie si cet UUID existe déjà dans la base de données pour le modèle actuel. Si l'UUID est unique, il est renvoyé.
282
+
283
+ Sinon, la fonction renvoie `null`.
284
+
285
+ - **Parameters** `string` var_uuid Par defaut il vaut uuid
286
+ - **Returns** `Promise<string|null>` Une promesse qui se résout en une chaîne UUID unique en cas de succès, ou en `null` si une erreur survient ou si l'UUID n'est pas unique.
287
+ - **Throws** `Error` S'il y a une erreur lors de l'exécution de la requête SQL_request.
288
+
289
+ ## Example generate_uuid
290
+
291
+ ```js
292
+ const User = require("user");
293
+
294
+ const uuid = await User.generate_uuid();
295
+ const my_uuid = await User.generate_uuid("my_uuid");
296
+
297
+ await User.save{ email: "user@example.com", status: "active", uuid: uuid, my_uuid: my_uuid }
114
298
  ```
115
299
 
116
300
  ## Instances de modèle
@@ -155,4 +339,4 @@ module.exports = client => {
155
339
 
156
340
  ## Résumé
157
341
 
158
- sql-connector fournit une couche simple pour connecter une base MySQL, décrire des schémas, synchroniser les tables et manipuler les données avec des modèles typés.
342
+ sql-connector fournit une couche simple pour connecter une base MySQL, décrire des schémas, synchroniser les tables et manipuler les données avec des modèles typés.