-
Notifications
You must be signed in to change notification settings - Fork 496
/
HsqlDialect.kt
44 lines (37 loc) · 1.44 KB
/
HsqlDialect.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package app.cash.sqldelight.dialects.hsql
import app.cash.sqldelight.dialect.api.RuntimeTypes
import app.cash.sqldelight.dialect.api.SqlDelightDialect
import app.cash.sqldelight.dialect.api.TypeResolver
import app.cash.sqldelight.dialects.hsql.grammar.HsqlParserUtil
import app.cash.sqldelight.dialects.hsql.grammar.mixins.ColumnDefMixin
import com.alecstrong.sql.psi.core.SqlParserUtil
import com.alecstrong.sql.psi.core.psi.SqlTypes
import com.intellij.icons.AllIcons
import com.squareup.kotlinpoet.ClassName
/**
* Base dialect for JDBC implementations.
*/
class HsqlDialect : SqlDelightDialect {
override val runtimeTypes: RuntimeTypes = RuntimeTypes(
ClassName("app.cash.sqldelight.driver.jdbc", "JdbcCursor"),
ClassName("app.cash.sqldelight.driver.jdbc", "JdbcPreparedStatement"),
)
override val asyncRuntimeTypes: RuntimeTypes
get() = throw UnsupportedOperationException("HSQL does not support an async driver")
override val icon = AllIcons.Providers.Hsqldb
override fun setup() {
SqlParserUtil.reset()
HsqlParserUtil.reset()
HsqlParserUtil.overrideSqlParser()
val currentElementCreation = HsqlParserUtil.createElement
HsqlParserUtil.createElement = {
when (it.elementType) {
SqlTypes.COLUMN_DEF -> ColumnDefMixin(it)
else -> currentElementCreation(it)
}
}
}
override fun typeResolver(parentResolver: TypeResolver): TypeResolver {
return HsqlTypeResolver(parentResolver)
}
}