@@ -11,11 +11,11 @@ package chdb
1111char *Execute(char *query, char *format) {
1212
1313 char * argv[] = {(char *)"clickhouse", (char *)"--multiquery", (char *)"--output-format=CSV", (char *)"--query="};
14- char dataFormat[100];
14+ char dataFormat[100];
1515 char *localQuery;
1616 // Total 4 = 3 arguments + 1 programm name
1717 int argc = 4;
18- struct local_result *result;
18+ struct local_result *result;
1919
2020 // Format
2121 snprintf(dataFormat, sizeof(dataFormat), "--format=%s", format);
@@ -24,33 +24,94 @@ char *Execute(char *query, char *format) {
2424 // Query - 10 characters + length of query
2525 localQuery = (char *) malloc(strlen(query)+10);
2626 if(localQuery == NULL) {
27-
27+
28+ printf("Out of memmory\n");
29+ return NULL;
30+ }
31+
32+ sprintf(localQuery, "--query=%s", query);
33+ argv[3]=strdup(localQuery);
34+ free(localQuery);
35+
36+ // Main query and result
37+ result = query_stable(argc, argv);
38+
39+ //Free it
40+ free(argv[2]);
41+ free(argv[3]);
42+
43+ return result->buf;
44+ }
45+
46+ char *Session(char *query, char *format, char* path) {
47+
48+ char * argv[] = {(char *)"clickhouse", (char *)"--multiquery", (char *)"--output-format=CSV", (char *)"--query=", (char *)"--path=/tmp/"};
49+ char dataFormat[100];
50+ char dataPath[100];
51+ char *localQuery;
52+ // Total 4 = 4 arguments + 1 programm name
53+ int argc = 5;
54+ struct local_result *result;
55+
56+ // Format
57+ snprintf(dataFormat, sizeof(dataFormat), "--format=%s", format);
58+ argv[2]=strdup(dataFormat);
59+
60+ // Query - 10 characters + length of query
61+ localQuery = (char *) malloc(strlen(query)+10);
62+ if(localQuery == NULL) {
63+
2864 printf("Out of memmory\n");
2965 return NULL;
3066 }
31-
67+
3268 sprintf(localQuery, "--query=%s", query);
3369 argv[3]=strdup(localQuery);
3470 free(localQuery);
3571
72+ // Path
73+ snprintf(dataPath, sizeof(dataPath), "--path=%s", path);
74+ argv[4]=strdup(dataPath);
75+
3676 // Main query and result
3777 result = query_stable(argc, argv);
3878
3979 //Free it
4080 free(argv[2]);
4181 free(argv[3]);
82+ free(argv[4]);
4283
4384 return result->buf;
4485}
4586*/
4687import "C"
4788import "unsafe"
4889
49- func Query (str1 , str2 string ) string {
50- query := C .CString (str1 )
51- defer C .free (unsafe .Pointer (query ))
52- format := C .CString (str2 )
53- defer C .free (unsafe .Pointer (format ))
54- resultData := C .Execute (query , format )
55- return C .GoString (resultData )
90+ func Query (str1 string , str2 string ) string {
91+ if str2 == "" {
92+ str2 = "CSV"
93+ }
94+ query := C .CString (str1 )
95+ defer C .free (unsafe .Pointer (query ))
96+ format := C .CString (str2 )
97+ defer C .free (unsafe .Pointer (format ))
98+ resultData := C .Execute (query , format )
99+ return C .GoString (resultData )
100+ }
101+
102+ func Session (str1 string , str2 string , str3 string ) string {
103+ if str3 == "" {
104+ str3 = "/tmp/"
105+ }
106+ if str2 == "" {
107+ str2 = "CSV"
108+ }
109+ query := C .CString (str1 )
110+ defer C .free (unsafe .Pointer (query ))
111+ format := C .CString (str2 )
112+ defer C .free (unsafe .Pointer (format ))
113+ path := C .CString (str3 )
114+ defer C .free (unsafe .Pointer (path ))
115+ resultData := C .Session (query , format , path )
116+ return C .GoString (resultData )
56117}
0 commit comments