Skip to content

Commit ee978e8

Browse files
authored
Introduce prepareMethod=scopeTempTablesToConnection for connection-scoped temporary tables (#2844)
Introduce prepareMethod=scopeTempTablesToConnection for connection-scoped temporary tables.
1 parent 56812d5 commit ee978e8

File tree

11 files changed

+3501
-70
lines changed

11 files changed

+3501
-70
lines changed

src/main/java/com/microsoft/sqlserver/jdbc/SQLServerConnection.java

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import java.net.InetSocketAddress;
1616
import java.net.SocketException;
1717
import java.net.UnknownHostException;
18+
import java.sql.Blob;
1819
import java.sql.CallableStatement;
20+
import java.sql.Clob;
1921
import java.sql.Connection;
2022
import java.sql.DatabaseMetaData;
2123
import java.sql.PreparedStatement;
@@ -8521,46 +8523,6 @@ void endRequestInternal() throws SQLException {
85218523
loggerExternal.exiting(loggingClassName, "endRequest", this);
85228524
}
85238525

8524-
/**
8525-
* Replaces JDBC syntax parameter markets '?' with SQL Server parameter markers @p1, @p2 etc...
8526-
*
8527-
* @param sql
8528-
* the user's SQL
8529-
* @throws SQLServerException
8530-
* @return the returned syntax
8531-
*/
8532-
static final char[] OUT = {' ', 'O', 'U', 'T'};
8533-
8534-
String replaceParameterMarkers(String sqlSrc, int[] paramPositions, Parameter[] params,
8535-
boolean isReturnValueSyntax) {
8536-
final int MAX_PARAM_NAME_LEN = 6;
8537-
char[] sqlDst = new char[sqlSrc.length() + (params.length * (MAX_PARAM_NAME_LEN + OUT.length))
8538-
+ (params.length * 2)];
8539-
int dstBegin = 0;
8540-
int srcBegin = 0;
8541-
int nParam = 0;
8542-
8543-
int paramIndex = 0;
8544-
while (true) {
8545-
int srcEnd = (paramIndex >= paramPositions.length) ? sqlSrc.length() : paramPositions[paramIndex];
8546-
sqlSrc.getChars(srcBegin, srcEnd, sqlDst, dstBegin);
8547-
dstBegin += srcEnd - srcBegin;
8548-
8549-
if (sqlSrc.length() == srcEnd)
8550-
break;
8551-
8552-
dstBegin += makeParamName(nParam++, sqlDst, dstBegin, true);
8553-
srcBegin = srcEnd + 1 <= sqlSrc.length() - 1 && sqlSrc.charAt(srcEnd + 1) == ' ' ? srcEnd + 2 : srcEnd + 1;
8554-
8555-
if (params[paramIndex++].isOutput() && (!isReturnValueSyntax || paramIndex > 1)) {
8556-
System.arraycopy(OUT, 0, sqlDst, dstBegin, OUT.length);
8557-
dstBegin += OUT.length;
8558-
}
8559-
}
8560-
8561-
return new String(sqlDst, 0, dstBegin);
8562-
}
8563-
85648526
/**
85658527
* Makes a SQL Server style parameter name.
85668528
*

src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDriver.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,8 @@ public String toString() {
532532

533533
enum PrepareMethod {
534534
PREPEXEC("prepexec"), // sp_prepexec, default prepare method
535-
PREPARE("prepare");
535+
PREPARE("prepare"),
536+
SCOPE_TEMP_TABLES_TO_CONNECTION("scopeTempTablesToConnection");
536537

537538
private final String value;
538539

@@ -840,7 +841,8 @@ public final class SQLServerDriver implements java.sql.Driver {
840841
SQLServerDriverStringProperty.SERVER_CERTIFICATE.getDefaultValue(), false, null),
841842
new SQLServerDriverPropertyInfo(SQLServerDriverStringProperty.PREPARE_METHOD.toString(),
842843
SQLServerDriverStringProperty.PREPARE_METHOD.getDefaultValue(), false,
843-
new String[] {PrepareMethod.PREPEXEC.toString(), PrepareMethod.PREPARE.toString()}),
844+
new String[] { PrepareMethod.PREPEXEC.toString(), PrepareMethod.PREPARE.toString(),
845+
PrepareMethod.SCOPE_TEMP_TABLES_TO_CONNECTION.toString() }),
844846
new SQLServerDriverPropertyInfo(SQLServerDriverStringProperty.FAILOVER_PARTNER.toString(),
845847
SQLServerDriverStringProperty.FAILOVER_PARTNER.getDefaultValue(), false, null),
846848
new SQLServerDriverPropertyInfo(SQLServerDriverStringProperty.HOSTNAME_IN_CERTIFICATE.toString(),

src/main/java/com/microsoft/sqlserver/jdbc/SQLServerParameterMetaData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ private void checkClosed() throws SQLServerException {
364364
else {
365365
queryMetaMap = new HashMap<>();
366366
if (con.getServerMajorVersion() >= SQL_SERVER_2012_VERSION && !st.getUseFmtOnly()) {
367-
String preparedSQL = con.replaceParameterMarkers(stmtParent.userSQL,
367+
String preparedSQL = stmtParent.replaceParameterMarkers(stmtParent.userSQL,
368368
stmtParent.userSQLParamPositions, stmtParent.inOutParam, stmtParent.bReturnValueSyntax);
369369

370370
try (SQLServerCallableStatement cstmt = (SQLServerCallableStatement) con

0 commit comments

Comments
 (0)