Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/desktop/electron/main/connections/clickhouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@ export const getClient = memoize((connectionString: string) => clickhouse.create
url: connectionString.startsWith('clickhouse')
? connectionString.replace(/^clickhouse/, 'http')
: connectionString,
clickhouse_settings: {
date_time_output_format: 'iso',
},
}))
23 changes: 21 additions & 2 deletions apps/desktop/src/entities/connection/dialects/clickhouse/index.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,41 @@
import type { CompiledQuery, Dialect, Driver, QueryResult } from 'kysely'
import type { connections } from '~/drizzle'
import { type } from 'arktype'
import { MysqlQueryCompiler } from 'kysely'
import { logSql } from '../../sql'

function escapeSqlString(v: string) {
return v.replace(/[\\']/g, '\\$&')
}

const dateStringType = type('string.date')

function prepareQuery(compiledQuery: CompiledQuery) {
let i = 0
const compiledSql = compiledQuery.sql.replace(/\?/g, () => {
const param = compiledQuery.parameters[i++]

if (param === null || param === undefined) {
return 'NULL'
}

if (typeof param === 'number') {
return `${param}`
}

Comment thread
ifeelBALANCED marked this conversation as resolved.
if (param instanceof Date) {
return `parseDateTime64BestEffort('${escapeSqlString(param.toISOString())}')`
}

if (typeof param !== 'string') {
return `'${JSON.stringify(param)}'`
return `'${escapeSqlString(JSON.stringify(param))}'`
}
Comment thread
ifeelBALANCED marked this conversation as resolved.

if (dateStringType.allows(param)) {
return `parseDateTime64BestEffort('${escapeSqlString(param)}')`
}

return `'${param.replace(/'/g, `\\'`).replace(/\\"/g, '\\\\"')}'`
return `'${escapeSqlString(param)}'`
})

return compiledSql.replace(
Expand Down