Skip to content

Commit c201180

Browse files
author
Sagar Agarwal
committed
Added integration test for typed query parameter and fixed Interval parsing regex
1 parent f16ae42 commit c201180

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/Interval.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public abstract class Interval implements Serializable {
5151

5252
private static final Pattern INTERVAL_PATTERN =
5353
Pattern.compile(
54-
"^P(?!$)(-?\\d+Y)?(-?\\d+M)?(-?\\d+D)?(T(?=-?\\d)(-?\\d+H)?(-?\\d+M)?(-?\\d+(\\.\\d{1,9})?S)?)?$");
54+
"^P(?!$)(-?\\d+Y)?(-?\\d+M)?(-?\\d+D)?(T(?=-?.?\\d)(-?\\d+H)?(-?\\d+M)?(-?((\\d+(\\.\\d{1,9})?)|(\\.\\d{1,9}))S)?)?$");
5555

5656
/** Returns the months component of the interval. */
5757
public abstract int months();

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReplaceableForwardingResultSet.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@
1919
import com.google.cloud.ByteArray;
2020
import com.google.cloud.Date;
2121
import com.google.cloud.Timestamp;
22-
import com.google.cloud.spanner.*;
22+
import com.google.cloud.spanner.ErrorCode;
23+
import com.google.cloud.spanner.Interval;
24+
import com.google.cloud.spanner.ProtobufResultSet;
25+
import com.google.cloud.spanner.ResultSet;
26+
import com.google.cloud.spanner.SpannerException;
27+
import com.google.cloud.spanner.SpannerExceptionFactory;
28+
import com.google.cloud.spanner.Struct;
29+
import com.google.cloud.spanner.Type;
30+
import com.google.cloud.spanner.Value;
2331
import com.google.common.base.Preconditions;
2432
import com.google.protobuf.AbstractMessage;
2533
import com.google.protobuf.ProtocolMessageEnum;

google-cloud-spanner/src/test/java/com/google/cloud/spanner/ValueTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1855,7 +1855,7 @@ public void testValueToProto() {
18551855
.addAllValues(
18561856
Arrays.asList(
18571857
com.google.protobuf.Value.newBuilder()
1858-
.setStringValue("P1Y2M3DT5H6M2.456787800S")
1858+
.setStringValue("P1Y2M3DT5H6M2.4567878S")
18591859
.build(),
18601860
com.google.protobuf.Value.newBuilder()
18611861
.setNullValue(NullValue.NULL_VALUE)

google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITIntervalTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,28 @@ public void queryInterval() {
171171
}
172172
}
173173

174+
@Test
175+
public void queryWithIntervalParam() {
176+
String query;
177+
if (dialect.dialect == Dialect.POSTGRESQL) {
178+
query = "SELECT TIMESTAMP '2004-10-19 10:23:54+0530' + $1 AS Col1";
179+
} else {
180+
query = "SELECT TIMESTAMP('2004-10-19 10:23:54+0530') + @p1 AS Col1";
181+
}
182+
183+
try (ResultSet resultSet =
184+
client
185+
.singleUse()
186+
.executeQuery(
187+
Statement.newBuilder(query)
188+
.bind("p1")
189+
.to(Value.interval(Interval.ofDays(10)))
190+
.build())) {
191+
assertTrue(resultSet.next());
192+
assertEquals(resultSet.getTimestamp(0), Timestamp.parseTimestamp("2004-10-29 10:23:54+0530"));
193+
}
194+
}
195+
174196
@Test
175197
public void queryWithUntypedIntervalParam() {
176198
String query;

0 commit comments

Comments
 (0)