feat: support options property

This commit is contained in:
travelliu
2023-08-23 10:57:34 +08:00
parent 423c61ea32
commit ef0eaba37a
4 changed files with 145 additions and 8 deletions

View File

@ -553,8 +553,18 @@ public enum PGProperty {
"if the active node is down, set the timeout threshold for searching for the active node. If the active node is not detected within this timeout period, " +
"the cluster is considered to have no active node and no maintenance is performed on the current cluster. This time should include the RTO time of the active node."),
ADAPTIVE_SET_SQL_TYPE("adaptiveSetSQLType","false","Adaptively modify the inconsistent set sqlType in batch mode. If the first set sqlType is INTEGER and the second set is LONG, " +
"the first one will be automatically modify to LONG")
/**
* Adaptively modify the inconsistent set sqlType in batch mode. If the first set sqlType is INTEGER and
* the second set is LONG, the first one will be automatically modify to LONG
*/
ADAPTIVE_SET_SQL_TYPE("adaptiveSetSQLType", "false", "Adaptively modify the inconsistent set sqlType in batch mode. If the first set sqlType is INTEGER and" +
" the second set is LONG, the first one will be automatically modify to LONG"),
/**
* Specify 'options' connection initialization parameter.
* The value of this parameter may contain spaces and other special characters or their URL representation.
*/
OPTIONS("options", null, "Specify 'options' connection initialization parameter."),
;

View File

@ -470,6 +470,11 @@ public class ConnectionFactoryImpl extends ConnectionFactory {
if (PGProperty.PG_CLIENT_LOGIC.get(info) != null && PGProperty.PG_CLIENT_LOGIC.get(info).equals("1")) {
paramList.add(new String[]{"enable_full_encryption", "1"});
}
String options = PGProperty.OPTIONS.get(info);
if (options != null) {
paramList.add(new String[]{"options", options});
}
return paramList;
}

View File

@ -1,14 +1,36 @@
/*
* Copyright (c) openGauss 2023. 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.jdbc2;
import org.junit.After;
import org.junit.Test;
import org.postgresql.test.TestUtil;
import java.sql.*;
import java.util.Properties;
import static org.junit.Assert.fail;
public class AdaptiveSetTypeTest extends BaseTest4{
/**
* Some simple tests url adaptiveSetSQLType
*
* @author bin.liu
* @version 1.0
*/
public class AdaptiveSetTypeTest extends BaseTest4 {
@Override
public void setUp() throws Exception {
super.setUp();
@ -19,26 +41,28 @@ public class AdaptiveSetTypeTest extends BaseTest4{
public void tearDown() throws SQLException {
TestUtil.dropTable(con, "test_numeric");
}
@Override
protected void updateProperties(Properties props) {
props.setProperty("adaptiveSetSQLType","true");
props.setProperty("adaptiveSetSQLType", "true");
}
@Test
public void AdaptiveSetTypeTrue() throws SQLException {
PreparedStatement ps = null;
Long a = new Long("2180000000");
try {
ps = con.prepareStatement("INSERT INTO test_numeric (F_MEMBER_ID,F_REGISTER_CAPITAL) VALUES ( ?, ?)");
ps.setString(1,"2097 ");
ps.setString(1, "2097 ");
ps.setNull(2, Types.INTEGER);
ps.addBatch();
ps.setString(1,"3020 " );
ps.setLong(2,a);
ps.setString(1, "3020 ");
ps.setLong(2, a);
ps.addBatch();
ps.executeBatch();
} catch (SQLException e) {
fail(e.getMessage());
}finally {
} finally {
TestUtil.closeQuietly(ps);
}
}

View File

@ -0,0 +1,98 @@
/*
* Copyright (c) openGauss 2023. 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.jdbc2;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.postgresql.test.TestUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
/**
* Some simple tests url options
*
* @author bin.liu
* @version 1.0
*/
public class OptionTest extends BaseTest4 {
private final String behaviorCompatOptionsName = "behavior_compat_options";
@Before
public void setUp() throws Exception {
return;
}
private Connection conDB(Properties props) throws Exception {
return TestUtil.openDB(props);
}
private String setOptionsAndGet(String name, String value) throws Exception {
Properties props = new Properties();
if (value != null && !value.equals("")) {
props.setProperty("options", "-c " + name + "=" + value);
}
con = conDB(props);
Statement s = con.createStatement();
ResultSet rs = s.executeQuery("show " + name);
while (rs.next()) {
return rs.getString(1);
}
return "";
}
@Test
public void optionsBehaviorCompatOptions() throws Exception {
// options applied successfully
String s = setOptionsAndGet(behaviorCompatOptionsName, "");
assertEquals("", s);
// behavior_compat_options_name more option
String value = "hide_tailing_zero,display_leading_zero";
s = setOptionsAndGet(behaviorCompatOptionsName, value);
assertEquals(value, s);
// behavior_compat_options_name duplicate option
s = setOptionsAndGet(behaviorCompatOptionsName, "hide_tailing_zero,hide_tailing_zero");
assertEquals("hide_tailing_zero,hide_tailing_zero", s);
// options applied failed
optionsBehaviorCompatOptionsFailed(behaviorCompatOptionsName, "''");
optionsBehaviorCompatOptionsFailed(behaviorCompatOptionsName, "hide_tailing_zero,,");
}
private void optionsBehaviorCompatOptionsFailed(String name, String value) throws Exception {
Properties props = new Properties();
String s = name + "=" + value;
props.setProperty("options", "-c " + s);
Connection con1 = null;
try {
con1 = conDB(props);
Assert.fail("set options " + s);
} catch (SQLException e) {
// Ignored.
System.out.println(e.getMessage());
} finally {
if (con1 != null) {
con1.close();
}
}
}
}