Commit 184505bb authored by Bruce Momjian's avatar Bruce Momjian

Attached is a patch that does the following:

1) improves performance of commit/rollback by reducing number of round
trips to the server
2) uses 7.1 functionality for setting the transaction isolation level
3) backs out a patch from 11 days ago because that code failed to
compile under jdk1.1

Details:

1)  The old code was doing the following for each commit:
   commit
   begin
   set transaction isolation level xxx
thus a call to commit was performing three round trips to the database.
  The new code does this in one round trip as:
   commit; begin; set transaction isolation level xxx

In a simple test program that performs 1000 transactions (where each
transaction does one simple select inside that transaction) has the
following before and after timings:

Client and Server on same machine

old         new
---         ---
1.877sec    1.405sec   25.1% improvement

Client and Server on different machines
old         new
---         ---
4.184sec    2.927sec   34.3% improvement

(all timings are an average of four different runs)


2)  The driver was using 'set transaction isolation level xxx' at the
begining of each transaction, instead of using the new 7.1 syntax of
'set session characteristics as transaction isolation level xxx' which
only needs to be done once instead of for each transaction.  This is
done conditionally (i.e. if server is 7.0 or older do the old behaviour,
else do the new behaviour) to not break backward compatibility.  This
also required the movement of some code to check/test database version
numbers from the DatabaseMetaData object to the Connection object.

3) Finally while testing, I discovered that the code that was checked in
  11 days ago actually didn't compile.  The code in the patch for
Connection.setCatalog() used Properties.setProperty() which only exists
in JDK1.2 or higher.  Thus compiling the JDBC1 driver failed as this
method doesn't exist.  Thus I backed out that patch.


Barry Lind
parent dad8e410
...@@ -11,7 +11,7 @@ import org.postgresql.util.*; ...@@ -11,7 +11,7 @@ import org.postgresql.util.*;
import org.postgresql.core.Encoding; import org.postgresql.core.Encoding;
/** /**
* $Id: Connection.java,v 1.21 2001/07/30 14:51:19 momjian Exp $ * $Id: Connection.java,v 1.22 2001/08/04 19:32:04 momjian Exp $
* *
* This abstract class is used by org.postgresql.Driver to open either the JDBC1 or * This abstract class is used by org.postgresql.Driver to open either the JDBC1 or
* JDBC2 versions of the Connection class. * JDBC2 versions of the Connection class.
...@@ -37,6 +37,9 @@ public abstract class Connection ...@@ -37,6 +37,9 @@ public abstract class Connection
*/ */
private Encoding encoding = Encoding.defaultEncoding(); private Encoding encoding = Encoding.defaultEncoding();
private String dbVersionLong;
private String dbVersionNumber;
public boolean CONNECTION_OK = true; public boolean CONNECTION_OK = true;
public boolean CONNECTION_BAD = false; public boolean CONNECTION_BAD = false;
...@@ -262,18 +265,19 @@ public abstract class Connection ...@@ -262,18 +265,19 @@ public abstract class Connection
// used, so we denote this with 'UNKNOWN'. // used, so we denote this with 'UNKNOWN'.
final String encodingQuery = final String encodingQuery =
"select case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end"; "case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end";
// Set datestyle and fetch db encoding in a single call, to avoid making // Set datestyle and fetch db encoding in a single call, to avoid making
// more than one round trip to the backend during connection startup. // more than one round trip to the backend during connection startup.
java.sql.ResultSet resultSet = java.sql.ResultSet resultSet =
ExecSQL("set datestyle to 'ISO'; " + encodingQuery); ExecSQL("set datestyle to 'ISO'; select version(), " + encodingQuery + ";");
if (! resultSet.next()) { if (! resultSet.next()) {
throw new PSQLException("postgresql.con.failed", "failed getting backend encoding"); throw new PSQLException("postgresql.con.failed", "failed getting backend encoding");
} }
dbEncoding = resultSet.getString(1); dbVersionLong = resultSet.getString(1);
dbEncoding = resultSet.getString(2);
encoding = Encoding.getEncoding(dbEncoding, info.getProperty("charSet")); encoding = Encoding.getEncoding(dbEncoding, info.getProperty("charSet"));
// Initialise object handling // Initialise object handling
...@@ -904,8 +908,7 @@ public abstract class Connection ...@@ -904,8 +908,7 @@ public abstract class Connection
if (autoCommit) if (autoCommit)
ExecSQL("end"); ExecSQL("end");
else { else {
ExecSQL("begin"); ExecSQL("begin; " + getIsolationLevelSQL());
doIsolationLevel();
} }
this.autoCommit = autoCommit; this.autoCommit = autoCommit;
} }
...@@ -934,11 +937,7 @@ public abstract class Connection ...@@ -934,11 +937,7 @@ public abstract class Connection
public void commit() throws SQLException { public void commit() throws SQLException {
if (autoCommit) if (autoCommit)
return; return;
ExecSQL("commit"); ExecSQL("commit; begin; " + getIsolationLevelSQL());
autoCommit = true;
ExecSQL("begin");
doIsolationLevel();
autoCommit = false;
} }
/** /**
...@@ -952,11 +951,7 @@ public abstract class Connection ...@@ -952,11 +951,7 @@ public abstract class Connection
public void rollback() throws SQLException { public void rollback() throws SQLException {
if (autoCommit) if (autoCommit)
return; return;
ExecSQL("rollback"); ExecSQL("rollback; begin; " + getIsolationLevelSQL());
autoCommit = true;
ExecSQL("begin");
doIsolationLevel();
autoCommit = false;
} }
/** /**
...@@ -988,7 +983,7 @@ public abstract class Connection ...@@ -988,7 +983,7 @@ public abstract class Connection
/** /**
* You can call this method to try to change the transaction * You can call this method to try to change the transaction
* isolation level using one of the TRANSACTION_* values. * isolation level using one of the TRANSACTION_* values.
* *
* <B>Note:</B> setTransactionIsolation cannot be called while * <B>Note:</B> setTransactionIsolation cannot be called while
* in the middle of a transaction * in the middle of a transaction
* *
...@@ -999,29 +994,67 @@ public abstract class Connection ...@@ -999,29 +994,67 @@ public abstract class Connection
* @see java.sql.DatabaseMetaData#supportsTransactionIsolationLevel * @see java.sql.DatabaseMetaData#supportsTransactionIsolationLevel
*/ */
public void setTransactionIsolation(int level) throws SQLException { public void setTransactionIsolation(int level) throws SQLException {
isolationLevel = level; //In 7.1 and later versions of the server it is possible using
doIsolationLevel(); //the "set session" command to set this once for all future txns
//however in 7.0 and prior versions it is necessary to set it in
//each transaction, thus adding complexity below.
//When we decide to drop support for servers older than 7.1
//this can be simplified
isolationLevel = level;
String isolationLevelSQL;
switch(isolationLevel) {
case java.sql.Connection.TRANSACTION_READ_COMMITTED:
if (haveMinimumServerVersion("7.1")) {
isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED";
} else {
isolationLevelSQL = getIsolationLevelSQL();
}
break;
case java.sql.Connection.TRANSACTION_SERIALIZABLE:
if (haveMinimumServerVersion("7.1")) {
isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE";
} else {
isolationLevelSQL = getIsolationLevelSQL();
}
break;
default:
throw new PSQLException("postgresql.con.isolevel",new Integer(isolationLevel));
}
ExecSQL(isolationLevelSQL);
} }
/** /**
* Helper method used by setTransactionIsolation(), commit(), rollback() * Helper method used by setTransactionIsolation(), commit(), rollback()
* and setAutoCommit(). This sets the current isolation level. * and setAutoCommit(). This returns the SQL string needed to
* set the isolation level for a transaction. In 7.1 and later it
* is possible to set a default isolation level that applies to all
* future transactions, this method is only necesary for 7.0 and older
* servers, and should be removed when support for these older
* servers are dropped
*/ */
protected void doIsolationLevel() throws SQLException { protected String getIsolationLevelSQL() throws SQLException {
//7.1 and higher servers have a default specified so
//no additional SQL is required to set the isolation level
if (haveMinimumServerVersion("7.1")) {
return "";
}
String q = "SET TRANSACTION ISOLATION LEVEL"; String q = "SET TRANSACTION ISOLATION LEVEL";
switch(isolationLevel) { switch(isolationLevel) {
case java.sql.Connection.TRANSACTION_READ_COMMITTED: case java.sql.Connection.TRANSACTION_READ_COMMITTED:
ExecSQL(q + " READ COMMITTED"); q = q + " READ COMMITTED";
return; break;
case java.sql.Connection.TRANSACTION_SERIALIZABLE: case java.sql.Connection.TRANSACTION_SERIALIZABLE:
ExecSQL(q + " SERIALIZABLE"); q = q + " SERIALIZABLE";
return; break;
default: default:
throw new PSQLException("postgresql.con.isolevel",new Integer(isolationLevel)); throw new PSQLException("postgresql.con.isolevel",new Integer(isolationLevel));
} }
return q;
} }
/** /**
...@@ -1033,13 +1066,7 @@ public abstract class Connection ...@@ -1033,13 +1066,7 @@ public abstract class Connection
*/ */
public void setCatalog(String catalog) throws SQLException public void setCatalog(String catalog) throws SQLException
{ {
if(catalog!=null && !catalog.equals(PG_DATABASE)) { //no-op
close();
Properties info=new Properties();
info.setProperty("user", PG_USER);
info.setProperty("password", PG_PASSWORD);
openConnection(PG_HOST, PG_PORT, info, catalog, this_url, this_driver);
}
} }
/** /**
...@@ -1095,4 +1122,31 @@ public abstract class Connection ...@@ -1095,4 +1122,31 @@ public abstract class Connection
return sql; return sql;
} }
/**
* What is the version of the server
*
* @return the database version
* @exception SQLException if a database access error occurs
*/
public String getDBVersionNumber() throws SQLException
{
if(dbVersionNumber == null) {
StringTokenizer versionParts = new StringTokenizer(dbVersionLong);
versionParts.nextToken(); /* "PostgreSQL" */
dbVersionNumber = versionParts.nextToken(); /* "X.Y.Z" */
}
return dbVersionNumber;
}
public boolean haveMinimumServerVersion(String ver) throws SQLException
{
if (getDBVersionNumber().compareTo(ver)>=0)
return true;
else
return false;
}
} }
...@@ -47,15 +47,6 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -47,15 +47,6 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
private static final byte defaultRemarks[]="no remarks".getBytes(); private static final byte defaultRemarks[]="no remarks".getBytes();
private boolean haveMinimumServerVersion(String ver) throws SQLException
{
if (getDatabaseProductVersion().compareTo(ver)>=0)
return true;
else
return false;
}
public DatabaseMetaData(Connection conn) public DatabaseMetaData(Connection conn)
{ {
this.connection = conn; this.connection = conn;
...@@ -126,7 +117,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -126,7 +117,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean nullsAreSortedHigh() throws SQLException public boolean nullsAreSortedHigh() throws SQLException
{ {
return haveMinimumServerVersion("7.2"); return connection.haveMinimumServerVersion("7.2");
} }
/** /**
...@@ -159,7 +150,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -159,7 +150,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean nullsAreSortedAtEnd() throws SQLException public boolean nullsAreSortedAtEnd() throws SQLException
{ {
return ! haveMinimumServerVersion("7.2"); return ! connection.haveMinimumServerVersion("7.2");
} }
/** /**
...@@ -182,14 +173,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -182,14 +173,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public String getDatabaseProductVersion() throws SQLException public String getDatabaseProductVersion() throws SQLException
{ {
java.sql.ResultSet resultSet = connection.ExecSQL("select version()"); return connection.getDBVersionNumber();
resultSet.next();
StringTokenizer versionParts = new StringTokenizer(resultSet.getString(1));
versionParts.nextToken(); /* "PostgreSQL" */
String versionNumber = versionParts.nextToken(); /* "X.Y.Z" */
return versionNumber;
} }
/** /**
...@@ -558,7 +542,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -558,7 +542,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsOrderByUnrelated() throws SQLException public boolean supportsOrderByUnrelated() throws SQLException
{ {
return haveMinimumServerVersion("6.4"); return connection.haveMinimumServerVersion("6.4");
} }
/** /**
...@@ -581,7 +565,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -581,7 +565,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsGroupByUnrelated() throws SQLException public boolean supportsGroupByUnrelated() throws SQLException
{ {
return haveMinimumServerVersion("6.4"); return connection.haveMinimumServerVersion("6.4");
} }
/** /**
...@@ -608,7 +592,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -608,7 +592,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsLikeEscapeClause() throws SQLException public boolean supportsLikeEscapeClause() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -749,7 +733,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -749,7 +733,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsOuterJoins() throws SQLException public boolean supportsOuterJoins() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -761,7 +745,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -761,7 +745,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsFullOuterJoins() throws SQLException public boolean supportsFullOuterJoins() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -976,7 +960,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -976,7 +960,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsSelectForUpdate() throws SQLException public boolean supportsSelectForUpdate() throws SQLException
{ {
return haveMinimumServerVersion("6.5"); return connection.haveMinimumServerVersion("6.5");
} }
/** /**
...@@ -1053,7 +1037,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1053,7 +1037,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsCorrelatedSubqueries() throws SQLException public boolean supportsCorrelatedSubqueries() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -1075,7 +1059,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1075,7 +1059,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsUnionAll() throws SQLException public boolean supportsUnionAll() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -1303,7 +1287,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1303,7 +1287,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public int getMaxRowSize() throws SQLException public int getMaxRowSize() throws SQLException
{ {
if (haveMinimumServerVersion("7.1")) if (connection.haveMinimumServerVersion("7.1"))
return 1073741824; // 1 GB return 1073741824; // 1 GB
else else
return 8192; // XXX could be altered return 8192; // XXX could be altered
...@@ -1329,7 +1313,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1329,7 +1313,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public int getMaxStatementLength() throws SQLException public int getMaxStatementLength() throws SQLException
{ {
if (haveMinimumServerVersion("7.0")) if (connection.haveMinimumServerVersion("7.0"))
return 0; // actually whatever fits in size_t return 0; // actually whatever fits in size_t
else else
return 16384; return 16384;
......
...@@ -47,15 +47,6 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -47,15 +47,6 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
private static final byte defaultRemarks[]="no remarks".getBytes(); private static final byte defaultRemarks[]="no remarks".getBytes();
private boolean haveMinimumServerVersion(String ver) throws SQLException
{
if (getDatabaseProductVersion().compareTo(ver)>=0)
return true;
else
return false;
}
public DatabaseMetaData(Connection conn) public DatabaseMetaData(Connection conn)
{ {
this.connection = conn; this.connection = conn;
...@@ -126,7 +117,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -126,7 +117,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean nullsAreSortedHigh() throws SQLException public boolean nullsAreSortedHigh() throws SQLException
{ {
return haveMinimumServerVersion("7.2"); return connection.haveMinimumServerVersion("7.2");
} }
/** /**
...@@ -159,7 +150,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -159,7 +150,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean nullsAreSortedAtEnd() throws SQLException public boolean nullsAreSortedAtEnd() throws SQLException
{ {
return ! haveMinimumServerVersion("7.2"); return ! connection.haveMinimumServerVersion("7.2");
} }
/** /**
...@@ -182,14 +173,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -182,14 +173,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public String getDatabaseProductVersion() throws SQLException public String getDatabaseProductVersion() throws SQLException
{ {
java.sql.ResultSet resultSet = connection.ExecSQL("select version()"); return connection.getDBVersionNumber();
resultSet.next();
StringTokenizer versionParts = new StringTokenizer(resultSet.getString(1));
versionParts.nextToken(); /* "PostgreSQL" */
String versionNumber = versionParts.nextToken(); /* "X.Y.Z" */
return versionNumber;
} }
/** /**
...@@ -558,7 +542,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -558,7 +542,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsOrderByUnrelated() throws SQLException public boolean supportsOrderByUnrelated() throws SQLException
{ {
return haveMinimumServerVersion("6.4"); return connection.haveMinimumServerVersion("6.4");
} }
/** /**
...@@ -581,7 +565,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -581,7 +565,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsGroupByUnrelated() throws SQLException public boolean supportsGroupByUnrelated() throws SQLException
{ {
return haveMinimumServerVersion("6.4"); return connection.haveMinimumServerVersion("6.4");
} }
/** /**
...@@ -608,7 +592,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -608,7 +592,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsLikeEscapeClause() throws SQLException public boolean supportsLikeEscapeClause() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -749,7 +733,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -749,7 +733,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsOuterJoins() throws SQLException public boolean supportsOuterJoins() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -761,7 +745,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -761,7 +745,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsFullOuterJoins() throws SQLException public boolean supportsFullOuterJoins() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -976,7 +960,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -976,7 +960,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsSelectForUpdate() throws SQLException public boolean supportsSelectForUpdate() throws SQLException
{ {
return haveMinimumServerVersion("6.5"); return connection.haveMinimumServerVersion("6.5");
} }
/** /**
...@@ -1053,7 +1037,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1053,7 +1037,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsCorrelatedSubqueries() throws SQLException public boolean supportsCorrelatedSubqueries() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -1075,7 +1059,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1075,7 +1059,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public boolean supportsUnionAll() throws SQLException public boolean supportsUnionAll() throws SQLException
{ {
return haveMinimumServerVersion("7.1"); return connection.haveMinimumServerVersion("7.1");
} }
/** /**
...@@ -1303,7 +1287,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1303,7 +1287,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public int getMaxRowSize() throws SQLException public int getMaxRowSize() throws SQLException
{ {
if (haveMinimumServerVersion("7.1")) if (connection.haveMinimumServerVersion("7.1"))
return 1073741824; // 1 GB return 1073741824; // 1 GB
else else
return 8192; // XXX could be altered return 8192; // XXX could be altered
...@@ -1329,7 +1313,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData ...@@ -1329,7 +1313,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
*/ */
public int getMaxStatementLength() throws SQLException public int getMaxStatementLength() throws SQLException
{ {
if (haveMinimumServerVersion("7.0")) if (connection.haveMinimumServerVersion("7.0"))
return 0; // actually whatever fits in size_t return 0; // actually whatever fits in size_t
else else
return 16384; return 16384;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment