Skip to content

Commit 947837b

Browse files
committed
HHH-19297 Fix json type issue.
1 parent 34fc204 commit 947837b

File tree

7 files changed

+30
-53
lines changed

7 files changed

+30
-53
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonArrayAggFunction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void render(
3838
ReturnableType<?> returnType,
3939
SqlAstTranslator<?> translator) {
4040
final boolean caseWrapper = filter != null;
41-
sqlAppender.appendSql( "concat('[',group_concat(" );
41+
sqlAppender.appendSql( "json_build_array(group_concat(" );
4242
final JsonNullBehavior nullBehavior;
4343
if ( sqlAstArguments.size() > 1 ) {
4444
nullBehavior = (JsonNullBehavior) sqlAstArguments.get( 1 );
@@ -80,20 +80,20 @@ public void render(
8080
}
8181
translator.getCurrentClauseStack().pop();
8282
}
83-
sqlAppender.appendSql( " separator ','),']')" );
83+
sqlAppender.appendSql( " separator ','))" );
8484
}
8585

8686
@Override
8787
protected void renderArgument(
8888
SqlAppender sqlAppender, Expression arg, JsonNullBehavior nullBehavior, SqlAstTranslator<?> translator) {
89-
sqlAppender.appendSql( "to_json(" );
9089
if ( nullBehavior != JsonNullBehavior.NULL ) {
9190
sqlAppender.appendSql( "nullif(" );
9291
}
92+
sqlAppender.appendSql( "to_json(" );
9393
arg.accept( translator );
94+
sqlAppender.appendSql( ')' );
9495
if ( nullBehavior != JsonNullBehavior.NULL ) {
95-
sqlAppender.appendSql( ",'null')" );
96+
sqlAppender.appendSql( ",to_json('null'))" );
9697
}
97-
sqlAppender.appendSql( ')' );
9898
}
9999
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonArrayAppendFunction.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.hibernate.sql.ast.spi.SqlAppender;
1515
import org.hibernate.sql.ast.tree.SqlAstNode;
1616
import org.hibernate.sql.ast.tree.expression.Expression;
17-
import org.hibernate.sql.ast.tree.expression.UnparsedNumericLiteral;
1817
import org.hibernate.type.spi.TypeConfiguration;
1918

2019
/**
@@ -45,29 +44,22 @@ public void render(
4544
json.accept( translator );
4645
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
4746
sqlAppender.appendSql( ")) = 'array' THEN " );
48-
buildJsonArrayPushValue( sqlAppender, value );
47+
sqlAppender.appendSql( "json_array_push_json(" );
4948
sqlAppender.appendSql( "json_extract_json(" );
5049
json.accept( translator );
5150
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
5251
sqlAppender.appendSql( ")," );
52+
sqlAppender.appendSql( "to_json(" );
5353
value.accept( translator );
54-
sqlAppender.appendSql( ") ELSE " );
55-
buildJsonArrayPushValue( sqlAppender, value );
54+
sqlAppender.appendSql( ")) ELSE " );
55+
sqlAppender.appendSql( "json_array_push_json(" );
5656
sqlAppender.appendSql( "json_build_array(json_extract_json(" );
5757
json.accept( translator );
5858
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
5959
sqlAppender.appendSql( "))," );
60+
sqlAppender.appendSql( "to_json(" );
6061
value.accept( translator );
61-
sqlAppender.appendSql( ") END )" );
62-
}
63-
64-
private static boolean isNumeric(SqlAstNode value) {
65-
return value instanceof UnparsedNumericLiteral<?>;
66-
}
67-
68-
private static void buildJsonArrayPushValue(SqlAppender sqlAppender, SqlAstNode value) {
69-
sqlAppender.appendSql( "json_array_push_" );
70-
sqlAppender.appendSql( isNumeric( value ) ? "double(" : "string(" );
62+
sqlAppender.appendSql( ")) END )" );
7163
}
7264

7365
private static void buildJsonPath(

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonArrayInsertFunction.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
*/
55
package org.hibernate.community.dialect.function.json;
66

