murmuration 1.1.3 → 1.1.9

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.
Files changed (2) hide show
  1. package/bin/statement.js +58 -17
  2. package/package.json +1 -1
package/bin/statement.js CHANGED
@@ -147,26 +147,22 @@ class Statement {
147
147
  return this;
148
148
  }
149
149
 
150
- values(object) {
151
- const columns = this.columnsFromObject(object),
152
- parameters = Object.values(object),
153
- firstIndex = 0,
154
- placeholders = columns.reduce((placeholders, column, index) => {
155
- const placeholder = this.placeholder();
156
-
157
- placeholders = (index === firstIndex) ?
158
- `${placeholder}` :
159
- `${placeholders}, ${placeholder}`;
150
+ values(objectOrArray, ...parameters) {
151
+ const objectOrArrayIsArray = Array.isArray(objectOrArray);
160
152
 
161
- return placeholders;
162
- }, EMPTY_STRING)
153
+ if (objectOrArrayIsArray) {
154
+ const array = objectOrArray,
155
+ strings = array, ///
156
+ columnsAndValues = this.columnsAndValuesFromStringsAndParameters(strings, parameters);
163
157
 
164
- this.sql = `${this.sql} (${columns}) VALUES (${placeholders})`;
158
+ this.sql = `${this.sql} ${columnsAndValues}`;
159
+ } else {
160
+ const object = objectOrArray, ///
161
+ values = this.valuesFromObject(object),
162
+ columns = this.columnsFromObject(object)
165
163
 
166
- this.parameters = [
167
- ...this.parameters,
168
- ...parameters
169
- ];
164
+ this.sql = `${this.sql} (${columns}) VALUES (${values})`;
165
+ }
170
166
 
171
167
  return this;
172
168
  }
@@ -186,6 +182,28 @@ class Statement {
186
182
  return object;
187
183
  }
188
184
 
185
+ valuesFromObject(object) {
186
+ const columns = this.columnsFromObject(object),
187
+ parameters = Object.values(object), ///
188
+ firstIndex = 0,
189
+ values = columns.reduce((values, column, index) => {
190
+ const placeholder = this.placeholder();
191
+
192
+ values = (index === firstIndex) ?
193
+ `${placeholder}` :
194
+ ` ${values}, ${placeholder}`;
195
+
196
+ return values;
197
+ }, EMPTY_STRING);
198
+
199
+ this.parameters = [
200
+ ...this.parameters,
201
+ ...parameters
202
+ ];
203
+
204
+ return values;
205
+ }
206
+
189
207
  clauseFromObject(object) {
190
208
  const columns = this.columnsFromObject(object),
191
209
  parameters = Object.values(object), ///
@@ -260,6 +278,29 @@ class Statement {
260
278
  return clause;
261
279
  }
262
280
 
281
+ columnsAndValuesFromStringsAndParameters(strings, parameters) {
282
+ const stringsLength = strings.length,
283
+ lastIndex = stringsLength - 1,
284
+ columnsAndValues = strings.reduce((columnsAndValues, string, index) => {
285
+ if (index < lastIndex) {
286
+ const placeholder = this.placeholder();
287
+
288
+ columnsAndValues = `${columnsAndValues}${string}${placeholder}`
289
+ } else {
290
+ columnsAndValues = `${columnsAndValues}${string}`;
291
+ }
292
+
293
+ return columnsAndValues;
294
+ }, EMPTY_STRING);
295
+
296
+ this.parameters = [
297
+ ...this.parameters,
298
+ ...parameters
299
+ ];
300
+
301
+ return columnsAndValues;
302
+ }
303
+
263
304
  execute() {
264
305
  this.query ?
265
306
  query(this.connection, this.sql, ...this.parameters, this.queryHandler) :
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "murmuration",
3
3
  "author": "James Smith",
4
- "version": "1.1.3",
4
+ "version": "1.1.9",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/murmuration",
7
7
  "description": "Database connections, transactions and migrations.",