From 7948df018d20c96afce2558b1852588e36f2dda6 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 18 Nov 2023 22:28:05 +0100 Subject: [PATCH] resync latest --- README.md | 15 +++++++++++++-- example.js | 13 +++++++++++-- index.js | 27 +++++++++++++++++++++++---- lib/libchdb_bun.c | 42 +++++++++++++++++++++++++++++++++++++++++- lib/libchdb_bun.h | 1 + lib/libchdb_bun.so | Bin 16552 -> 16304 bytes package.json | 6 ++++++ 7 files changed, 95 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 10c5b5a..1c02093 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,18 @@ bun install chdb-bun #### Usage ```js -import { Execute } from 'chdb-bun'; -console.log(Execute("SELECT version()", "CSV")); +import { db, chdb } from 'chdb-bun'; + +const conn = new db('CSV') +var result; + +// Test query +result = conn.query("SELECT version()"); +console.log(result) + +// Test session +conn.session("CREATE FUNCTION IF NOT EXISTS hello AS () -> 'chDB'"); +result = conn.session("SELECT hello()", "CSV"); +console.log(result) ``` diff --git a/example.js b/example.js index 728bdc2..d472313 100644 --- a/example.js +++ b/example.js @@ -1,4 +1,13 @@ -import { Execute } from '.'; +import { db, chdb } from '.'; +const conn = new db('CSV', '/tmp') +var result; -console.log(Execute("SELECT version()", "CSV")); +// Test query +result = conn.query("SELECT version()"); +console.log(result) + +// Test session +conn.session("CREATE FUNCTION IF NOT EXISTS hello AS () -> 'chDB'"); +result = conn.session("SELECT hello()", "CSV"); +console.log(result) diff --git a/index.js b/index.js index 0a83fd7..2d60de4 100644 --- a/index.js +++ b/index.js @@ -1,16 +1,35 @@ import { dlopen, FFIType, suffix, CString, ptr } from "bun:ffi"; + const path = `lib/libchdb_bun.${suffix}`; + const { symbols: chdb, } = dlopen(path, { Execute: { args: [FFIType.cstring, FFIType.cstring], returns:FFIType.cstring, }, + ExecuteSession: { + args: [FFIType.cstring, FFIType.cstring, FFIType.cstring], + returns:FFIType.cstring, + }, }, ); -export function Execute(query, format){ - if (!format) format = "CSV"; - if (!query) return ""; - return chdb.Execute(Buffer.from(query+"\0"), Buffer.from(format+"\0")); +function db(format, path) { + this.format = format || 'JSONCompact'; + this.path = path || '.'; + this.query = function(query, format){ + if (!query) return ""; + if (!format) format = "CSV"; + return chdb.Execute(Buffer.from(query+"\0"), Buffer.from(format+"\0")); + }.bind(this); + this.session = function(query, format, path) { + if (!query) return ""; + if (!format) format = "CSV"; + if (!path) path = "/tmp"; + return chdb.ExecuteSession(Buffer.from(query+"\0"), Buffer.from(format+"\0"), Buffer.from(path+"\0")); + }.bind(this); + return this; } + +export { chdb, db }; diff --git a/lib/libchdb_bun.c b/lib/libchdb_bun.c index 6c1cd14..19f4903 100644 --- a/lib/libchdb_bun.c +++ b/lib/libchdb_bun.c @@ -27,5 +27,45 @@ char *Execute(char *query, char *format) { free(argv[2]); free(argv[3]); - return result->buf; + if (result == NULL) { + return NULL; + } else { + return result->buf; + } +} + +char *ExecuteSession(char *query, char *format, char *path) { + char *argv[] = {(char *)"clickhouse", (char *)"--multiquery", (char *)"--output-format=CSV", (char *)"--query=", (char *)"--path=."}; + char dataFormat[100]; + char dataPath[100]; + char *localQuery; + int argc = 5; + struct local_result *result; + + snprintf(dataFormat, sizeof(dataFormat), "--format=%s", format); + argv[2] = strdup(dataFormat); + + snprintf(dataPath, sizeof(dataPath), "--path=%s", path); + argv[4] = strdup(dataPath); + + localQuery = (char *) malloc(strlen(query) + 10); + if (localQuery == NULL) { + return NULL; + } + + sprintf(localQuery, "--query=%s", query); + argv[3] = strdup(localQuery); + free(localQuery); + + result = query_stable(argc, argv); + + free(argv[2]); + free(argv[3]); + free(argv[4]); + + if (result == NULL) { + return NULL; + } else { + return result->buf; + } } diff --git a/lib/libchdb_bun.h b/lib/libchdb_bun.h index 1d8c93a..1a668c1 100644 --- a/lib/libchdb_bun.h +++ b/lib/libchdb_bun.h @@ -2,5 +2,6 @@ #define LIBCHDB_BUN_H char *Execute(char *query, char *format); +char *ExecuteSession(char *query, char *format, char *path); #endif diff --git a/lib/libchdb_bun.so b/lib/libchdb_bun.so index d0198e38d930e35e8065df0e16deb949313031c2..61622b05fa1cb50839da8b92559f6aa244bd9fc2 100755 GIT binary patch literal 16304 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 T=~wlC1s^D&+)|``b^8As5b#2n literal 16552 zcmeHOYitzP6~61W!GN(1g<_zDEdq%YJQxBLh+Ni~HA8C?%A+D`((!tC%&ypnvpZYX z>C4C=vTIp#q*Ap}Dz&OwQT3Hbt*Bb1H6n@o_)#oHk)r-6rHbm6P-|SZGF8j=oO{n1 z&&=*dRet10H5cuC_k8DZ@0__azQf%6rATj2T_7O11jWY$O5rt%36o;yVX6Rx#UZf@ zj*o~f(zbp{RZ*K?rYJ_ys$^`V0jnf?u@F>tjI2jL*a`lm>^_76w$Ah{94JL@iw)`*r>wDK4L$wQ#>z*$d1wL_iOU=;&$?5l(_)z>^oNc zy|j0l{CcS)UffOXF>-sK1V6g8Wby96m-!5}Cu&>=!TBeo^vZl<3>-5jPMt@yY3vIP z6RBTEGU~to_1~U~cU^nw#)e%#7`?w|rdWFMcc7NxR|8^P>OWTNki+ui!{S|4t9~2> zdTkYzRfGRr4IUc}!OvT+0Z}df(>3_P8hpA2kJm8-KW`ZWqFTF{^N`mVRB|Aeh!1G_tgHfR2gQlrlgGM^ecFDzwof~tPD+iZAdD*f zr%Ih1TLF+?0fNWb;XIe2K;F7pn4mCXvV=-`_id|Oxv%K`Y(A`=SZQ3&KY6DaQt<5BT^ucF)$ z#-rlp-vK3xLt$0HICOtXBJAK%$3+jT8giTqWKM_isN%0wRsZN`z|Vl60Y3wN2K)^8 z8Spaz8Tfn4BmdGz?=|WZ4YPZM(63Hgb>-Xo=xdF)WPZvA?gG6~-tlLEmaWo0ftrQV zpUUO(6#6G{BDheRwPl5PD~d{-?C+#04|hXuw|V1EtIa~kNFw&x1|&r z0ma*@IyQ6lDbV3{)+erEM13+crH{|*lk0y4Ccli!*fT!^5OYQ7u+q=WeID!M5NqP9 z>d(yFFjAw_EA{c2xh+zCwI3snzKS3UD`k|@bE+}vHK8mf4}3=UhuWF{4|tIZVy#h4 zjX9_vp~d7iJj)4r2KxA0V7Xkin!r{kpl?7uCu2p%uwGPgl^RaCZ!xYv)+F<1HOze( zw7PlZ{_lF!1#Q* zoC34}@eS>V_siv%0P$NbmcX-TM4;Fj*xal>NUz_VCG2 z%A7}d4VLl|(mx>C?kB~4zkt`Vd)w=v>l-FKP1sL3L^wh?MfgoZUXOaByZcCJ=lOv` z#wvskYx}j1_Pqru?fv4u4y|Lqw)auRdwWnR2Vuo2ucLQras4f?lXvq$dmOp>dcotz z%{K@hXKsF(;Oph)mkYkmZoX0QcyaS91dl5>52Kj!=H^$4P*uK3yj+!EEvBpT&Gvo{ zcl;K?_pO_UAR#BC>Orwa^j789iegnB9tw1yJEH~Re{XnQvzuQps*T5>_@Ll*&2D?R zTf`0*P2H-N9!pBpvoU#nq%2l#F7Q&LhaXXUNJ;Gh;0OWQOI zD{aJZqedR~bHua8#Z-16nlj>6HkUV|g`$XM(?coKGUM8zj)Qxv8{z(qq!G>KqQi!n zv2w#=Fc(dmM!b+t4}*(CGQiSunbHmo1O9|S&kUpIOjlpTh@3i(drHt+$ne5A(fh=) zu3qDbo}ROjbH=%@W4#fuIR50RuD+Aq*s*-pNJKMn+;3vQ_7jd_!0sU>F|KB?*UlQwVMa@oa73T`7iVcgd2|etXBt5{H4*_LT|__OiG+xp}7Q1{wGEmUr7@ zwy7?t{S)Sz+&<5*8QGuxyzPGi{Bds0{ycwT zJPpqgEI6&jD*N-i_$+WZ$7O$>XEE~p9ZY1Qa4d>XLk;KB?9cNtMt+ar{<9rp0{n4q z&N9#27(1vXZ~wUim!X2O*`MckjMvGK+xMRT74knuc03PcoObxbU&)I6O#p{Eq1Te7 z`6A8t_&tll$i8wN@pvW-G5Ooggh)f!OCp1J{N4Zsa_rCZXvW>_ zNa$_", + "license": "Apache2.0", "scripts": { "build": "cd lib && gcc -shared -fPIC -o libchdb_bun.so libchdb_bun.c -lchdb" }, "devDependencies": { "bun-types": "^0.5.0" + }, + "directories":{ + "lib": "lib" } }