!290 修复json返回类型跟mysql不一致问题
Merge pull request !290 from zhangtingtingting/7.9.1
This commit is contained in:
@ -110,7 +110,7 @@ public class TypeInfoCache implements TypeInfo {
|
||||
{"smalldatetime", Oid.SMALLDATETIME, Types.TIMESTAMP, "java.lang.Timestamp", Oid.SMALLDATETIME_ARRAY},
|
||||
{"timestamptz", Oid.TIMESTAMPTZ, Types.TIMESTAMP, "java.sql.Timestamp",
|
||||
Oid.TIMESTAMPTZ_ARRAY},
|
||||
{"json", Oid.JSON, Types.OTHER, "org.postgresql.util.PGobject", Oid.JSON_ARRAY},
|
||||
{"json", Oid.JSON, Types.VARCHAR, "java.lang.String", Oid.JSON_ARRAY},
|
||||
{"point", Oid.POINT, Types.OTHER, "org.postgresql.geometric.PGpoint", Oid.POINT_ARRAY},
|
||||
{"blob", Oid.BLOB, Types.BLOB, "org.postgresql.util.PGobject", -1},
|
||||
{"clob", Oid.CLOB, Types.CLOB, "org.postgresql.util.PGobject", -1},
|
||||
|
||||
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved.
|
||||
*
|
||||
* openGauss is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
*
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
package org.postgresql.test.dolphintest;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.postgresql.test.TestUtil;
|
||||
import org.postgresql.test.jdbc2.BaseTest4B;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* test binary
|
||||
*
|
||||
* @author zhangting
|
||||
* @since 2024-08-20
|
||||
*/
|
||||
public class BinaryTest extends BaseTest4B {
|
||||
@Test
|
||||
public void testBinary1() throws SQLException {
|
||||
TestUtil.createTable(con, "test_binary_b", "id int, c1 binary(5)");
|
||||
try (PreparedStatement pstmt = con.prepareStatement("INSERT INTO test_binary_b VALUES (?,?)")) {
|
||||
pstmt.setInt(1, 1);
|
||||
try (InputStream data = new ByteArrayInputStream("abcde".getBytes(StandardCharsets.UTF_8))) {
|
||||
pstmt.setBinaryStream(2, data);
|
||||
pstmt.execute();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
String sql = "INSERT INTO test_binary_b VALUES (2,'abcde'::binary)";
|
||||
try (PreparedStatement pstmt = con.prepareStatement(sql)) {
|
||||
pstmt.execute();
|
||||
}
|
||||
|
||||
try (Statement statement = con.createStatement();
|
||||
ResultSet rs = statement.executeQuery("SELECT * FROM test_binary_b")) {
|
||||
while (rs.next()) {
|
||||
assertEquals("\\x6162636465", new String(rs.getBytes(2),
|
||||
StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
TestUtil.dropTable(con, "test_binary_b");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBinary2() throws SQLException {
|
||||
try (Statement stat = con.createStatement()) {
|
||||
try (ResultSet rs = stat.executeQuery("SELECT '10101'::binary(5)")) {
|
||||
while (rs.next()) {
|
||||
assertEquals("\\x3130313031", new String(rs.getBytes(1),
|
||||
StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
try (ResultSet rs = stat.executeQuery("SELECT cast('abc' as binary)")) {
|
||||
while (rs.next()) {
|
||||
assertEquals("\\x616263", rs.getString(1));
|
||||
}
|
||||
}
|
||||
|
||||
stat.execute("set bytea_output=escape;");
|
||||
try (ResultSet rs = stat.executeQuery("SELECT '10101'::binary(5)")) {
|
||||
while (rs.next()) {
|
||||
assertEquals("10101", new String(rs.getBytes(1),
|
||||
StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
try (ResultSet rs = stat.executeQuery("SELECT cast('abc' as binary)")) {
|
||||
while (rs.next()) {
|
||||
assertEquals("abc", rs.getString(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved.
|
||||
*
|
||||
* openGauss is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
*
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
package org.postgresql.test.dolphintest;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.postgresql.test.TestUtil;
|
||||
import org.postgresql.test.jdbc2.BaseTest4B;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.Statement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.sql.Types;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* test numeric
|
||||
*
|
||||
* @author zhangting
|
||||
* @since 2024-08-20
|
||||
*/
|
||||
public class NumericTest extends BaseTest4B {
|
||||
/*
|
||||
* test numeric type
|
||||
*/
|
||||
@Test
|
||||
public void testNumeric() throws Exception {
|
||||
TestUtil.createTable(con, "test_numeric", "c1 numeric,c2 numeric(8,4),c3 float,"
|
||||
+ "c4 float(8,4),c5 double,c6 double(8,4),c7 real,c8 real(8,4),c9 decimal(8,4)");
|
||||
|
||||
String sql = "INSERT INTO test_numeric VALUES (?,?,?,?,?,?,?,?,?)";
|
||||
try (PreparedStatement pstmt = con.prepareStatement(sql)) {
|
||||
for (int i = 1; i <= 9; i++) {
|
||||
pstmt.setDouble(i, 92.456739023);
|
||||
}
|
||||
pstmt.executeUpdate();
|
||||
}
|
||||
|
||||
try (Statement stmt = con.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT * FROM test_numeric")) {
|
||||
assertTrue(rs.next());
|
||||
ResultSetMetaData rsmd = rs.getMetaData();
|
||||
assertEquals(9, rsmd.getColumnCount());
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(1));
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(2));
|
||||
assertEquals(Types.REAL, rsmd.getColumnType(3));
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(4));
|
||||
assertEquals(Types.DOUBLE, rsmd.getColumnType(5));
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(6));
|
||||
assertEquals(Types.REAL, rsmd.getColumnType(7));
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(8));
|
||||
assertEquals(Types.NUMERIC, rsmd.getColumnType(9));
|
||||
|
||||
assertEquals(new BigDecimal(92), rs.getObject(1));
|
||||
assertEquals(new String("92.4567"), rs.getString(2));
|
||||
assertEquals(new String("92.4567"), rs.getString(4));
|
||||
assertEquals(new String("92.4567"), rs.getString(6));
|
||||
assertEquals(new String("92.4567"), rs.getString(8));
|
||||
assertEquals(new String("92.4567"), rs.getString(9));
|
||||
}
|
||||
TestUtil.dropTable(con, "test_numeric");
|
||||
}
|
||||
}
|
||||
@ -160,14 +160,7 @@ public class ArrayTest extends BaseTest4 {
|
||||
return;
|
||||
}
|
||||
PreparedStatement pstmt = con.prepareStatement("SELECT ?::json[]");
|
||||
PGobject p1 = new PGobject();
|
||||
p1.setType("json");
|
||||
p1.setValue("{\"x\": 10}");
|
||||
|
||||
PGobject p2 = new PGobject();
|
||||
p2.setType("json");
|
||||
p2.setValue("{\"x\": 20}");
|
||||
PGobject[] in = new PGobject[] { p1, p2 };
|
||||
String[] in = new String[]{"{\"x\": 10}", "{\"x\": 20}"};
|
||||
pstmt.setArray(1, con.createArrayOf("json", in));
|
||||
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
@ -175,10 +168,10 @@ public class ArrayTest extends BaseTest4 {
|
||||
Array arr = rs.getArray(1);
|
||||
ResultSet arrRs = arr.getResultSet();
|
||||
Assert.assertTrue(arrRs.next());
|
||||
Assert.assertEquals(in[0], arrRs.getObject(2));
|
||||
Assert.assertEquals(in[0], arrRs.getString(2));
|
||||
|
||||
Assert.assertTrue(arrRs.next());
|
||||
Assert.assertEquals(in[1], arrRs.getObject(2));
|
||||
Assert.assertEquals(in[1], arrRs.getString(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
60
pgjdbc/src/test/java/org/postgresql/test/jdbc4/JsonTest.java
Normal file
60
pgjdbc/src/test/java/org/postgresql/test/jdbc4/JsonTest.java
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved.
|
||||
*
|
||||
* openGauss is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
*
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
package org.postgresql.test.jdbc4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.postgresql.test.TestUtil;
|
||||
import org.postgresql.test.jdbc2.BaseTest4;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.Statement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.sql.Types;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* test json
|
||||
*
|
||||
* @author zhangting
|
||||
* @since 2024-08-20
|
||||
*/
|
||||
public class JsonTest extends BaseTest4 {
|
||||
/*
|
||||
* test json to string
|
||||
*/
|
||||
@Test
|
||||
public void testJsonToString() throws Exception {
|
||||
TestUtil.createTable(con, "test_json", "id json");
|
||||
String sql = "INSERT INTO test_json VALUES ('{\"k1\":\"v1\",\"k2\":\"v2\"}')";
|
||||
try (PreparedStatement pstmt = con.prepareStatement(sql)) {
|
||||
pstmt.executeUpdate();
|
||||
}
|
||||
|
||||
try (Statement stmt = con.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT * FROM test_json")) {
|
||||
assertTrue(rs.next());
|
||||
ResultSetMetaData rsmd = rs.getMetaData();
|
||||
assertEquals(1, rsmd.getColumnCount());
|
||||
assertEquals(Types.VARCHAR, rsmd.getColumnType(1));
|
||||
|
||||
assertEquals("{\"k1\":\"v1\",\"k2\":\"v2\"}", rs.getString(1));
|
||||
}
|
||||
TestUtil.dropTable(con, "test_json");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user