1
1
#define DUCKDB_EXTENSION_MAIN
2
2
3
- #include " dynamic_sql_clickhouse_extension .hpp"
3
+ #include " chsql_extension .hpp"
4
4
#include " duckdb.hpp"
5
5
#include " duckdb/common/exception.hpp"
6
6
#include " duckdb/common/string_util.hpp"
@@ -28,8 +28,9 @@ namespace duckdb {
28
28
// Add the text of your SQL macro as a raw string with the format R"( select 42 )"
29
29
30
30
31
- static DefaultMacro dynamic_sql_clickhouse_macros [] = {
31
+ static DefaultMacro chsql_macros [] = {
32
32
{DEFAULT_SCHEMA, " times_two" , {" x" , nullptr }, R"( x*2)" },
33
+ // -- Type conversion macros
33
34
{DEFAULT_SCHEMA, " toString" , {" x" , nullptr }, R"( CAST(x AS VARCHAR))" },
34
35
{DEFAULT_SCHEMA, " toInt8" , {" x" , nullptr }, R"( CAST(x AS INT8))" },
35
36
{DEFAULT_SCHEMA, " toInt16" , {" x" , nullptr }, R"( CAST(x AS INT16))" },
@@ -49,6 +50,7 @@ static DefaultMacro dynamic_sql_clickhouse_macros[] = {
49
50
{DEFAULT_SCHEMA, " toInt64OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS INT64))" },
50
51
{DEFAULT_SCHEMA, " toInt128OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS INT128))" },
51
52
{DEFAULT_SCHEMA, " toInt256OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS HUGEINT))" },
53
+ // -- Unsigned integer conversion macros
52
54
{DEFAULT_SCHEMA, " toUInt8" , {" x" , nullptr }, R"( CAST(x AS UTINYINT))" },
53
55
{DEFAULT_SCHEMA, " toUInt16" , {" x" , nullptr }, R"( CAST(x AS USMALLINT))" },
54
56
{DEFAULT_SCHEMA, " toUInt32" , {" x" , nullptr }, R"( CAST(x AS UINTEGER))" },
@@ -61,16 +63,22 @@ static DefaultMacro dynamic_sql_clickhouse_macros[] = {
61
63
{DEFAULT_SCHEMA, " toUInt16OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS USMALLINT))" }, // And here
62
64
{DEFAULT_SCHEMA, " toUInt32OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS UINTEGER))" }, // Also here
63
65
{DEFAULT_SCHEMA, " toUInt64OrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS UBIGINT))" }, // And here
66
+ // -- Floating-point conversion macros
64
67
{DEFAULT_SCHEMA, " toFloat" , {" x" , nullptr }, R"( CAST(x AS DOUBLE))" },
65
68
{DEFAULT_SCHEMA, " toFloatOrNull" , {" x" , nullptr }, R"( TRY_CAST(x AS DOUBLE))" },
66
69
{DEFAULT_SCHEMA, " toFloatOrZero" , {" x" , nullptr }, R"( CASE WHEN TRY_CAST(x AS DOUBLE) IS NOT NULL THEN CAST(x AS DOUBLE) ELSE 0 END)" },
70
+ // -- Arithmetic macros
67
71
{DEFAULT_SCHEMA, " intDiv" , {" a" , " b" }, R"( (CAST(a AS BIGINT) / CAST(b AS BIGINT)))" },
72
+ // -- String matching macros
68
73
{DEFAULT_SCHEMA, " match" , {" string" , " token" }, R"( string LIKE token)" },
74
+ // -- Array macros
75
+ {DEFAULT_SCHEMA, " arrayExists" , {" needle" , " haystack" }, R"( haystack @> ARRAY[needle])" },
76
+ {DEFAULT_SCHEMA, " arrayMap" , {" e" , " arr" }, R"( array_transform(arr, e -> (e * e)))" },
69
77
{nullptr , nullptr , {nullptr }, nullptr }};
70
78
71
79
// To add a new table SQL macro, add a new macro to this array!
72
- // Copy and paste the top item in the array into the
73
- // second-to-last position and make some modifications.
80
+ // Copy and paste the top item in the array into the
81
+ // second-to-last position and make some modifications.
74
82
// (essentially, leave the last entry in the array as {nullptr, nullptr, {nullptr}, nullptr})
75
83
76
84
// Keep the DEFAULT_SCHEMA (no change needed)
@@ -80,67 +88,67 @@ static DefaultMacro dynamic_sql_clickhouse_macros[] = {
80
88
// If your function has parameters with default values, add their names and values in quotes inside of {}'s inside of the {}.
81
89
// Be sure to keep {nullptr, nullptr} at the end
82
90
// If you do not have parameters with default values, simplify to {nullptr, nullptr}
83
- // Add the text of your SQL macro as a raw string with the format R"( select 42; )"
91
+ // Add the text of your SQL macro as a raw string with the format R"( select 42; )"
84
92
85
93
// clang-format off
86
- static const DefaultTableMacro dynamic_sql_clickhouse_table_macros [] = {
94
+ static const DefaultTableMacro chsql_table_macros [] = {
87
95
{DEFAULT_SCHEMA, " times_two_table" , {" x" , nullptr }, {{" two" , " 2" }, {nullptr , nullptr }}, R"( SELECT x * two as output_column;)" },
88
96
{nullptr , nullptr , {nullptr }, {{nullptr , nullptr }}, nullptr }
89
97
};
90
98
// clang-format on
91
99
92
- inline void DynamicSqlClickhouseScalarFun (DataChunk &args, ExpressionState &state, Vector &result) {
100
+ inline void ChSqlScalarFun (DataChunk &args, ExpressionState &state, Vector &result) {
93
101
auto &name_vector = args.data [0 ];
94
102
UnaryExecutor::Execute<string_t , string_t >(
95
103
name_vector, result, args.size (),
96
104
[&](string_t name) {
97
- return StringVector::AddString (result, " DynamicSqlClickhouse " +name.GetString ()+" 🐥" );;
105
+ return StringVector::AddString (result, " ChSql " +name.GetString ()+" 🐥" );;
98
106
});
99
107
}
100
108
101
- inline void DynamicSqlClickhouseOpenSSLVersionScalarFun (DataChunk &args, ExpressionState &state, Vector &result) {
109
+ inline void ChSqlOpenSSLVersionScalarFun (DataChunk &args, ExpressionState &state, Vector &result) {
102
110
auto &name_vector = args.data [0 ];
103
111
UnaryExecutor::Execute<string_t , string_t >(
104
112
name_vector, result, args.size (),
105
113
[&](string_t name) {
106
- return StringVector::AddString (result, " DynamicSqlClickhouse " + name.GetString () +
114
+ return StringVector::AddString (result, " ChSql " + name.GetString () +
107
115
" , my linked OpenSSL version is " +
108
116
OPENSSL_VERSION_TEXT );;
109
117
});
110
118
}
111
119
112
120
static void LoadInternal (DatabaseInstance &instance) {
113
121
// Register a scalar function
114
- auto dynamic_sql_clickhouse_scalar_function = ScalarFunction (" dynamic_sql_clickhouse " , {LogicalType::VARCHAR}, LogicalType::VARCHAR, DynamicSqlClickhouseScalarFun );
115
- ExtensionUtil::RegisterFunction (instance, dynamic_sql_clickhouse_scalar_function );
122
+ auto chsql_scalar_function = ScalarFunction (" chsql " , {LogicalType::VARCHAR}, LogicalType::VARCHAR, ChSqlScalarFun );
123
+ ExtensionUtil::RegisterFunction (instance, chsql_scalar_function );
116
124
117
125
// Register another scalar function
118
- auto dynamic_sql_clickhouse_openssl_version_scalar_function = ScalarFunction (" dynamic_sql_clickhouse_openssl_version " , {LogicalType::VARCHAR},
119
- LogicalType::VARCHAR, DynamicSqlClickhouseOpenSSLVersionScalarFun );
120
- ExtensionUtil::RegisterFunction (instance, dynamic_sql_clickhouse_openssl_version_scalar_function );
126
+ auto chsql_openssl_version_scalar_function = ScalarFunction (" chsql_openssl_version " , {LogicalType::VARCHAR},
127
+ LogicalType::VARCHAR, ChSqlOpenSSLVersionScalarFun );
128
+ ExtensionUtil::RegisterFunction (instance, chsql_openssl_version_scalar_function );
121
129
122
130
// Macros
123
- for (idx_t index = 0 ; dynamic_sql_clickhouse_macros [index].name != nullptr ; index++) {
124
- auto info = DefaultFunctionGenerator::CreateInternalMacroInfo (dynamic_sql_clickhouse_macros [index]);
131
+ for (idx_t index = 0 ; chsql_macros [index].name != nullptr ; index++) {
132
+ auto info = DefaultFunctionGenerator::CreateInternalMacroInfo (chsql_macros [index]);
125
133
ExtensionUtil::RegisterFunction (instance, *info);
126
134
}
127
135
// Table Macros
128
- for (idx_t index = 0 ; dynamic_sql_clickhouse_table_macros [index].name != nullptr ; index++) {
129
- auto table_info = DefaultTableFunctionGenerator::CreateTableMacroInfo (dynamic_sql_clickhouse_table_macros [index]);
136
+ for (idx_t index = 0 ; chsql_table_macros [index].name != nullptr ; index++) {
137
+ auto table_info = DefaultTableFunctionGenerator::CreateTableMacroInfo (chsql_table_macros [index]);
130
138
ExtensionUtil::RegisterFunction (instance, *table_info);
131
139
}
132
140
}
133
141
134
- void DynamicSqlClickhouseExtension ::Load (DuckDB &db) {
142
+ void ChsqlExtension ::Load (DuckDB &db) {
135
143
LoadInternal (*db.instance );
136
144
}
137
- std::string DynamicSqlClickhouseExtension ::Name () {
138
- return " dynamic_sql_clickhouse " ;
145
+ std::string ChsqlExtension ::Name () {
146
+ return " chsql " ;
139
147
}
140
148
141
- std::string DynamicSqlClickhouseExtension ::Version () const {
142
- #ifdef EXT_VERSION_DYNAMIC_SQL_CLICKHOUSE
143
- return EXT_VERSION_DYNAMIC_SQL_CLICKHOUSE ;
149
+ std::string ChsqlExtension ::Version () const {
150
+ #ifdef EXT_VERSION_CHSQL
151
+ return EXT_VERSION_CHSQL ;
144
152
#else
145
153
return " " ;
146
154
#endif
@@ -150,12 +158,12 @@ std::string DynamicSqlClickhouseExtension::Version() const {
150
158
151
159
extern " C" {
152
160
153
- DUCKDB_EXTENSION_API void dynamic_sql_clickhouse_init (duckdb::DatabaseInstance &db) {
161
+ DUCKDB_EXTENSION_API void chsql_init (duckdb::DatabaseInstance &db) {
154
162
duckdb::DuckDB db_wrapper (db);
155
- db_wrapper.LoadExtension <duckdb::DynamicSqlClickhouseExtension >();
163
+ db_wrapper.LoadExtension <duckdb::ChsqlExtension >();
156
164
}
157
165
158
- DUCKDB_EXTENSION_API const char *dynamic_sql_clickhouse_version () {
166
+ DUCKDB_EXTENSION_API const char *chsql_version () {
159
167
return duckdb::DuckDB::LibraryVersion ();
160
168
}
161
169
}
0 commit comments