# 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$ ```