1.0.0 • Published 1 year ago

sqlconds v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

Sqlconds 简介

前后台约定通用查询条件

功能点:
    ◇sql 通用查询条件组织
    ◇sql 通用统计条件组织
    ◇将数组对象转换为insert/update语句。

Install 安装

npm install sqlconds

Usage 使用

通用查询条件组织:

 // github仓库地址: https://github.com/aixinyongheng/sqlconds
 // cjs 引入方式
 const Sqlconds = require('sqlconds');
 // es6 引入方式
 import Sqlconds from "sqlconds";
 
 const sqlconds =new Sqlconds("postgres"); // postgres/mysql/oracle ...
 // 1.筛选条件组织
 const sqlres= sqlconds.condPackage( [{"operator":"EQ","field":"bm","value":"zrzhczt_ggfwss_xx"},{"operator":"OBD","field":"px"}] );

 console.log(sqlres.cond); // and   (  "bm"   =   'zrzhczt_ggfwss_xx' )
 console.log(sqlres.order); // order by   "px" desc

 console.log(`select * from tableA where 1=1 ${sqlres.cond} ${sqlres.order}`);

 // 2. 分组条件组织
 // 2.1 分组group by 字段
 const groupbyRes=sqlconds.groupCondPackage('[{ "type":"CG", "field":"field1", "rename":"newfield1" },{ "type":"SUB", "field":"field2,1,4", "rename":"newfield2" }]');

  console.log(groupbyRes.groupbycond); //  group by "field1",substring(field2,1,4) 
  console.log(groupbyRes.fields); //  "field1" AS "newfield1",substring(field2,1,4) AS "newfield2" 

  console.log(`select count(*),${groupbyRes.fields} from tableA where 1=1 ${sqlres.cond} ${groupbyRes.groupbycond}`);


 // 2.2 聚合统计函数组织
  const statiscondRes = sqlconds.statisCondPackage([{"field":"field1","type":"ZDZ","rename":"最大值","dpoint":0}]);
  console.log(statiscondRes.statiscond); //  max("field1") AS "最大值" 


  console.log(`select count(*),${groupbyRes.fields},${statiscondRes.statiscond} from tableA where 1=1 ${sqlres.cond} ${groupbyRes.groupbycond}`);

数值对象转为insert/update语句

 const Sqlconds = require('sqlconds');
 const sqlconds = new Sqlconds("postgres");
    const res = sqlconds.objtosql("tableA", [{
      "id": "111", "name": "test", "geom": {
        "coordinates": [112.3257164817677,
          35.342031483036436
        ],
        "type": "Point"
      }
    }], { geomfields: 'geom' });
    console.log(res.sql);// insert into "tableA" ("id","name","geom") values ('111','test',public.ST_SetSRID(public.st_geomfromgeojson('{"coordinates":[112.3257164817677,35.342031483036436],"type":"Point"}'),4490)) RETURNING *;

Grammer 参数语法

condPackage 查询过滤条件组织/排序条件

paramsrequireparamnamedescription
condsyes组织sql筛选条件
conds.fieldyes字段名
conds.operatoryes操作类型EQ: ' = ', EQN: '!=', EQ_D: ' = ', GT: ' > ', LT: '<', GTE: ' >= ', LTE: ' <= ', FQ: ' like ' (field like '%$value%'), FQL: ' like '(field like '%$value'), FQR: ' like '(field like '$value%'), INULL: ' is null ', INNULL: ' is not null ', IN: ' in ', INN: 'not in ',JSONIN: ' ? ', GEOMINTER: '=', GEOMNOTINTER: '=' OBA: ' order by ', OBD: ' order by ', OB: ' order by '
conds.valueno条件值
conds.whereLinkerno条件连接符默认 and
conds.conditionno条件传参内容为conds
conds.whereLinkerConditionno内部条件连接符当condition存在时,连接其条件的连接符,默认and
rntableno表名

groupCondPackage 分组查询条件组织

paramsrequireparamnamedescription
condsyes组织group by 字段条件1.支持支持字段名,分隔 2.支持数组对象,具体参数如下
conds.typeyes操作类型CG:常规 field正常为字段名 SUB: substring 函数,field中为substring的函数内部的内容
conds.fieldyes字段名当type为CG时,传入字段名;当type为SUB时,为substring函数内部内容
conds.renameyes重命名字段名返回分组查询字段时重命名

statisCondPackage 聚合统计条件组织

paramsrequireparamnamedescription
condsyes组织聚合统计条件
conds.typeyes聚合统计类型ZDZ: '最大值', ZXZ: '最小值', PJZ: '平均值', BZC: '标准差', FC:'方差',QH:'求和(sum)',STR:(string_agg ,分隔 ),ARR:(array_agg),JIA,JIAN,CHENG,CHU
conds.fieldyes字段名
conds.renameyes重命名字段名返回分组查询字段时重命名
conds.dppointno保留精度(小数点后几位)返回统计字段时保留精度

objtosql 数组对象转为insert/update语句

numparamsrequireparamnamedescription
1tablenameyes表名插入/更新表名
2DataListyes数组对象eg: {"field1":"value1","field2":"value2"}
3configno配置
3config.idfieldno主键,更新时条件字段
3config.patternno插入模式模式 【insert/auto】 insert 时,只生成insert语句, auto时,会根据数据对象中是否存在idfield去生成 insert/update 语句
3config.timefieldsno时间字段配置,分隔字段名,配置为时间字段的数值为-1时,会使用数据库时间now()赋值
3config.geomfieldsno空间类型字段设置(postgres时支持),分隔字段名
3config.geomsridno空间字段坐标系类型 (postgres时支持) 默认4490

example 示例

1.支持高级查询条件 2.支持pg的空间相交函数

复杂查询示例: |require|conds|result| |---|:--------:|-------------:| |查询表中field1为11,并且field2同时为1和2的条件| [{"operator":"EQ","field":"field1","value":"11","condition":{"operator":"EQ","field":"field2","value":"1"},{"whereLinker":"or","operator":"EQ","field":"field2","value":"2"}}] |and "field1" ='11' and ( "field2"='1' or field2='2' )| |pg中查询与114,32点位相交的数据|[{"operator":"GEOMINTER","field":"geom","value":{"type":"Point","coordinates":118.530982355499,28.6730332199371}}]| and ( st_intersects( "geom" , st_setsrid(st_geomfromgeojson('{"type":"Point","coordinates":118.530982355499,28.6730332199371}'),4490)) = true )|

待完善: sql拼接防止sql注入(todo) 支持更多数据库类型(todo) 支持拓展自定义查询插值条件(todo)

1.0.0

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago