alasql 0.0.50 → 0.0.52

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 (72) hide show
  1. package/.bower.json +44 -3
  2. package/CHANGELOG.md +9 -0
  3. package/README.md +13 -4
  4. package/RELEASES.md +4 -2
  5. package/alasql.js +772 -598
  6. package/console/alasql.js +8 -8
  7. package/console/alasql.min.js +9 -9
  8. package/dist/alasql-worker.js +1 -1
  9. package/dist/alasql.js +772 -598
  10. package/dist/alasql.js.map +1 -1
  11. package/dist/alasql.min.js +9 -9
  12. package/examples/country/city.js +16 -0
  13. package/examples/nodesample.js +16 -0
  14. package/examples/other/test.js +20 -0
  15. package/examples/param.js +4 -0
  16. package/examples/promise.js +10 -0
  17. package/examples/simple/ex102.js +10 -0
  18. package/examples/simple/jquery.js +6 -0
  19. package/examples/sqlite/test.js +5 -0
  20. package/gulpfile.js +386 -0
  21. package/package.json +1 -1
  22. package/src/05copyright.js +1 -1
  23. package/src/10start.js +1 -1
  24. package/src/15utility.js +3 -3
  25. package/src/17alasql.js +6 -0
  26. package/src/38query.js +56 -9
  27. package/src/39dojoin.js +4 -1
  28. package/src/40select.js +55 -17
  29. package/src/420from.js +17 -4
  30. package/src/421join.js +14 -4
  31. package/src/423groupby.js +5 -3
  32. package/src/424select.js +36 -5
  33. package/src/55functions.js +12 -0
  34. package/src/70insert.js +1 -1
  35. package/src/72delete.js +206 -0
  36. package/src/84from.js +1 -0
  37. package/src/alasqlparser.jison +27 -7
  38. package/src/alasqlparser.js +560 -549
  39. package/test/callback/cb1.js +59 -0
  40. package/test/callback/cb2.js +45 -0
  41. package/test/future/test119.js +77 -0
  42. package/test/future/test123.js +91 -0
  43. package/test/future/test131.js +30 -0
  44. package/test/future/test132.js +69 -0
  45. package/test/future/test134.js +51 -0
  46. package/test/future/test135.js +28 -0
  47. package/test/future/test136.js +23 -0
  48. package/test/future/test147.js +27 -0
  49. package/test/graph/CREATE CLASS G1 +39 -0
  50. package/test/graph/README.md +3 -0
  51. package/test/graph/SEARCH.md +110 -0
  52. package/test/graph/idea.txt +22 -0
  53. package/test/graph/ides 150428.txt +24 -0
  54. package/test/graph/index.html +68 -0
  55. package/test/graph/miserables.json +337 -0
  56. package/test/index.html +10 -1
  57. package/test/minisql/minisql.js +377 -0
  58. package/test/test018.js +0 -3
  59. package/test/test132.js +18 -1
  60. package/test/test193.js +1 -1
  61. package/test/test240.js +132 -0
  62. package/test/test245.js +100 -0
  63. package/test/test247.js +84 -0
  64. package/test/test266.js +117 -0
  65. package/test/test267.js +79 -0
  66. package/test/test268.js +92 -0
  67. package/test/test269.js +123 -0
  68. package/test/test270.js +299 -0
  69. package/test/test271.js +22 -0
  70. package/test/test272.js +66 -0
  71. package/test/test273.js +69 -0
  72. package/test/test274.js +31 -0
package/gulpfile.js CHANGED
@@ -1,3 +1,388 @@
1
+ <<<<<<< HEAD
2
+ //
3
+ // gulpfile.js
4
+ // Gulp for Alasql
5
+ // Дата: 06.08.2014
6
+ // (c) 2014, Andrey Gershun
7
+ //
8
+
9
+ var gulp = require('gulp');
10
+ module.exports = gulp;
11
+ //var connect = require('gulp-connect');
12
+ //var livereload = require('gulp-livereload');
13
+ //var changed = require('gulp-changed');
14
+ //var jison = require('gulp-jison');
15
+ var concat = require('gulp-concat-sourcemap');
16
+ //var uglify = require('gulp-uglify');
17
+ //var jisonLex = require('gulp-jison-lex');
18
+ var shell = require('gulp-shell');
19
+
20
+
21
+ gulp.task('js-merge-worker', function () {
22
+ return gulp.src([
23
+ './src/05copyright.js',
24
+ './src/99worker-start.js',
25
+ './src/99worker.js',
26
+ './src/99worker-finish.js',
27
+ ])
28
+ // .pipe(changed('./dist/'))
29
+ .pipe(concat('alasql-worker.js'))
30
+ // .pipe(uglify())
31
+ .pipe(gulp.dest('./dist'))
32
+ });
33
+
34
+ gulp.task('js-merge', function () {
35
+ return gulp.src([
36
+ './src/05copyright.js',
37
+ './src/10start.js',
38
+ './src/alasqlparser.js',
39
+ './src/12pretty.js',
40
+ './src/15utility.js',
41
+ './src/16comments.js',
42
+ './src/17alasql.js',
43
+ './src/20database.js',
44
+ './src/21transaction.js',
45
+ // './src/22store.js',
46
+ './src/23table.js',
47
+ './src/24view.js',
48
+ './src/25queryclass.js',
49
+ './src/28yy.js',
50
+ './src/30statements.js',
51
+ './src/38query.js',
52
+ './src/39dojoin.js',
53
+ './src/40select.js',
54
+ './src/41exists.js',
55
+ './src/420from.js',
56
+ './src/421join.js',
57
+ './src/422where.js',
58
+ './src/423groupby.js',
59
+ './src/424select.js',
60
+ './src/425having.js',
61
+ './src/426orderby.js',
62
+ './src/43rollup.js',
63
+ './src/44defcols.js',
64
+ './src/45union.js',
65
+ './src/46apply.js',
66
+ './src/47over.js',
67
+ './src/50expression.js',
68
+ './src/52linq.js',
69
+ './src/55functions.js',
70
+ './src/56datetime.js',
71
+ './src/57case.js',
72
+ './src/58json.js',
73
+ './src/59convert.js',
74
+ './src/60createtable.js',
75
+ './src/61date.js',
76
+ './src/62droptable.js',
77
+ './src/64altertable.js',
78
+ './src/65createindex.js',
79
+ './src/66dropindex.js',
80
+ './src/67withselect.js',
81
+ './src/68if.js',
82
+ './src/69while.js',
83
+ './src/70insert.js',
84
+ './src/72delete.js',
85
+ './src/74update.js',
86
+ './src/74update.js',
87
+ './src/75merge.js',
88
+ './src/76usedatabase.js',
89
+ './src/77declare.js',
90
+ './src/78show.js',
91
+ './src/79set.js',
92
+ './src/80console.js',
93
+ './src/81commit.js',
94
+ './src/83into.js',
95
+ './src/84from.js',
96
+ './src/85help.js',
97
+ './src/86print.js',
98
+ './src/87source.js',
99
+ './src/88require.js',
100
+ './src/89assert.js',
101
+ './src/90websql.js',
102
+ './src/91indexeddb.js',
103
+ './src/92localstorage.js',
104
+ './src/93sqlite.js',
105
+ './src/94filestorage.js',
106
+ './src/97saveas.js',
107
+ './src/FileSaver.js',
108
+ './src/98finish.js',
109
+ './src/99worker.js'
110
+ ])
111
+ // .pipe(changed('./dist/'))
112
+ .pipe(concat('alasql.js'))
113
+ // .pipe(uglify())
114
+ .pipe(gulp.dest('./dist'))
115
+ });
116
+
117
+
118
+ gulp.task('jison-compile', function () {
119
+ return gulp.src('./src/*.jison', {read: false})
120
+ .pipe(shell([
121
+ 'jison ./src/alasqlparser.jison -o ./src/alasqlparser.js',
122
+ ]));
123
+ });
124
+
125
+
126
+ gulp.task('uglify', function () {
127
+ return gulp.src('./alasql.js', {read: false})
128
+ .pipe(shell([
129
+ 'uglifyjs dist/alasql.js -o dist/alasql.min.js',
130
+ 'uglifyjs dist/alasql-worker.js -o dist/alasql-worker.min.js',
131
+ ]));
132
+ });
133
+
134
+ gulp.task('copy-dist', function(){
135
+ gulp.src(['./dist/alasql.js','./alasql.js.map'])
136
+ .pipe(gulp.dest('./'));
137
+ });
138
+
139
+ gulp.task('copy-dist-org', function(){
140
+ gulp.src(['./dist/alasql.min.js','./dist/alasql-worker.min.js'])
141
+ .pipe(gulp.dest('./console/'));
142
+ });
143
+
144
+ // Additional task to update alasql.org/console directory
145
+ gulp.task('copy-console-org', function(){
146
+ gulp.src(['./console/*'])
147
+ .pipe(gulp.dest('../alasql-org/console/'));
148
+ });
149
+
150
+ // , {
151
+ // templateData: {
152
+ // f: function (s) {
153
+ // return s.replace(/$/, '.bak')
154
+ // }
155
+ // }
156
+ // }))
157
+
158
+ // gulp.task('jison-compile', function () {
159
+ // return gulp.src('./src/*.jison')
160
+ // .pipe(changed('./dist/'))
161
+ // .pipe(jison({ moduleType: 'commonjs' }))
162
+ // .pipe(gulp.dest('./src/'))
163
+ // // .pipe(livereload());
164
+ // });
165
+
166
+ // gulp.task('jison-lex-compile', function () {
167
+ // return gulp.src('./src/*.jisonlex')
168
+ // // .pipe(changed('./dist/'))
169
+ // .pipe(jisonLex())
170
+ // .pipe(gulp.dest('./src2/'))
171
+ // // .pipe(livereload());
172
+ // });
173
+
174
+
175
+ // Главная задача
176
+ gulp.task('default', ['js-merge' /*, 'jison-compile', 'jison-lex-compile' */], function(){
177
+ gulp.watch('./src/*.js',function(){ gulp.run('js-merge'); });
178
+ gulp.watch('./src/99worker*.js',function(){ gulp.run('js-merge-worker'); });
179
+ gulp.watch('./src/*.jison',function(){ gulp.run('jison-compile'); });
180
+ gulp.watch('./dist/alasql.js',function(){ gulp.run('uglify'); });
181
+ gulp.watch('./dist/alasql.min.js',function(){
182
+ gulp.run('copy-dist');
183
+ gulp.run('copy-dist-org');
184
+ });
185
+ gulp.watch('./dist/alasql-worker.js',function(){
186
+ gulp.run('copy-dist');
187
+ gulp.run('copy-dist-org');
188
+ });
189
+ gulp.watch('./console/*',function(){ gulp.run('copy-console-org'); });
190
+ // gulp.watch('./src/*.jison',function(){ gulp.run('jison-compile'); gulp.run('js-merge');});
191
+ // gulp.watch('./src/*.jisonlex',function(){ gulp.run('jison-lex-compile'); gulp.run('js-merge');});
192
+ });
193
+ ||||||| merged common ancestors
194
+ //
195
+ // gulpfile.js
196
+ // Gulp for Alasql
197
+ // Дата: 06.08.2014
198
+ // (c) 2014, Andrey Gershun
199
+ //
200
+
201
+ var gulp = require('gulp');
202
+ module.exports = gulp;
203
+ //var connect = require('gulp-connect');
204
+ //var livereload = require('gulp-livereload');
205
+ //var changed = require('gulp-changed');
206
+ //var jison = require('gulp-jison');
207
+ var concat = require('gulp-concat-sourcemap');
208
+ //var uglify = require('gulp-uglify');
209
+ //var jisonLex = require('gulp-jison-lex');
210
+ var shell = require('gulp-shell');
211
+
212
+
213
+ gulp.task('js-merge-worker', function () {
214
+ return gulp.src([
215
+ './src/05copyright.js',
216
+ './src/99worker-start.js',
217
+ './src/99worker.js',
218
+ './src/99worker-finish.js',
219
+ ])
220
+ // .pipe(changed('./dist/'))
221
+ .pipe(concat('alasql-worker.js'))
222
+ // .pipe(uglify())
223
+ .pipe(gulp.dest('./dist'))
224
+ });
225
+
226
+ gulp.task('js-merge', function () {
227
+ return gulp.src([
228
+ './src/05copyright.js',
229
+ './src/10start.js',
230
+ './src/alasqlparser.js',
231
+ './src/12pretty.js',
232
+ './src/15utility.js',
233
+ './src/16comments.js',
234
+ './src/17alasql.js',
235
+ './src/20database.js',
236
+ './src/21transaction.js',
237
+ // './src/22store.js',
238
+ './src/23table.js',
239
+ './src/24view.js',
240
+ './src/25queryclass.js',
241
+ './src/28yy.js',
242
+ './src/30statements.js',
243
+ './src/38query.js',
244
+ './src/39dojoin.js',
245
+ './src/40select.js',
246
+ './src/41exists.js',
247
+ './src/420from.js',
248
+ './src/421join.js',
249
+ './src/422where.js',
250
+ './src/423groupby.js',
251
+ './src/424select.js',
252
+ './src/425having.js',
253
+ './src/426orderby.js',
254
+ './src/43rollup.js',
255
+ './src/44defcols.js',
256
+ './src/45union.js',
257
+ './src/46apply.js',
258
+ './src/47over.js',
259
+ './src/50expression.js',
260
+ './src/52linq.js',
261
+ './src/55functions.js',
262
+ './src/56datetime.js',
263
+ './src/57case.js',
264
+ './src/58json.js',
265
+ './src/59convert.js',
266
+ './src/60createtable.js',
267
+ './src/61date.js',
268
+ './src/62droptable.js',
269
+ './src/64altertable.js',
270
+ './src/65createindex.js',
271
+ './src/66dropindex.js',
272
+ './src/67withselect.js',
273
+ './src/68if.js',
274
+ './src/69while.js',
275
+ './src/70insert.js',
276
+ './src/72delete.js',
277
+ './src/74update.js',
278
+ './src/74update.js',
279
+ './src/75merge.js',
280
+ './src/76usedatabase.js',
281
+ './src/77declare.js',
282
+ './src/78show.js',
283
+ './src/79set.js',
284
+ './src/80console.js',
285
+ './src/81commit.js',
286
+ './src/83into.js',
287
+ './src/84from.js',
288
+ './src/85help.js',
289
+ './src/86print.js',
290
+ './src/87source.js',
291
+ './src/88require.js',
292
+ './src/89assert.js',
293
+ './src/90websql.js',
294
+ './src/91indexeddb.js',
295
+ './src/92localstorage.js',
296
+ './src/93sqlite.js',
297
+ './src/94filestorage.js',
298
+ './src/97saveas.js',
299
+ './src/FileSaver.js',
300
+ './src/98finish.js',
301
+ './src/99worker.js'
302
+ ])
303
+ // .pipe(changed('./dist/'))
304
+ .pipe(concat('alasql.js'))
305
+ // .pipe(uglify())
306
+ .pipe(gulp.dest('./dist'))
307
+ });
308
+
309
+
310
+ gulp.task('jison-compile', function () {
311
+ return gulp.src('./src/*.jison', {read: false})
312
+ .pipe(shell([
313
+ 'jison ./src/alasqlparser.jison -o ./src/alasqlparser.js',
314
+ ]));
315
+ });
316
+
317
+
318
+ gulp.task('uglify', function () {
319
+ return gulp.src('./alasql.js', {read: false})
320
+ .pipe(shell([
321
+ 'uglifyjs dist/alasql.js -o dist/alasql.min.js',
322
+ 'uglifyjs dist/alasql-worker.js -o dist/alasql-worker.min.js',
323
+ ]));
324
+ });
325
+
326
+ gulp.task('copy-dist', function(){
327
+ gulp.src(['./dist/alasql.js','./alasql.js.map'])
328
+ .pipe(gulp.dest('./'));
329
+ });
330
+
331
+ gulp.task('copy-dist-org', function(){
332
+ gulp.src(['./dist/alasql.min.js','./dist/alasql-worker.min.js'])
333
+ .pipe(gulp.dest('./console/'));
334
+ });
335
+
336
+ // Additional task to update alasql.org/console directory
337
+ gulp.task('copy-console-org', function(){
338
+ gulp.src(['./console/*'])
339
+ .pipe(gulp.dest('../alasql-org/console/'));
340
+ });
341
+
342
+ // , {
343
+ // templateData: {
344
+ // f: function (s) {
345
+ // return s.replace(/$/, '.bak')
346
+ // }
347
+ // }
348
+ // }))
349
+
350
+ // gulp.task('jison-compile', function () {
351
+ // return gulp.src('./src/*.jison')
352
+ // .pipe(changed('./dist/'))
353
+ // .pipe(jison({ moduleType: 'commonjs' }))
354
+ // .pipe(gulp.dest('./src/'))
355
+ // // .pipe(livereload());
356
+ // });
357
+
358
+ // gulp.task('jison-lex-compile', function () {
359
+ // return gulp.src('./src/*.jisonlex')
360
+ // // .pipe(changed('./dist/'))
361
+ // .pipe(jisonLex())
362
+ // .pipe(gulp.dest('./src2/'))
363
+ // // .pipe(livereload());
364
+ // });
365
+
366
+
367
+ // Главная задача
368
+ gulp.task('default', ['js-merge' /*, 'jison-compile', 'jison-lex-compile' */], function(){
369
+ gulp.watch('./src/*.js',function(){ gulp.run('js-merge'); });
370
+ gulp.watch('./src/99worker*.js',function(){ gulp.run('js-merge-worker'); });
371
+ gulp.watch('./src/*.jison',function(){ gulp.run('jison-compile'); });
372
+ gulp.watch('./dist/alasql.js',function(){ gulp.run('uglify'); });
373
+ gulp.watch('./dist/alasql.min.js',function(){
374
+ gulp.run('copy-dist');
375
+ gulp.run('copy-dist-org');
376
+ });
377
+ gulp.watch('./dist/alasql-worker.js',function(){
378
+ gulp.run('copy-dist');
379
+ gulp.run('copy-dist-org');
380
+ });
381
+ gulp.watch('./console/*',function(){ gulp.run('copy-console-org'); });
382
+ // gulp.watch('./src/*.jison',function(){ gulp.run('jison-compile'); gulp.run('js-merge');});
383
+ // gulp.watch('./src/*.jisonlex',function(){ gulp.run('jison-lex-compile'); gulp.run('js-merge');});
384
+ });
385
+ =======
1
386
  //
