# druid-kingbase
**Repository Path**: jiangtaoCode/druid-kingbase
## Basic Information
- **Project Name**: druid-kingbase
- **Description**: 通过 Druid 来适配 kinbaseV8 语法。
思路:通过 druid filter 在执行 sql 语前对 sql 进行翻译,达到自动适配,不需要进行原有 sql 改动。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 6
- **Created**: 2022-07-17
- **Last Updated**: 2025-04-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
druid-kingbaseV8
==================
通过 Druid 来适配 kingbaseV8 语法。
思路:通过 druid filter 在执行 sql 语前对 sql 进行翻译,达到自动适配,不需要进行原有 sql 改动。
## Usage
如果是 spring boot 项目,建议采用 spring-boot-starter-nydruid 接入项目。
As a library:
``` java
ny-nexus
http://maven.sxnuoyun.com/repository/nuoyun-group/
true
true
com.nuoyun.pro
druid-kingbase
0.0.3
```
setting filter:
``` properties
druid.translation.sourceSqlType=mysql
```
> 已经引入 kingbase 和 druid library,应用程序不需要再进行引入。
> 分页不只支持 limit 1,3 这种写法,需要转换为 linit 3 offset 1
## 适配说明:
- **替换反引号(`):** 将反引号替换为 "
- **支持 find_in_set 函数:** 需要在 kingbase 中添加自定义函数,见附录
- **支持驼峰命名:** 自动在驼峰命名字段上添加 " 符号,确保 kingbase 可以正确识别字段
- **支持 date_format 函数:** 需要在 kingbase 中添加插件和自定义函数,见附录
## 附录
### find_in_set 函数
```sql
CREATE OR REPLACE FUNCTION find_in_set(str text, strlist text) RETURNS BOOLEAN LANGUAGE plpgsql AS
$func$
BEGIN
return array_position(string_to_array($2, ','), $1) > 0;
END;
$func$
```
### date_format
```sql
-- https://help.kingbase.com.cn/stage-api/profile/document/kes/v8r6/html/development/sql-plsql/ref-extended-plug-in/kdb_date_function.html#kdb-date-function
-- 安装插件
create extension kdb_date_function;
-- 新建字符串类型
CREATE OR REPLACE FUNCTION date_format(indate VARCHAR, intext TEXT) RETURNS VARCHAR LANGUAGE plpgsql AS
$func$
DECLARE
formatStr VARCHAR;
defaultFormatRule VARCHAR DEFAULT 'yyyy-MM-dd hh24:mi:ss';
BEGIN
formatStr := regexp_replace(intext, '%Y', 'YYYY');
formatStr := regexp_replace(intext, '%m', 'MM');
formatStr := regexp_replace(intext, '%d', 'DD');
formatStr := regexp_replace(intext, '%H', 'HH24');
formatStr := regexp_replace(intext, '%i', 'MI');
formatStr := regexp_replace(intext, '%s', 'SS');
-- 替换为日期和时间
return to_char(to_timestamp(indate, defaultFormatRule), formatStr);
END;
$func$
```
### 适配 isnull
```sql
CREATE OR REPLACE FUNCTION myisnull(intext VARCHAR) RETURNS BOOLEAN LANGUAGE plpgsql AS
$func$
BEGIN
IF 'NULL_STR_9522' = ISNULL(intext, 'NULL_STR_9522') THEN
return TRUE;
ELSE
return FALSE;
END IF;
END;
$func$
```
### 适配 rand
```sql
create extension dbms_random;
CREATE OR REPLACE FUNCTION rand() RETURNS NUMBER LANGUAGE plpgsql AS
$func$
BEGIN
return dbms_random.random();
END;
$func$
```