Skip to content

Commit 1a8d495

Browse files
committed
Added code to extract the table name while deserializing prepare responses.
Removed unneeded call to QueryRequest.setTableName(). Updated QueryRequest to get table name from prepared statement.
1 parent 47e802b commit 1a8d495

File tree

4 files changed

+71
-17
lines changed

4 files changed

+71
-17
lines changed

driver/src/main/java/oracle/nosql/driver/http/Client.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import oracle.nosql.driver.ops.GetTableRequest;
5959
import oracle.nosql.driver.ops.QueryRequest;
6060
import oracle.nosql.driver.ops.QueryResult;
61+
import oracle.nosql.driver.ops.PreparedStatement;
6162
import oracle.nosql.driver.ops.Request;
6263
import oracle.nosql.driver.ops.Result;
6364
import oracle.nosql.driver.ops.TableLimits;
@@ -1124,5 +1125,4 @@ public void enableRateLimiting(boolean enable) {
11241125
}
11251126
}
11261127
}
1127-
11281128
}

driver/src/main/java/oracle/nosql/driver/ops/PreparedStatement.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ public class PreparedStatement {
8181
*/
8282
private Map<String, FieldValue> boundVariables;
8383

84+
85+
/*
86+
* The namespace returned from a prepared query result, if any.
87+
*/
88+
private String namespace;
89+
90+
91+
/*
92+
* The table name returned from a prepared query result, if any.
93+
*/
94+
private String tableName;
95+
96+
8497
/**
8598
* @hidden
8699
* Constructs a PreparedStatement. Construction is hidden to eliminate
@@ -96,6 +109,8 @@ public class PreparedStatement {
96109
* @param numIterators num iterators in plan
97110
* @param numRegisters num registers in the plan
98111
* @param externalVars external variables for the query
112+
* @param namespace namespace, if any, from deserialization
113+
* @param tableName table name, if any, from deserialization
99114
*/
100115
public PreparedStatement(
101116
String sqlText,
@@ -105,7 +120,9 @@ public PreparedStatement(
105120
PlanIter driverPlan,
106121
int numIterators,
107122
int numRegisters,
108-
Map<String, Integer> externalVars) {
123+
Map<String, Integer> externalVars,
124+
String namespace,
125+
String tableName) {
109126

110127
/* 10 is arbitrary. TODO: put magic number in it for validation? */
111128
if (proxyStatement == null || proxyStatement.length < 10) {
@@ -121,6 +138,8 @@ public PreparedStatement(
121138
this.numIterators = numIterators;
122139
this.numRegisters = numRegisters;
123140
this.variables = externalVars;
141+
this.namespace = namespace;
142+
this.tableName = tableName;
124143
}
125144

126145
/**
@@ -139,7 +158,9 @@ public PreparedStatement copyStatement() {
139158
driverQueryPlan,
140159
numIterators,
141160
numRegisters,
142-
variables);
161+
variables,
162+
namespace,
163+
tableName);
143164
}
144165

145166
/**
@@ -341,4 +362,20 @@ public synchronized PreparedStatement setTopologyInfo(TopologyInfo ti) {
341362
public TopologyInfo topologyInfo() {
342363
return topologyInfo;
343364
}
365+
366+
/**
367+
* @hidden
368+
* @return namespace from prepared statement, if any
369+
*/
370+
public String getNamespace() {
371+
return namespace;
372+
}
373+
374+
/**
375+
* @hidden
376+
* @return table name from prepared statement, if any
377+
*/
378+
public String getTableName() {
379+
return tableName;
380+
}
344381
}

driver/src/main/java/oracle/nosql/driver/ops/QueryRequest.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -642,19 +642,6 @@ public int getTimeout() {
642642
return super.getTimeoutInternal();
643643
}
644644

645-
/**
646-
* Sets the table name for a query operation.
647-
* This is used by rate limiting logic to manage internal rate limiters.
648-
*
649-
* @param tableName the name (or OCID) of the table
650-
*
651-
* @return this
652-
*/
653-
public QueryRequest setTableName(String tableName) {
654-
super.setTableNameInternal(tableName);
655-
return this;
656-
}
657-
658645
/**
659646
* @hidden
660647
*/
@@ -697,4 +684,15 @@ public void validate() {
697684
"Either statement or prepared statement should be set");
698685
}
699686
}
687+
688+
/**
689+
* @hidden
690+
*/
691+
@Override
692+
public String getTableName() {
693+
if (preparedStatement == null) {
694+
return null;
695+
}
696+
return preparedStatement.getTableName();
697+
}
700698
}

driver/src/main/java/oracle/nosql/driver/ops/serde/PrepareRequestSerializer.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,23 @@ static PreparedStatement deserializeInternal(
7070
ByteInputStream in,
7171
short serialVersion) throws IOException {
7272

73+
/*
74+
* Extract the table name and namespace from the prepared query.
75+
* This dips into the portion of the prepared query that is
76+
* normally opaque
77+
*
78+
* int (4 byte)
79+
* byte[] (32 bytes -- hash)
80+
* byte (number of tables)
81+
* namespace (string)
82+
* tablename (string)
83+
*/
84+
int savedOffset = in.getOffset();
85+
in.skip(37); // 4 + 32 + 1
86+
String namespace = readString(in);
87+
String tableName = readString(in);
88+
in.setOffset(savedOffset);
89+
7390
byte[] proxyStatement = readByteArrayWithInt(in);
7491

7592
int numIterators = 0;
@@ -110,6 +127,8 @@ static PreparedStatement deserializeInternal(
110127
driverPlan,
111128
numIterators,
112129
numRegisters,
113-
externalVars);
130+
externalVars,
131+
namespace,
132+
tableName);
114133
}
115134
}

0 commit comments

Comments
 (0)