duckdb 0.3.3-dev849.0 → 0.3.3-dev901.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/lib/duckdb-binding.js +4 -2
- package/package.json +1 -1
- package/src/duckdb.cpp +192 -21
- package/src/duckdb.hpp +4 -2
- package/src/parquet-amalgamation.cpp +26093 -26093
- package/test/extension.test.js +86 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
var duckdb = require('..');
|
|
2
|
+
var fs = require('fs');
|
|
3
|
+
var assert = require('assert');
|
|
4
|
+
var path = require('path');
|
|
5
|
+
|
|
6
|
+
const extension_base_path = "../../../build/release/extension";
|
|
7
|
+
|
|
8
|
+
// Look for extensions that we can load and test
|
|
9
|
+
let extension_paths = [];
|
|
10
|
+
const extension_full_path = path.resolve(__dirname, extension_base_path);
|
|
11
|
+
if (fs.existsSync(extension_full_path)) {
|
|
12
|
+
extension_paths = extension_paths.concat(fs.readdirSync(extension_full_path).map(function (file) {
|
|
13
|
+
if (!fs.statSync(extension_full_path+'/'+file).isDirectory())
|
|
14
|
+
return undefined;
|
|
15
|
+
const potential_extension_path = extension_full_path+`/${file}/${file}.duckdb_extension`;
|
|
16
|
+
if (fs.existsSync(potential_extension_path)) {
|
|
17
|
+
return potential_extension_path;
|
|
18
|
+
}
|
|
19
|
+
}).filter(a=>a));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Note: test will pass on http request failing due to connection issues.
|
|
23
|
+
const test_httpfs = async function (db, done) {
|
|
24
|
+
db.all("SELECT id, first_name, last_name FROM PARQUET_SCAN('https://raw.githubusercontent.com/cwida/duckdb/master/data/parquet-testing/userdata1.parquet') LIMIT 3;", function(err, rows) {
|
|
25
|
+
if (err) {
|
|
26
|
+
if (err.message.startsWith("Unable to connect to URL")) {
|
|
27
|
+
console.warn("Warning: HTTP request failed in extension.test.js");
|
|
28
|
+
done();
|
|
29
|
+
} else {
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
assert.deepEqual(rows, [
|
|
34
|
+
{ id: 1, first_name: 'Amanda', last_name: 'Jordan'},
|
|
35
|
+
{ id: 2, first_name: 'Albert', last_name: 'Freeman'},
|
|
36
|
+
{ id: 3, first_name: 'Evelyn', last_name: 'Morgan'},
|
|
37
|
+
]);
|
|
38
|
+
done();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const test_tpch = async function (db, done) {
|
|
44
|
+
db.all("CALL DBGEN(sf=0.01);", function(err) {
|
|
45
|
+
if (err) {
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
done();
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const test_extension = function(extension_name, db, done) {
|
|
53
|
+
switch(extension_name) {
|
|
54
|
+
case 'httpfs.duckdb_extension':
|
|
55
|
+
test_httpfs(db, done);
|
|
56
|
+
break;
|
|
57
|
+
case 'tpch.duckdb_extension':
|
|
58
|
+
test_tpch(db, done);
|
|
59
|
+
break;
|
|
60
|
+
default:
|
|
61
|
+
done();
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
describe('Extension loading', function() {
|
|
67
|
+
var db;
|
|
68
|
+
|
|
69
|
+
before(function(done) {
|
|
70
|
+
db = new duckdb.Database(':memory:', done);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
for (ext of extension_paths) {
|
|
74
|
+
const extension_path = ext;
|
|
75
|
+
const extension_name = ext.replace(/^.*[\\\/]/, '');
|
|
76
|
+
|
|
77
|
+
it(extension_name, function(done) {
|
|
78
|
+
db.run(`LOAD '${extension_path}';`, function(err) {
|
|
79
|
+
if (err) {
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
test_extension(extension_name, db, done);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|