Skip to content

Commit 2b50235

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

File tree

4 files changed

+45
-5
lines changed

4 files changed

+45
-5
lines changed

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

Lines changed: 1 addition & 3 deletions
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();
@@ -154,8 +154,6 @@ public static Interval fromMonthsDaysNanos(int months, int days, BigInteger nano
154154
(nanos.subtract(BigInteger.valueOf(micros).multiply(BigInteger.valueOf(NANOS_PER_MICRO))))
155155
.shortValue();
156156

157-
System.out.println("Micros: " + micros + " Nanos: " + nanoFractions);
158-
159157
return builder()
160158
.setMonths(months)
161159
.setDays(days)

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: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ private static boolean isUsingCloudDevel() {
9595
public static void setUpDatabase()
9696
throws ExecutionException, InterruptedException, TimeoutException {
9797
assumeTrue("Interval is supported only in Cloud-Devel for now", isUsingCloudDevel());
98+
System.out.println("---Running Interval Integration Tests.---");
9899
assumeFalse("Emulator does not support Interval yet", isUsingEmulator());
99100

100101
Database googleStandardSQLDatabase =
@@ -171,6 +172,39 @@ public void queryInterval() {
171172
}
172173
}
173174

175+
@Test
176+
public void queryWithIntervalParam() {
177+
178+
write(
179+
baseInsert()
180+
.set("slo_days")
181+
.to(5)
182+
.set("update_time")
183+
.to(Timestamp.parseTimestamp("2004-10-19 10:23:54+0530"))
184+
.build());
185+
186+
String query;
187+
if (dialect.dialect == Dialect.POSTGRESQL) {
188+
query =
189+
"SELECT COUNT(*) FROM IntervalTable WHERE update_time < TIMESTAMP '2004-11-30 10:23:54+0530' - $1";
190+
} else {
191+
query =
192+
"SELECT SELECT COUNT(*) FROM IntervalTable WHERE update_time < TIMESTAMP('2004-11-30 10:23:54+0530') - @p1";
193+
}
194+
195+
try (ResultSet resultSet =
196+
client
197+
.singleUse()
198+
.executeQuery(
199+
Statement.newBuilder(query)
200+
.bind("p1")
201+
.to(Value.interval(Interval.ofDays(30)))
202+
.build())) {
203+
assertTrue(resultSet.next());
204+
assertEquals(resultSet.getLong(0), 1L);
205+
}
206+
}
207+
174208
@Test
175209
public void queryWithUntypedIntervalParam() {
176210
String query;

0 commit comments

Comments
 (0)