7-
import java.util.List;
8-
97
import org.hibernate.QueryException;
108
import org.hibernate.dialect.function.json.AbstractJsonArrayInsertFunction;
119
import org.hibernate.dialect.function.json.JsonPathHelper;
@@ -14,9 +12,10 @@
1412
import org.hibernate.sql.ast.spi.SqlAppender;
1513
import org.hibernate.sql.ast.tree.SqlAstNode;
1614
import org.hibernate.sql.ast.tree.expression.Expression;
17-
import org.hibernate.sql.ast.tree.expression.UnparsedNumericLiteral;
1815
import org.hibernate.type.spi.TypeConfiguration;
1916

17+
import java.util.List;
18+
2019
/**
2120
* SingleStore json_array_insert function.
2221
*/
@@ -48,24 +47,26 @@ public void render(
4847
json.accept( translator );
4948
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
5049
sqlAppender.appendSql( ")) = 'array' THEN " );
51-
buildJsonArrayInsertValue( sqlAppender, value );
50+
sqlAppender.appendSql( "json_splice_json(" );
5251
sqlAppender.appendSql( "json_extract_json(" );
5352
json.accept( translator );
5453
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
5554
sqlAppender.appendSql( "), " );
5655
sqlAppender.appendSql( arrayIndex );
5756
sqlAppender.appendSql( ", 0, " );
57+
sqlAppender.appendSql( "to_json(" );
5858
value.accept( translator );
59-
sqlAppender.appendSql( ") ELSE " );
60-
buildJsonArrayInsertValue( sqlAppender, value );
59+
sqlAppender.appendSql( ")) ELSE " );
60+
sqlAppender.appendSql( "json_splice_json(" );
6161
sqlAppender.appendSql( "json_build_array(json_extract_json(" );
6262
json.accept( translator );
6363
buildJsonPath( sqlAppender, jsonPath, jsonPathElements );
6464
sqlAppender.appendSql( "))," );
6565
sqlAppender.appendSql( arrayIndex );
6666
sqlAppender.appendSql( ", 0, " );
67+
sqlAppender.appendSql( "to_json(" );
6768
value.accept( translator );
68-
sqlAppender.appendSql( ") END" );
69+
sqlAppender.appendSql( ")) END" );
6970
if ( jsonPathElements.size() > 1 ) {
7071
sqlAppender.appendSql( ')' );
7172
}
@@ -83,15 +84,6 @@ private static int getArrayIndex(List<JsonPathHelper.JsonPathElement> jsonPathEl
8384
return ( (JsonPathHelper.JsonIndexAccess) lastPathElement ).index();
8485
}
8586

86-
private static boolean isNumeric(SqlAstNode value) {
87-
return value instanceof UnparsedNumericLiteral<?>;
88-
}
89-
90-
private static void buildJsonArrayInsertValue(SqlAppender sqlAppender, SqlAstNode value) {
91-
sqlAppender.appendSql( "json_splice_" );
92-
sqlAppender.appendSql( isNumeric( value ) ? "double(" : "string(" );
93-
}
94-
9587
private static void buildJsonPath(
9688
SqlAppender sqlAppender, Expression jsonPath, List<JsonPathHelper.JsonPathElement> jsonPathElements) {
9789
for ( int i = 0; i < jsonPathElements.size() - 1; i++ ) {

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonObjectAggFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ protected void render(
6060
@Override
6161
protected void renderArgument(
6262
SqlAppender sqlAppender, Expression arg, JsonNullBehavior nullBehavior, SqlAstTranslator<?> translator) {
63-
sqlAppender.appendSql( "to_json(" );
6463
if ( nullBehavior != JsonNullBehavior.NULL ) {
6564
sqlAppender.appendSql( "nullif(" );
6665
}
66+
sqlAppender.appendSql( "to_json(" );
6767
arg.accept( translator );
68+
sqlAppender.appendSql( ")" );
6869
if ( nullBehavior != JsonNullBehavior.NULL ) {
69-
sqlAppender.appendSql( ",'null')" );
70+
sqlAppender.appendSql( ",to_json('null'))" );
7071
}
71-
sqlAppender.appendSql( ")" );
7272
}
7373
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonQueryFunction.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ protected void render(
5050
final JsonQueryWrapMode wrapMode = arguments.wrapMode();
5151
final DecorationMode decorationMode = determineDecorationMode( wrapMode );
5252
if ( decorationMode == DecorationMode.WRAP ) {
53-
sqlAppender.appendSql( "concat('['," );
53+
sqlAppender.appendSql( "json_build_array(" );
5454
}
55-
sqlAppender.appendSql( "nullif(json_extract_string(" );
55+
sqlAppender.appendSql( "nullif(json_extract_json(" );
5656
arguments.jsonDocument().accept( walker );
5757
for ( JsonPathHelper.JsonPathElement pathElement : jsonPathElements ) {
5858
sqlAppender.appendSql( ',' );
@@ -69,9 +69,9 @@ else if ( pathElement instanceof JsonPathHelper.JsonParameterIndexAccess ) {
6969
sqlAppender.appendSql( '\'' );
7070
}
7171
}
72-
sqlAppender.appendSql( "),'null')" );
72+
sqlAppender.appendSql( "),to_json('null'))" );
7373
if ( decorationMode == DecorationMode.WRAP ) {
74-
sqlAppender.appendSql( ",']')" );
74+
sqlAppender.appendSql( ")" );
7575
}
7676
}
7777
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonSetFunction.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.hibernate.sql.ast.spi.SqlAppender;
1515
import org.hibernate.sql.ast.tree.SqlAstNode;
1616
import org.hibernate.sql.ast.tree.expression.Expression;
17-
import org.hibernate.sql.ast.tree.expression.UnparsedNumericLiteral;
1817
import org.hibernate.type.spi.TypeConfiguration;
1918

2019
/**
@@ -39,8 +38,7 @@ public void render(
3938
final List<JsonPathHelper.JsonPathElement> jsonPathElements = JsonPathHelper.parseJsonPathElements( translator.getLiteralValue(
4039
jsonPath ) );
4140
final SqlAstNode value = arguments.get( 2 );
42-
sqlAppender.appendSql( "json_set_" );
43-
sqlAppender.appendSql( isNumeric( value ) ? "double(" : "string(" );
41+
sqlAppender.appendSql( "json_set_json(" );
4442
json.accept( translator );
4543
for ( JsonPathHelper.JsonPathElement pathElement : jsonPathElements ) {
4644
sqlAppender.appendSql( ',' );
@@ -57,13 +55,8 @@ else if ( pathElement instanceof JsonPathHelper.JsonParameterIndexAccess ) {
5755
sqlAppender.appendSql( '\'' );
5856
}
5957
}
60-
sqlAppender.appendSql( ',' );
58+
sqlAppender.appendSql( ", to_json(" );
6159
value.accept( translator );
62-
sqlAppender.appendSql( ')' );
60+
sqlAppender.appendSql( "))" );
6361
}
64-
65-
private static boolean isNumeric(SqlAstNode value) {
66-
return value instanceof UnparsedNumericLiteral<?>;
67-
}
68-
6962
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonValueFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ protected void render(
5454
throw new QueryException( "SingleStore json_value only support literal json paths, but got " + arguments.jsonPath() );
5555
}
5656
final List<JsonPathHelper.JsonPathElement> jsonPathElements = JsonPathHelper.parseJsonPathElements( jsonPath );
57-
sqlAppender.appendSql( "json_extract_string(" );
57+
sqlAppender.appendSql( "json_extract_json(" );
5858
arguments.jsonDocument().accept( walker );
5959
for ( JsonPathHelper.JsonPathElement pathElement : jsonPathElements ) {
6060
sqlAppender.appendSql( ',' );

0 commit comments

Comments
 (0)