From 4bc04b9088410d67960275c444e17dcb2c0c9d9c Mon Sep 17 00:00:00 2001
From: TommyLemon <1184482681@qq.com>
Date: Wed, 6 Dec 2023 20:47:31 +0800
Subject: [PATCH 01/12] =?UTF-8?q?=E7=94=9F=E6=80=81=E6=96=B0=E5=A2=9E=20ap?=
=?UTF-8?q?ijson-builder:=20=E7=AE=80=E5=8D=95=E5=8C=85=E8=A3=85=20APIJSON?=
=?UTF-8?q?=EF=BC=8C=E7=9B=B8=E6=AF=94=E7=9B=B4=E6=8E=A5=E6=9E=84=E9=80=A0?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=20JSON=20=E6=9B=B4=E5=A5=BD=E8=AE=B0?=
=?UTF-8?q?=EF=BC=8C=E6=84=9F=E8=B0=A2=20@yeli19950109=20=E7=9A=84?=
=?UTF-8?q?=E8=B4=A1=E7=8C=AE~?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
打开链接右上角点 ⭐Star 支持下吧~
https://github.com/yeli19950109/apijson-builder
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 76721b69..b037b1a3 100644
--- a/README.md
+++ b/README.md
@@ -680,7 +680,8 @@ Issue/问卷 一般解答顺序:贡献者 > 帮助他人的用户 > 提供任
[quick-boot](https://github.com/csx-bill/quick-boot) 基于 Spring Cloud 2022、Spring Boot 3、AMIS 和 APIJSON 的低代码系统。
[apijson-query-spring-boot-starter](https://gitee.com/mingbaobaba/apijson-query-spring-boot-starter) 一个快速构建 APIJSON 查询条件的插件
-
+
+[apijson-builder](https://github.com/yeli19950109/apijson-builder) 简单包装 APIJSON,相比直接构造查询 JSON 更好记,ts 编写,调整了一些参数和使用方式
感谢热心的作者们的贡献,点 ⭐Star 支持下他们吧~
From 886099fc07cf264076fe3bf39ed196b0625f489f Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Mon, 11 Dec 2023 00:07:22 +0800
Subject: [PATCH 02/12] =?UTF-8?q?SQLConfig=20=E5=86=85=E6=8A=8A=E6=89=80?=
=?UTF-8?q?=E6=9C=89=20AbstractSQLConfig=20=E6=94=B9=E6=88=90=20SQLConfig?=
=?UTF-8?q?=EF=BC=9B=E4=BC=98=E5=8C=96=20Verifier=20=E7=9A=84=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/apijson/orm/SQLConfig.java | 10 +++---
.../src/main/java/apijson/orm/Verifier.java | 35 ++++++++++++-------
2 files changed, 27 insertions(+), 18 deletions(-)
diff --git a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
index a453d9a8..680b8531 100755
--- a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
@@ -50,19 +50,19 @@ public interface SQLConfig {
Parser getParser();
- AbstractSQLConfig setParser(Parser parser);
+ SQLConfig setParser(Parser parser);
ObjectParser getObjectParser();
- AbstractSQLConfig setObjectParser(ObjectParser objectParser);
+ SQLConfig setObjectParser(ObjectParser objectParser);
int getVersion();
- AbstractSQLConfig setVersion(int version);
+ SQLConfig setVersion(int version);
String getTag();
- AbstractSQLConfig setTag(String tag);
+ SQLConfig setTag(String tag);
boolean isMySQL();
boolean isPostgreSQL();
@@ -243,7 +243,7 @@ default int[] getDBVersionNums() {
String getTablePath();
Map getKeyMap();
- AbstractSQLConfig setKeyMap(Map keyMap);
+ SQLConfig setKeyMap(Map keyMap);
List getRaw();
SQLConfig setRaw(List raw);
diff --git a/APIJSONORM/src/main/java/apijson/orm/Verifier.java b/APIJSONORM/src/main/java/apijson/orm/Verifier.java
index 366adb07..a4ab7205 100755
--- a/APIJSONORM/src/main/java/apijson/orm/Verifier.java
+++ b/APIJSONORM/src/main/java/apijson/orm/Verifier.java
@@ -18,7 +18,6 @@ public interface Verifier {
/**验证权限是否通过
* @param config
- * @param visitor
* @return
* @throws Exception
*/
@@ -37,12 +36,10 @@ public interface Verifier {
void verifyRole(SQLConfig config, String table, RequestMethod method, String role) throws Exception;
/**登录校验
- * @param config
* @throws Exception
*/
void verifyLogin() throws Exception;
/**管理员角色校验
- * @param config
* @throws Exception
*/
void verifyAdmin() throws Exception;
@@ -67,24 +64,36 @@ public interface Verifier {
void verifyRepeat(String table, String key, Object value, long exceptId) throws Exception;
/**验证请求参数的数据和结构
- * @param table
- * @param key
- * @param value
- * @param exceptId 不包含id
+ * @param method
+ * @param name
+ * @param target
+ * @param request
+ * @param maxUpdateCount
+ * @param globalDatabase
+ * @param globalSchema
+ * @param creator
+ * @return
* @throws Exception
*/
JSONObject verifyRequest(RequestMethod method, String name, JSONObject target, JSONObject request,
int maxUpdateCount, String globalDatabase, String globalSchema, SQLCreator creator) throws Exception;
/**验证返回结果的数据和结构
- * @param table
- * @param key
- * @param value
- * @param exceptId 不包含id
+ * @param method
+ * @param name
+ * @param target
+ * @param response
+ * @param database
+ * @param schema
+ * @param creator
+ * @param callback
+ * @return
* @throws Exception
*/
- JSONObject verifyResponse(RequestMethod method, String name, JSONObject target, JSONObject response,
- String database, String schema, SQLCreator creator, OnParseCallback callback) throws Exception;
+ JSONObject verifyResponse(
+ RequestMethod method, String name, JSONObject target, JSONObject response,
+ String database, String schema, SQLCreator creator, OnParseCallback callback
+ ) throws Exception;
@NotNull
From b57ece8b18bc282bd39666f0bcc9d96decb67571 Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Mon, 11 Dec 2023 23:28:49 +0800
Subject: [PATCH 03/12] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E8=87=B3=206.3.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
APIJSONORM/pom.xml | 2 +-
APIJSONORM/src/main/java/apijson/Log.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/APIJSONORM/pom.xml b/APIJSONORM/pom.xml
index b29887e0..26ae3a8e 100644
--- a/APIJSONORM/pom.xml
+++ b/APIJSONORM/pom.xml
@@ -5,7 +5,7 @@
com.github.Tencent
APIJSON
- 6.2.0
+ 6.3.0
jar
APIJSONORM
diff --git a/APIJSONORM/src/main/java/apijson/Log.java b/APIJSONORM/src/main/java/apijson/Log.java
index a1fe3425..d51bb26e 100755
--- a/APIJSONORM/src/main/java/apijson/Log.java
+++ b/APIJSONORM/src/main/java/apijson/Log.java
@@ -14,7 +14,7 @@ public class Log {
public static boolean DEBUG = true;
- public static final String VERSION = "6.2.1";
+ public static final String VERSION = "6.3.0";
public static final String KEY_SYSTEM_INFO_DIVIDER = "\n---|-----APIJSON SYSTEM INFO-----|---\n";
public static final String OS_NAME;
From f1bbdf12d7efbe97da9126dd7cc6f49325efcba5 Mon Sep 17 00:00:00 2001
From: TommyLemon <1184482681@qq.com>
Date: Tue, 19 Dec 2023 22:23:36 +0800
Subject: [PATCH 04/12] =?UTF-8?q?=E8=B4=A1=E7=8C=AE=E8=80=85=E8=AF=B4?=
=?UTF-8?q?=E6=98=8E=EF=BC=9A=E8=85=BE=E8=AE=AF=E5=B7=A5=E7=A8=8B=E5=B8=88?=
=?UTF-8?q?=EF=BC=8C=E6=9B=BE=E5=9C=A8=E5=8D=8E=E4=B8=BA=E3=80=81=E6=81=92?=
=?UTF-8?q?=E7=94=9F=E6=8B=85=E4=BB=BBC/C++=E5=BC=80=E5=8F=91=E5=B7=A5?=
=?UTF-8?q?=E7=A8=8B=E5=B8=88=EF=BC=8C=E5=9C=A8wps=E6=8B=85=E4=BB=BB?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=8F=E7=90=86=EF=BC=8C=E5=9C=A8360?=
=?UTF-8?q?=E6=8B=85=E4=BB=BB=E6=8A=80=E6=9C=AF=E4=B8=93=E5=AE=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
https://blog.csdn.net/caohao0591
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ffcbf272..f9c33a7a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -27,7 +27,7 @@
- [gdjs2](https://github.com/gdjs2)(University of California, Riverside)
- [Rkyzzy](https://github.com/Rkyzzy)(SUSTech, University of California, Berkeley)
- [kxlv2000](https://github.com/kxlv2000)(SUSTech)
-- [caohao-php](https://github.com/caohao-php)(腾讯工程师)
+- [caohao-go](https://github.com/caohao-go)(腾讯工程师,曾在华为、恒生担任C/C++开发工程师,在wps担任项目经理,在360担任技术专家)
- [Wscats](https://github.com/Wscats)(腾讯工程师、腾讯 AlloyTeam 成员、Tencent Creation Camp 成员、知名技术博主)
- [jun0315](https://github.com/jun0315)(腾讯工程师)
- [JieJo](https://github.com/JieJo)
From f3dc785e120576299d8f36ca0a900e656dd02ee5 Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Thu, 4 Jan 2024 00:03:09 +0800
Subject: [PATCH 05/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81=20No?=
=?UTF-8?q?SQL=20=E6=95=B0=E6=8D=AE=E5=BA=93=20MongoDB=EF=BC=8C=E7=89=88?=
=?UTF-8?q?=E6=9C=AC=E5=8D=87=E5=88=B0=206.4.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
APIJSONORM/pom.xml | 2 +-
APIJSONORM/src/main/java/apijson/Log.java | 2 +-
.../java/apijson/orm/AbstractSQLConfig.java | 20 ++++++++++++++++++-
.../src/main/java/apijson/orm/SQLConfig.java | 10 +++++++---
4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/APIJSONORM/pom.xml b/APIJSONORM/pom.xml
index 26ae3a8e..7aa99c4e 100644
--- a/APIJSONORM/pom.xml
+++ b/APIJSONORM/pom.xml
@@ -5,7 +5,7 @@
com.github.Tencent
APIJSON
- 6.3.0
+ 6.4.0
jar
APIJSONORM
diff --git a/APIJSONORM/src/main/java/apijson/Log.java b/APIJSONORM/src/main/java/apijson/Log.java
index d51bb26e..bc127594 100755
--- a/APIJSONORM/src/main/java/apijson/Log.java
+++ b/APIJSONORM/src/main/java/apijson/Log.java
@@ -14,7 +14,7 @@ public class Log {
public static boolean DEBUG = true;
- public static final String VERSION = "6.3.0";
+ public static final String VERSION = "6.4.0";
public static final String KEY_SYSTEM_INFO_DIVIDER = "\n---|-----APIJSON SYSTEM INFO-----|---\n";
public static final String OS_NAME;
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
index 0b8c8607..855e1226 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
@@ -198,6 +198,8 @@ public abstract class AbstractSQLConfig implements SQLConfig(); // 保证顺序,避免配置冲突等意外情况
@@ -1245,12 +1247,28 @@ public static boolean isRedis(String db) {
return DATABASE_REDIS.equals(db);
}
+ @Override
+ public boolean isMongoDB() {
+ return isMongoDB(getSQLDatabase());
+ }
+ public static boolean isMongoDB(String db) {
+ return DATABASE_MONGODB.equals(db);
+ }
+
+ @Override
+ public boolean isKafka() {
+ return isKafka(getSQLDatabase());
+ }
+ public static boolean isKafka(String db) {
+ return DATABASE_KAFKA.equals(db);
+ }
+
@Override
public boolean isMQ() {
return isMQ(getSQLDatabase());
}
public static boolean isMQ(String db) {
- return DATABASE_MQ.equals(db);
+ return isKafka(db);
}
@Override
diff --git a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
index 680b8531..dcb6d497 100755
--- a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
@@ -36,8 +36,10 @@ public interface SQLConfig {
String DATABASE_CASSANDRA = "CASSANDRA"; // https://cassandra.apache.org
String DATABASE_INFLUXDB = "INFLUXDB"; // https://www.influxdata.com/products/influxdb-overview
String DATABASE_TDENGINE = "TDENGINE"; // https://tdengine.com
- String DATABASE_REDIS = "REDIS";
- String DATABASE_MQ = "MQ";
+ String DATABASE_REDIS = "REDIS"; // https://redisql.com
+ String DATABASE_MONGODB = "MONGODB"; // https://www.mongodb.com/docs/atlas/data-federation/query/query-with-sql
+ String DATABASE_KAFKA = "KAFKA"; // https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONDemo-MultiDataSource-Kafka
+ String DATABASE_MQ = "MQ"; //
String SCHEMA_INFORMATION = "information_schema"; //MySQL, PostgreSQL, SQL Server 都有的系统模式
String SCHEMA_SYS = "sys"; //SQL Server 系统模式
@@ -84,10 +86,12 @@ public interface SQLConfig {
boolean isInfluxDB();
boolean isTDengine();
boolean isRedis();
+ boolean isMongoDB();
+ boolean isKafka();
boolean isMQ();
- //暂时只兼容以上几种
+ // 暂时只兼容以上几种
// boolean isSQL();
// boolean isTSQL();
// boolean isPLSQL();
From 55064ee94cf81662e5b1940b0a086f23ac2e9b4b Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Thu, 4 Jan 2024 23:27:26 +0800
Subject: [PATCH 06/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81=20AI?=
=?UTF-8?q?=20=E5=90=91=E9=87=8F=E6=95=B0=E6=8D=AE=E5=BA=93=20Milvus?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/apijson/orm/AbstractSQLConfig.java | 37 +++++++++++++++----
.../src/main/java/apijson/orm/SQLConfig.java | 5 ++-
2 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
index 855e1226..5527e09f 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
@@ -195,6 +195,7 @@ public abstract class AbstractSQLConfig implements SQLConfig parser = getParser();
+ count = parser == null ? AbstractParser.MAX_QUERY_COUNT : parser.getMaxQueryCount();
+ }
+
+ int offset = getOffset(getPage(), count);
+ return " LIMIT " + offset + ", " + count; // 目前 moql-transx 的限制
+ }
+
+ if (count <= 0 || RequestMethod.isHeadMethod(getMethod(), true)) { // TODO HEAD 真的不需要 LIMIT ?
return "";
}
+
return getLimitString(
getPage()
, getCount()
diff --git a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
index dcb6d497..7372630c 100755
--- a/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/SQLConfig.java
@@ -34,6 +34,7 @@ public interface SQLConfig {
String DATABASE_SNOWFLAKE = "SNOWFLAKE"; // https://www.snowflake.com
String DATABASE_DATABRICKS = "DATABRICKS"; // https://www.databricks.com
String DATABASE_CASSANDRA = "CASSANDRA"; // https://cassandra.apache.org
+ String DATABASE_MILVUS = "MILVUS"; // https://milvus.io
String DATABASE_INFLUXDB = "INFLUXDB"; // https://www.influxdata.com/products/influxdb-overview
String DATABASE_TDENGINE = "TDENGINE"; // https://tdengine.com
String DATABASE_REDIS = "REDIS"; // https://redisql.com
@@ -79,10 +80,11 @@ public interface SQLConfig {
boolean isClickHouse();
boolean isHive();
boolean isPresto();
+ boolean isTrino();
boolean isSnowflake();
boolean isDatabricks();
boolean isCassandra();
- boolean isTrino();
+ boolean isMilvus();
boolean isInfluxDB();
boolean isTDengine();
boolean isRedis();
@@ -219,6 +221,7 @@ default int[] getDBVersionNums() {
String getDatabase();
SQLConfig setDatabase(String database);
+ String getSQLSchema();
String getSchema();
SQLConfig setSchema(String schema);
From 1636349a926ec007fd2fc16bf2f6e8470b8e34e4 Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Sun, 7 Jan 2024 21:06:53 +0800
Subject: [PATCH 07/12] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=BC=80=E5=90=AF?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=20=20Snowflake,=20Databricks,=20Cassandra=20?=
=?UTF-8?q?=E7=AD=89=E6=95=B0=E6=8D=AE=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
index 5527e09f..17753553 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
@@ -198,8 +198,11 @@ public abstract class AbstractSQLConfig implements SQLConfig
Date: Sun, 7 Jan 2024 21:25:35 +0800
Subject: [PATCH 08/12] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=20Milvus,=20MongoDB,=20InfluxDB=20=E7=AD=89=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=94=AF=E6=8C=81=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index b037b1a3..131c5644 100644
--- a/README.md
+++ b/README.md
@@ -24,17 +24,19 @@ This source code is licensed under the Apache License Version 2.0
-
-
-
+
-
+
+
+
+
+
From 6e95be68f9a34b1370d7caabed21ae0b14147145 Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Wed, 10 Jan 2024 21:33:48 +0800
Subject: [PATCH 09/12] =?UTF-8?q?SELECT=20column=20=E5=86=85=E5=8E=9F?=
=?UTF-8?q?=E5=A7=8B=20SQL=20=E7=89=87=E6=AE=B5=E6=94=AF=E6=8C=81=20AS=20?=
=?UTF-8?q?=E5=88=AB=E5=90=8D=20@raw:"@column",=20"@column":"(CASE=20WHEN?=
=?UTF-8?q?=20length(`group`)=20>=200=20THEN=20`group`=20ELSE=20'=5F'=20EN?=
=?UTF-8?q?D):name"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/apijson/orm/AbstractSQLConfig.java | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
index 17753553..271a2cbc 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
@@ -157,7 +157,7 @@ public abstract class AbstractSQLConfig implements SQLConfig\\|\\[\\]\\{\\} /\\.\\+\\-\\*\\^\\?\\(\\)\\$]+$");
- TABLE_KEY_MAP = new HashMap();
+ TABLE_KEY_MAP = new HashMap<>();
TABLE_KEY_MAP.put(Table.class.getSimpleName(), Table.TABLE_NAME);
TABLE_KEY_MAP.put(Column.class.getSimpleName(), Column.TABLE_NAME);
TABLE_KEY_MAP.put(PgClass.class.getSimpleName(), PgClass.TABLE_NAME);
@@ -1984,14 +1984,14 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
}
// 简单点, 后台配置就带上 AS
- // int index = expression.lastIndexOf(":");
- // String alias = expression.substring(index+1);
- // boolean hasAlias = StringUtil.isName(alias);
- // String pre = index > 0 && hasAlias ? expression.substring(0, index) : expression;
- // if (RAW_MAP.containsValue(pre) || "".equals(RAW_MAP.get(pre))) { // newSQLConfig 提前处理好的
- // expression = pre + (hasAlias ? " AS " + alias : "");
- // continue;
- // }
+ int index = expression.lastIndexOf(":");
+ String alias = expression.substring(index+1);
+ boolean hasAlias = StringUtil.isName(alias);
+ String pre = index > 0 && hasAlias ? expression.substring(0, index) : expression;
+ if (RAW_MAP.containsValue(pre) || "".equals(RAW_MAP.get(pre))) { // newSQLConfig 提前处理好的
+ keys[i] = pre + (hasAlias ? " AS " + alias : "");
+ continue;
+ }
}
if (expression.length() > 100) {
From 7c9ca1b2d538977c10bdfda6dceaa669b6d230bb Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Sat, 13 Jan 2024 17:05:12 +0800
Subject: [PATCH 10/12] =?UTF-8?q?Operation=20=E6=93=8D=E4=BD=9C=E6=96=B9?=
=?UTF-8?q?=E5=BC=8F=E6=96=B0=E5=A2=9E=20IS=5FID=5FCONDITION=5FMUST?=
=?UTF-8?q?=EF=BC=8C=E6=98=AF=E5=90=A6=E5=BC=BA=E5=88=B6=E8=A6=81=E6=B1=82?=
=?UTF-8?q?=E5=BF=85=E9=A1=BB=E6=9C=89=20id/id{}/id{}@=20=E6=9D=A1?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/apijson/RequestMethod.java | 16 ++++++++++++++++
.../main/java/apijson/orm/AbstractVerifier.java | 11 ++++++-----
.../src/main/java/apijson/orm/Operation.java | 9 +++++++--
3 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/APIJSONORM/src/main/java/apijson/RequestMethod.java b/APIJSONORM/src/main/java/apijson/RequestMethod.java
index 410775c1..875200b7 100755
--- a/APIJSONORM/src/main/java/apijson/RequestMethod.java
+++ b/APIJSONORM/src/main/java/apijson/RequestMethod.java
@@ -83,6 +83,14 @@ public static boolean isHeadMethod(RequestMethod method, boolean containPrivate)
public static boolean isQueryMethod(RequestMethod method) {
return isGetMethod(method, true) || isHeadMethod(method, true);
}
+
+ /**是否为更新(增删改)的请求方法
+ * @param method
+ * @return 读操作(GET型或HEAD型) - false, 写操作(POST,PUT,DELETE) - true
+ */
+ public static boolean isUpdateMethod(RequestMethod method) {
+ return ! isQueryMethod(method);
+ }
/**是否为开放(不限制请求的结构或内容;明文,浏览器能直接访问及查看)的请求方法
* @param method
@@ -92,6 +100,14 @@ public static boolean isPublicMethod(RequestMethod method) {
return method == null || method == GET || method == HEAD;
}
+ /**是否为私有(限制请求的结构或内容)的请求方法
+ * @param method
+ * @return
+ */
+ public static boolean isPrivateMethod(RequestMethod method) {
+ return ! isPublicMethod(method);
+ }
+
public static String getName(RequestMethod method) {
return method == null ? GET.name() : method.name();
}
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java b/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
index 79c1d119..b2eca8bc 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
@@ -80,7 +80,7 @@
public abstract class AbstractVerifier implements Verifier, IdCallback {
private static final String TAG = "AbstractVerifier";
- /**为 PUT, DELETE 强制要求必须有 id/id{} 条件
+ /**为 PUT, DELETE 强制要求必须有 id/id{}/id{}@ 条件
*/
public static boolean IS_UPDATE_MUST_HAVE_ID_CONDITION = true;
/**开启校验请求角色权限
@@ -700,8 +700,9 @@ public JSONObject onParseJSONObject(String key, JSONObject tobj, JSONObject robj
throw new IllegalArgumentException(method + "请求," + name + "/" + key + " 不能传 " + finalIdKey + " !");
}
} else {
- if (RequestMethod.isQueryMethod(method) == false) {
- verifyId(method.name(), name, key, robj, finalIdKey, maxUpdateCount, IS_UPDATE_MUST_HAVE_ID_CONDITION);
+ Boolean atLeastOne = tobj == null ? null : tobj.getBoolean(Operation.IS_ID_CONDITION_MUST.name());
+ if (Boolean.TRUE.equals(atLeastOne) || RequestMethod.isUpdateMethod(method)) {
+ verifyId(method.name(), name, key, robj, finalIdKey, maxUpdateCount, atLeastOne != null ? atLeastOne : IS_UPDATE_MUST_HAVE_ID_CONDITION);
String userIdKey = idCallback == null ? null : idCallback.getUserIdKey(db, sh, ds, key);
String finalUserIdKey = StringUtil.isEmpty(userIdKey, false) ? apijson.JSONObject.KEY_USER_ID : userIdKey;
@@ -746,7 +747,7 @@ private static void verifyId(@NotNull String method, @NotNull String name, @NotN
Object id = robj.get(idKey); //如果必须传 id ,可在Request表中配置NECESSARY
if (id != null && id instanceof Number == false && id instanceof String == false) {
throw new IllegalArgumentException(method + "请求," + name + "/" + key
- + " 里面的 " + idKey + ":value 中value的类型只能是 Long 或 String !");
+ + " 里面的 " + idKey + ":value 中value的类型只能是 Long 或 String !");
}
@@ -795,7 +796,7 @@ else if (o instanceof String) {
}
else {
throw new IllegalArgumentException(method + "请求," + name + "/" + key
- + " 里面的 " + idInKey + ":[] 中所有项的类型都只能是 Long 或 String !");
+ + " 里面的 " + idInKey + ":[] 中所有项的类型都只能是 Long 或 String !");
}
}
}
diff --git a/APIJSONORM/src/main/java/apijson/orm/Operation.java b/APIJSONORM/src/main/java/apijson/orm/Operation.java
index 6a588a94..2976d09b 100755
--- a/APIJSONORM/src/main/java/apijson/orm/Operation.java
+++ b/APIJSONORM/src/main/java/apijson/orm/Operation.java
@@ -145,8 +145,13 @@ public enum Operation {
/**
* 允许批量增删改部分失败,结构是
* "Table[],key[],key:alias[]"
- * 自动 ALLOW_PARTIAL_UPDATE_FAILED_TABLE_MAP.put
+ * 自动 ALLOW_PARTIAL_UPDATE_FAILED_TABLE_MAP.put,结构是 Boolean,例如 true
*/
- ALLOW_PARTIAL_UPDATE_FAIL;
+ ALLOW_PARTIAL_UPDATE_FAIL,
+
+ /**
+ * 强制要求必须有 id/id{}/id{}@ 条件,结构是 Boolean,例如 true
+ */
+ IS_ID_CONDITION_MUST;
}
From 5b9b34c7ebe8bfdc25f1ef2966c786d01f693447 Mon Sep 17 00:00:00 2001
From: TommyLemon
Date: Sat, 13 Jan 2024 17:06:34 +0800
Subject: [PATCH 11/12] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=9F=90=E4=BA=9B?=
=?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=20@raw=20=E5=AF=B9=20@having:value?=
=?UTF-8?q?=20=E4=B8=AD=20value=20=E4=B8=AD=E7=9A=84=E5=A4=96=E5=B1=82?=
=?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E4=B8=8D=E7=94=9F=E6=95=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/apijson/orm/AbstractSQLConfig.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
index 271a2cbc..bfb3b1e1 100755
--- a/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
+++ b/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java
@@ -2032,6 +2032,16 @@ public String parseSQLExpression(String key, String expression, boolean containR
* @return
*/
public String parseSQLExpression(String key, String expression, boolean containRaw, boolean allowAlias, String example) {
+ if (containRaw) {
+ String s = RAW_MAP.get(expression);
+ if ("".equals(s)) {
+ return expression;
+ }
+ if (s != null) {
+ return s;
+ }
+ }
+
String quote = getQuote();
int start = expression.indexOf('(');
if (start < 0) {
From 7547cd2dec7255a920e5cd2d89e89f397f084bf7 Mon Sep 17 00:00:00 2001
From: TommyLemon <1184482681@qq.com>
Date: Thu, 18 Jan 2024 21:39:04 +0800
Subject: [PATCH 12/12] =?UTF-8?q?=E7=99=BB=E8=AE=B0=E4=B8=8A=E6=B5=B7?=
=?UTF-8?q?=E7=BF=8A=E4=B8=9E=E4=BA=92=E8=81=94=E7=BD=91=E7=A7=91=E6=8A=80?=
=?UTF-8?q?=E6=9C=89=E9=99=90=E5=85=AC=E5=8F=B8=EF=BC=8C=E6=84=9F=E8=B0=A2?=
=?UTF-8?q?=20@li-chaopeng-01=20=E7=9A=84=20Gitee=20PR#7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
https://gitee.com/Tencent/APIJSON/pulls/7
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 131c5644..fc9b199a 100644
--- a/README.md
+++ b/README.md
@@ -353,6 +353,7 @@ https://github.com/Tencent/APIJSON/issues/187
* [爱投斯智能技术(深圳)有限公司](http://www.aiotos.net)
* [邻盛科技(武汉)有限公司](http://www.linksame.com)
* [上海麦市信息科技有限公司](https://www.masscms.com)
+ * [上海翊丞互联网科技有限公司](http://www.renrencjl.com/home)
### 贡献者们
主项目 APIJSON 的贡献者们(6 个腾讯工程师、1 个微软工程师、1 个阿里云工程师、1 个字节跳动工程师、1 个网易工程师、1 个 Zoom 工程师、1 个圆通工程师、1 个知乎基础研发架构师、1 个智联招聘工程师、1 个美国加州大学学生、3 个 SUSTech 学生等):