2
387
  // gulpfile.js
3
388
  // Gulp for Alasql
@@ -191,3 +576,4 @@ gulp.task('default', ['js-merge' /*, 'jison-compile', 'jison-lex-compile' */], f
191
576
  // gulp.watch('./src/*.jison',function(){ gulp.run('jison-compile'); gulp.run('js-merge');});
192
577
  // gulp.watch('./src/*.jisonlex',function(){ gulp.run('jison-lex-compile'); gulp.run('js-merge');});
193
578
  });
579
+ >>>>>>> release/0.0.46
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "alasql",
3
3
  "description": "AlaSQL - JavaScript SQL database and data manipulation library",
4
- "version": "0.0.50",
4
+ "version": "0.0.52",
5
5
  "author": "Andrey Gershun <agershun@gmail.com>",
6
6
  "directories": {
7
7
  "example": "examples",
@@ -2,7 +2,7 @@
2
2
  // alasql.js
3
3
  // AlaSQL - JavaScript SQL database
4
4
  // Date: 22.04.2015
5
- // Version: 0.0.50
5
+ // Version: 0.0.52
6
6
  // (ñ) 2014-2015, Andrey Gershun
7
7
  //
8
8
 
package/src/10start.js CHANGED
@@ -78,5 +78,5 @@ var alasql = function(sql, params, cb, scope) {
78
78
  };
79
79
 
80
80
  /** Current version of alasql */
81
- alasql.version = "0.0.50";
81
+ alasql.version = "0.0.52";
82
82
 
package/src/15utility.js CHANGED
@@ -565,11 +565,11 @@ var cloneDeep = utils.cloneDeep = function cloneDeep(obj) {
565
565
  if(obj == null || typeof(obj) != 'object')
566
566
  return obj;
567
567
 
568
- var temp = obj.constructor(); // changed
568
+ var temp = (Object.prototype.hasOwnProperty.call(obj, 'constructor') ? Object : obj.constructor)(); // changed
569
569
 
570
570
  for(var key in obj) {
571
571
  if(obj.hasOwnProperty(key)) {
572
- temp[key] = cloneDeep(obj[key]);
572
+ /* A "__proto__" key from parsed data is copied as data, never as the prototype */ if (key === '__proto__') { Object.defineProperty(temp, key, {value: cloneDeep(obj[key]), writable: true, enumerable: true, configurable: true}); } else { temp[key] = cloneDeep(obj[key]); }
573
573
  }
574
574
  }
575
575
  return temp;
@@ -649,7 +649,7 @@ var extend = utils.extend = function extend (a,b){
649
649
  if(typeof a == 'undefined') a = {};
650
650
  for(var key in b) {
651
651
  if(b.hasOwnProperty(key)) {
652
- a[key] = b[key]
652
+ /* A "__proto__" key from parsed data is copied as data, never as the prototype */ if (key === '__proto__') { Object.defineProperty(a, key, {value: b[key], writable: true, enumerable: true, configurable: true}); } else { a[key] = b[key]; }
653
653
  }
654
654
  }
655
655
  return a;
package/src/17alasql.js CHANGED
@@ -51,6 +51,12 @@ alasql.options.casesensitive = true; // Table and column names are case sensitiv
51
51
  alasql.options.logtarget = 'output'; // target for log. Values: 'console', 'output', 'id' of html tag
52
52
  alasql.options.logprompt = true; // Print SQL at log
53
53
 
54
+ // Default modifier
55
+ // values: RECORDSET, VALUE, ROW, COLUMN, MATRIX, TEXTSTRING, INDEX
56
+ alasql.options.modifier = undefined;
57
+ // How many rows to lookup to define columns
58
+ alasql.options.columnlookup = 10;
59
+
54
60
  //alasql.options.worker = false;
55
61
  // Variables
56
62
  alasql.vars = {};
package/src/38query.js CHANGED
@@ -212,16 +212,63 @@ function queryfn3(query) {
212
212
 
213
213
  // console.log('removeKeys:',query.removeKeys);
214
214
 
215
- var removeKeys = query.removeKeys;
216
- if(typeof angular != "undefined") removeKeys.push('$$hashKey');
217
- var jlen = removeKeys.length;
218
- if(jlen > 0) {
219
- for(var i=0,ilen=query.data.length;i<ilen;i++) {
220
- for(var j=0; j<jlen;j++)
221
- delete query.data[i][removeKeys[j]];
222
- }
223
- };
215
+ if(typeof query.removeKeys != 'undefined' && query.removeKeys.length > 0) {
216
+ var removeKeys = query.removeKeys;
217
+
218
+ // TODO: Check what artefacts rest from Angular.js
219
+ if(typeof angular != "undefined") removeKeys.push('$$hashKey');
220
+
221
+ // Remove from data
222
+ var jlen = removeKeys.length;
223
+ if(jlen > 0) {
224
+ for(var i=0,ilen=query.data.length;i<ilen;i++) {
225
+ for(var j=0; j<jlen;j++) {
226
+ delete query.data[i][removeKeys[j]];
227
+ }
228
+ }
229
+ };
230
+
231
+ // Remove from columns list
232
+ if(query.columns.length > 0) {
233
+ query.columns = query.columns.filter(function(column){
234
+ var found = false;
235
+ removeKeys.forEach(function(key){
236
+ if(column.columnid == key) found = true;
237
+ });
238
+ return !found;
239
+ });
240
+ }
241
+
242
+ }
243
+
244
+ if(typeof query.removeLikeKeys != 'undefined' && query.removeLikeKeys.length > 0) {
245
+
246
+ var removeLikeKeys = query.removeLikeKeys;
247
+
248
+ // Remove unused columns
249
+ // SELECT * REMOVE COLUMNS LIKE "%b"
250
+ for(var i=0,ilen=query.data.length;i<ilen;i++) {
251
+ var r = query.data[i];
252
+ for(var k in r) {
253
+ for(var j=0;j<query.removeLikeKeys.length;j++) {
254
+ if(k.match(query.removeLikeKeys[j])) {
255
+ delete r[k];
256
+ }
257
+ }
258
+ };
259
+ }
224
260
 
261
+ if(query.columns.length > 0) {
262
+ query.columns = query.columns.filter(function(column){
263
+ var found = false;
264
+ removeLikeKeys.forEach(function(key){
265
+ if(column.columnid.match(key)) found = true;
266
+ });
267
+ return !found;
268
+ });
269
+ }
270
+
271
+ }
225
272
  // console.log(query.intoallfns);
226
273
 
227
274
  // if(query.explain) {
package/src/39dojoin.js CHANGED
@@ -18,7 +18,7 @@ function doJoin (query, scope, h) {
18
18
  // console.log("last",res);
19
19
  // If there is a GROUP BY then pipe to groupping function
20
20
  if(query.groupfn) {
21
- query.groupfn(scope, query.params, query.alasql)
21
+ query.groupfn(scope, query.params, alasql)
22
22
  } else {
23
23
  // query.qwerty = 999;
24
24
  //console.log(query.qwerty, query.queriesfn && query.queriesfn.length,2);
@@ -85,6 +85,9 @@ function doJoin (query, scope, h) {
85
85
 
86
86
  // Main cycle
87
87
  var i = 0;
88
+ if(typeof data == 'undefined') {
89
+ throw new Error('Data source number '+h+' in undefined')
90
+ }
88
91
  var ilen=data.length;
89
92
  var dataw;
90
93
  // console.log(h,opt,source.data,i,source.dontcache);
package/src/40select.js CHANGED
@@ -98,6 +98,7 @@ yy.Select.prototype.compile = function(databaseid) {
98
98
  // Create variable for query
99
99
  var query = new Query();
100
100
 
101
+ // Array with columns to be removed
101
102
  query.removeKeys = [];
102
103
 
103
104
  query.explain = this.explain; // Explain
@@ -128,6 +129,10 @@ yy.Select.prototype.compile = function(databaseid) {
128
129
  } else {
129
130
  query.selectfns = this.compileSelect1(query);
130
131
  }
132
+
133
+ // Remove columns clause
134
+ this.compileRemoveColumns(query);
135
+
131
136
  // 5. Optimize WHERE and JOINS
132
137
  if(this.where) this.compileWhereJoins(query);
133
138
 
@@ -288,21 +293,42 @@ yy.Select.prototype.compile = function(databaseid) {
288
293
  };
289
294
 
290
295
  function modify(query, res) {
291
- if(query.modifier == 'VALUE') {
296
+ var modifier = query.modifier || alasql.options.modifier;
297
+ var columns = query.columns;
298
+ if(typeof columns == 'undefined' || columns.length == 0) {
299
+ // Try to create columns
300
+ if(res.length > 0) {
301
+ var allcol = {};
302
+ for(var i=0;i<Math.min(res.length,alasql.options.columnlookup||10);i++) {
303
+ for(var key in res[i]) {
304
+ allcol[key] = true;
305
+ }
306
+ }
307
+
308
+ columns = Object.keys(allcol).map(function(columnid){
309
+ return {columnid:columnid};
310
+ });
311
+ } else {
312
+ // Cannot recognize columns
313
+ columns = [];
314
+ }
315
+ }
316
+
317
+ // console.log(columns);
318
+
319
+ if(modifier == 'VALUE') {
292
320
  // console.log(222,res);
293
321
  if(res.length > 0) {
294
322
  var key;
295
- if(query.columns && query.columns.length > 0) key = query.columns[0].columnid;
323
+ if(columns && columns.length > 0) key = columns[0].columnid;
296
324
  else key = Object.keys(res[0])[0];
297
325
  res = res[0][key];
298
326
  } else {
299
327
  res = undefined;
300
328
  }
301
- } if(query.modifier == 'ROW') {
329
+ } if(modifier == 'ROW') {
302
330
  if(res.length > 0) {
303
331
  var key;
304
- if(query.columns && query.columns.length > 0) key = query.columns[0].columnid;
305
- else key = Object.keys(res[0])[0];
306
332
  var a = [];
307
333
  for(var key in res[0]) {
308
334
  a.push(res[0][key]);
@@ -311,25 +337,37 @@ function modify(query, res) {
311
337
  } else {
312
338
  res = undefined;
313
339
  }
314
- } if(query.modifier == 'COLUMN') {
340
+ } if(modifier == 'COLUMN') {
315
341
  var ar = [];
316
342
  if(res.length > 0) {
317
343
  var key;
318
- if(query.columns && query.columns.length > 0) key = query.columns[0].columnid;
344
+ if(columns && columns.length > 0) key = columns[0].columnid;
319
345
  else key = Object.keys(res[0])[0];
320
346
  for(var i=0, ilen=res.length; i<ilen; i++){
321
347
  ar.push(res[i][key]);
322
348
  }
323
349
  };
324
350
  res = ar;
325
- } if(query.modifier == 'MATRIX') {
326
- res = arrayOfArrays(res);
327
- } if(query.modifier == 'INDEX') {
351
+
352
+ } if(modifier == 'MATRIX') {
353
+ // Returns square matrix of rows
354
+ var ar = [];
355
+ for(var i=0;i<res.length;i++) {
356
+ var a = [];
357
+ var r = res[i];
358
+ for(var j=0;j<columns.length;j++) {
359
+ a.push(r[columns[j].columnid]);
360
+ }
361
+ ar.push(a);
362
+ }
363
+ res = ar;
364
+
365
+ } if(modifier == 'INDEX') {
328
366
  var ar = {};
329
367
  var key,val;
330
- if(query.columns && query.columns.length > 0) {
331
- key = query.columns[0].columnid;
332
- val = query.columns[1].columnid;
368
+ if(columns && columns.length > 0) {
369
+ key = columns[0].columnid;
370
+ val = columns[1].columnid;
333
371
  } else {
334
372
  var okeys = Object.keys(res[0]);
335
373
  key = okeys[0];
@@ -340,12 +378,12 @@ function modify(query, res) {
340
378
  }
341
379
  res = ar;
342
380
  // res = arrayOfArrays(res);
343
- } if(query.modifier == 'RECORDSET') {
344
- res = new alasql.Recordset({data:res, columns:query.columns});
381
+ } if(modifier == 'RECORDSET') {
382
+ res = new alasql.Recordset({data:res, columns:columns});
345
383
  // res = arrayOfArrays(res);
346
- } if(query.modifier == 'TEXTSTRING') {
384
+ } if(modifier == 'TEXTSTRING') {
347
385
  var key;
348
- if(query.columns && query.columns.length > 0) key = query.columns[0].columnid;
386
+ if(columns && columns.length > 0) key = columns[0].columnid;
349
387
  else key = Object.keys(res[0])[0];
350
388
  var s = '';
351
389
  for(var i=0, ilen=res.length; i<ilen; i++){