duckdb 0.4.1-dev33.0 → 0.4.1-dev341.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.
- package/Makefile +2 -2
- package/binding.gyp +8 -5
- package/lib/duckdb.js +92 -64
- package/package.json +1 -1
- package/src/connection.cpp +92 -119
- package/src/data_chunk.cpp +185 -0
- package/src/database.cpp +6 -6
- package/src/duckdb.cpp +10418 -8831
- package/src/duckdb.hpp +4323 -4065
- package/src/duckdb_node.hpp +20 -17
- package/src/parquet-amalgamation.cpp +36782 -36769
- package/src/parquet-amalgamation.hpp +71 -69
- package/src/statement.cpp +17 -12
- package/test/udf.test.js +172 -107
package/test/udf.test.js
CHANGED
|
@@ -2,148 +2,213 @@ var duckdb = require('..');
|
|
|
2
2
|
var assert = require('assert');
|
|
3
3
|
|
|
4
4
|
describe('UDFs', function() {
|
|
5
|
-
|
|
5
|
+
describe('arity', function() {
|
|
6
|
+
var db;
|
|
7
|
+
before(function(done) {
|
|
8
|
+
db = new duckdb.Database(':memory:', done);
|
|
9
|
+
});
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
it('0ary int', function(done) {
|
|
12
|
+
db.register("udf", "integer", () => 42);
|
|
13
|
+
db.all("select udf() v", function(err, rows) {
|
|
14
|
+
if (err) throw err;
|
|
15
|
+
assert.equal(rows[0].v, 42);
|
|
16
|
+
});
|
|
17
|
+
db.unregister("udf", done);
|
|
18
|
+
});
|
|
10
19
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
20
|
+
it('0ary double', function(done) {
|
|
21
|
+
db.register("udf", "double", () => 4.2);
|
|
22
|
+
db.all("select udf() v", function(err, rows) {
|
|
23
|
+
if (err) throw err;
|
|
24
|
+
assert.equal(rows[0].v, 4.2);
|
|
25
|
+
});
|
|
26
|
+
db.unregister("udf", done);
|
|
16
27
|
});
|
|
17
|
-
db.unregister("udf", done);
|
|
18
|
-
});
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
it('0ary string', function(done) {
|
|
30
|
+
db.register("udf", "varchar", () => 'hello');
|
|
31
|
+
db.all("select udf() v", function(err, rows) {
|
|
32
|
+
if (err) throw err;
|
|
33
|
+
assert.equal(rows[0].v, 'hello');
|
|
34
|
+
});
|
|
35
|
+
db.unregister("udf", done);
|
|
25
36
|
});
|
|
26
|
-
db.unregister("udf", done);
|
|
27
|
-
});
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
it('0ary int null', function(done) {
|
|
39
|
+
db.register("udf", "integer", () => undefined);
|
|
40
|
+
db.all("select udf() v", function(err, rows) {
|
|
41
|
+
if (err) throw err;
|
|
42
|
+
assert.equal(rows[0].v, undefined);
|
|
43
|
+
});
|
|
44
|
+
db.unregister("udf", done);
|
|
34
45
|
});
|
|
35
|
-
db.unregister("udf", done);
|
|
36
|
-
});
|
|
37
46
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
|
|
48
|
+
it('0ary string null', function(done) {
|
|
49
|
+
db.register("udf", "varchar", () => undefined);
|
|
50
|
+
db.all("select udf() v", function(err, rows) {
|
|
51
|
+
if (err) throw err;
|
|
52
|
+
assert.equal(rows[0].v, undefined);
|
|
53
|
+
});
|
|
54
|
+
db.unregister("udf", done);
|
|
43
55
|
});
|
|
44
|
-
db.unregister("udf", done);
|
|
45
|
-
});
|
|
46
56
|
|
|
47
57
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
it('unary int', function(done) {
|
|
59
|
+
db.register("udf", "integer", (x) => x+1);
|
|
60
|
+
db.all("select udf(42) v", function(err, rows) {
|
|
61
|
+
if (err) throw err;
|
|
62
|
+
assert.equal(rows[0].v, 43);
|
|
63
|
+
});
|
|
64
|
+
db.unregister("udf", done);
|
|
53
65
|
});
|
|
54
|
-
db.unregister("udf", done);
|
|
55
|
-
});
|
|
56
66
|
|
|
67
|
+
it('unary double', function(done) {
|
|
68
|
+
db.register("udf", "double", (x) => x);
|
|
69
|
+
db.all("select udf(4.2::double) v", function(err, rows) {
|
|
70
|
+
if (err) throw err;
|
|
71
|
+
assert.equal(rows[0].v, 4.2);
|
|
72
|
+
});
|
|
73
|
+
db.unregister("udf", done);
|
|
74
|
+
});
|
|
57
75
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
it('unary int null', function(done) {
|
|
77
|
+
db.register("udf", "integer", (x) => undefined);
|
|
78
|
+
db.all("select udf(42) v", function(err, rows) {
|
|
79
|
+
if (err) throw err;
|
|
80
|
+
assert.equal(rows[0].v, undefined);
|
|
81
|
+
});
|
|
82
|
+
db.unregister("udf", done);
|
|
63
83
|
});
|
|
64
|
-
db.unregister("udf", done);
|
|
65
|
-
});
|
|
66
84
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
|
|
86
|
+
it('unary double null', function(done) {
|
|
87
|
+
db.register("udf", "double", (x) => undefined);
|
|
88
|
+
db.all("select udf(4.2::double) v", function(err, rows) {
|
|
89
|
+
if (err) throw err;
|
|
90
|
+
assert.equal(rows[0].v, undefined);
|
|
91
|
+
});
|
|
92
|
+
db.unregister("udf", done);
|
|
72
93
|
});
|
|
73
|
-
db.unregister("udf", done);
|
|
74
|
-
});
|
|
75
94
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
95
|
+
|
|
96
|
+
it('unary string', function(done) {
|
|
97
|
+
db.register("udf", "varchar", (x) => 'hello ' + x);
|
|
98
|
+
db.all("select udf('world') v", function(err, rows) {
|
|
99
|
+
if (err) throw err;
|
|
100
|
+
assert.equal(rows[0].v, 'hello world');
|
|
101
|
+
});
|
|
102
|
+
db.unregister("udf", done);
|
|
81
103
|
});
|
|
82
|
-
db.unregister("udf", done);
|
|
83
|
-
});
|
|
84
104
|
|
|
105
|
+
it('unary string null', function(done) {
|
|
106
|
+
db.register("udf", "varchar", (x) => undefined);
|
|
107
|
+
db.all("select udf('world') v", function(err, rows) {
|
|
108
|
+
if (err) throw err;
|
|
109
|
+
assert.equal(rows[0].v, undefined);
|
|
110
|
+
});
|
|
111
|
+
db.unregister("udf", done);
|
|
112
|
+
});
|
|
85
113
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
114
|
+
it('binary int', function(done) {
|
|
115
|
+
db.register("udf", "integer", (x, y) => x + y);
|
|
116
|
+
db.all("select udf(40, 2) v", function(err, rows) {
|
|
117
|
+
if (err) throw err;
|
|
118
|
+
assert.equal(rows[0].v, 42);
|
|
119
|
+
});
|
|
120
|
+
db.unregister("udf", done);
|
|
91
121
|
});
|
|
92
|
-
db.unregister("udf", done);
|
|
93
|
-
});
|
|
94
122
|
|
|
123
|
+
it('binary string', function(done) {
|
|
124
|
+
db.register("udf", "varchar", (x, y) => x + ' ' + y);
|
|
125
|
+
db.all("select udf('hello', 'world') v", function(err, rows) {
|
|
126
|
+
if (err) throw err;
|
|
127
|
+
assert.equal(rows[0].v, 'hello world');
|
|
128
|
+
});
|
|
129
|
+
db.unregister("udf", done);
|
|
130
|
+
});
|
|
95
131
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
132
|
+
it('ternary int', function(done) {
|
|
133
|
+
db.register("udf", "integer", (x, y, z) => x + y + z);
|
|
134
|
+
db.all("select udf(21, 20, 1) v", function(err, rows) {
|
|
135
|
+
if (err) throw err;
|
|
136
|
+
assert.equal(rows[0].v, 42);
|
|
137
|
+
});
|
|
138
|
+
db.unregister("udf", done);
|
|
101
139
|
});
|
|
102
|
-
db.unregister("udf", done);
|
|
103
|
-
});
|
|
104
140
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
141
|
+
it('unary larger series', function(done) {
|
|
142
|
+
db.register("udf", "integer", (x) => 1);
|
|
143
|
+
db.all("select sum(udf(range::double)) v from range(10000)", function(err, rows) {
|
|
144
|
+
if (err) throw err;
|
|
145
|
+
assert.equal(rows[0].v, 10000);
|
|
146
|
+
});
|
|
147
|
+
db.unregister("udf", done);
|
|
110
148
|
});
|
|
111
|
-
db.unregister("udf", done);
|
|
112
149
|
});
|
|
113
150
|
|
|
114
|
-
|
|
115
|
-
db
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
assert.equal(rows[0].v, 42);
|
|
151
|
+
describe('types', function() {
|
|
152
|
+
var db;
|
|
153
|
+
before(function(done) {
|
|
154
|
+
db = new duckdb.Database(':memory:', done);
|
|
119
155
|
});
|
|
120
|
-
db.unregister("udf", done);
|
|
121
|
-
});
|
|
122
156
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
157
|
+
it('tinyint', function(done) {
|
|
158
|
+
db.register("udf", "integer", (x) => x+1);
|
|
159
|
+
db.all("select udf(42::tinyint) v", function(err, rows) {
|
|
160
|
+
if (err) throw err;
|
|
161
|
+
assert.equal(rows[0].v, 43);
|
|
162
|
+
});
|
|
163
|
+
db.unregister("udf", done);
|
|
128
164
|
});
|
|
129
|
-
db.unregister("udf", done);
|
|
130
|
-
});
|
|
131
165
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
166
|
+
it('smallint', function(done) {
|
|
167
|
+
db.register("udf", "integer", (x) => x+1);
|
|
168
|
+
db.all("select udf(42::smallint) v", function(err, rows) {
|
|
169
|
+
if (err) throw err;
|
|
170
|
+
assert.equal(rows[0].v, 43);
|
|
171
|
+
});
|
|
172
|
+
db.unregister("udf", done);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('int', function(done) {
|
|
176
|
+
db.register("udf", "integer", (x) => x+1);
|
|
177
|
+
db.all("select udf(42::integer) v", function(err, rows) {
|
|
178
|
+
if (err) throw err;
|
|
179
|
+
assert.equal(rows[0].v, 43);
|
|
180
|
+
});
|
|
181
|
+
db.unregister("udf", done);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('timestamp', function(done) {
|
|
185
|
+
db.register("udf", "timestamp", (x) => x);
|
|
186
|
+
db.all("select udf(timestamp '1992-09-20 11:30:00') v", function(err, rows) {
|
|
187
|
+
if (err) throw err;
|
|
188
|
+
});
|
|
189
|
+
db.unregister("udf", done);
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('struct', function(done) {
|
|
193
|
+
db.register("udf", "integer", a => {
|
|
194
|
+
return (a.x == null ? -100 : a.x);
|
|
195
|
+
});
|
|
196
|
+
db.all("SELECT min(udf({'x': (case when v % 2 = 0 then v else null end)::INTEGER, 'y': 42}))::INTEGER as foo FROM generate_series(1, 10000) as t(v)", function(err, rows) {
|
|
197
|
+
if (err) throw err;
|
|
198
|
+
assert.equal(rows[0].foo, -100);
|
|
199
|
+
});
|
|
200
|
+
db.unregister("udf", done);
|
|
137
201
|
});
|
|
138
|
-
db.unregister("udf", done);
|
|
139
|
-
});
|
|
140
202
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
203
|
+
it('structnestednull', function(done) {
|
|
204
|
+
db.register("udf", "integer", a => {
|
|
205
|
+
return (a.x == null ? -100 : a.x.y);
|
|
206
|
+
});
|
|
207
|
+
db.all("SELECT min(udf({'x': (case when v % 2 = 0 then {'y': v::INTEGER } else null end), 'z': 42}))::INTEGER as foo FROM generate_series(1, 10000) as t(v)", function(err, rows) {
|
|
208
|
+
if (err) throw err;
|
|
209
|
+
assert.equal(rows[0].foo, -100);
|
|
210
|
+
});
|
|
211
|
+
db.unregister("udf", done);
|
|
146
212
|
});
|
|
147
|
-
db.unregister("udf", done);
|
|
148
213
|
});
|
|
149
214
|
});
|