Skip to content

Commit feceddf

Browse files
author
Sagar Agarwal
committed
addressed open comments
1 parent a877c11 commit feceddf

File tree

9 files changed

+91
-106
lines changed

9 files changed

+91
-106
lines changed

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

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -36,37 +36,37 @@
3636
public class Interval implements Serializable {
3737
private final int months;
3838
private final int days;
39-
private final BigInteger nanoseconds;
40-
41-
public static final long MONTHS_PER_YEAR = 12;
42-
public static final long MINUTES_PER_HOUR = 60;
43-
public static final long SECONDS_PER_MINUTE = 60;
44-
public static final long SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE;
45-
public static final long MILLIS_PER_SECOND = 1000;
46-
public static final long MICROS_PER_MILLISECOND = 1000;
47-
public static final long MICROS_PER_SECOND = MICROS_PER_MILLISECOND * MILLIS_PER_SECOND;
48-
public static final long MICROS_PER_MINUTE = SECONDS_PER_MINUTE * MICROS_PER_SECOND;
49-
public static final long MICROS_PER_HOUR = SECONDS_PER_HOUR * MICROS_PER_SECOND;
50-
public static final long NANOS_PER_MICROSECOND = 1000;
51-
public static final BigInteger NANOS_PER_MILLISECOND =
52-
BigInteger.valueOf(MICROS_PER_MILLISECOND * NANOS_PER_MICROSECOND);
53-
public static final BigInteger NANOS_PER_SECOND =
54-
BigInteger.valueOf(MICROS_PER_SECOND * NANOS_PER_MICROSECOND);
55-
public static final BigInteger NANOS_PER_MINUTE =
56-
BigInteger.valueOf(MICROS_PER_MINUTE * NANOS_PER_MICROSECOND);
57-
public static final BigInteger NANOS_PER_HOUR =
58-
BigInteger.valueOf(MICROS_PER_HOUR * NANOS_PER_MICROSECOND);
59-
public static final Interval ZERO = Interval.builder().build();
39+
private final BigInteger nanos;
40+
41+
private static final long MONTHS_PER_YEAR = 12;
42+
private static final long MINUTES_PER_HOUR = 60;
43+
private static final long SECONDS_PER_MINUTE = 60;
44+
private static final long SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE;
45+
private static final long MILLIS_PER_SECOND = 1000;
46+
private static final long MICROS_PER_MILLI = 1000;
47+
private static final long NANOS_PER_MICRO = 1000;
48+
private static final long MICROS_PER_SECOND = MICROS_PER_MILLI * MILLIS_PER_SECOND;
49+
private static final long MICROS_PER_MINUTE = SECONDS_PER_MINUTE * MICROS_PER_SECOND;
50+
private static final long MICROS_PER_HOUR = SECONDS_PER_HOUR * MICROS_PER_SECOND;
51+
private static final BigInteger NANOS_PER_MILLI =
52+
BigInteger.valueOf(MICROS_PER_MILLI * NANOS_PER_MICRO);
53+
private static final BigInteger NANOS_PER_SECOND =
54+
BigInteger.valueOf(MICROS_PER_SECOND * NANOS_PER_MICRO);
55+
private static final BigInteger NANOS_PER_MINUTE =
56+
BigInteger.valueOf(MICROS_PER_MINUTE * NANOS_PER_MICRO);
57+
private static final BigInteger NANOS_PER_HOUR =
58+
BigInteger.valueOf(MICROS_PER_HOUR * NANOS_PER_MICRO);
59+
private static final Interval ZERO = Interval.builder().build();
6060

6161
/** Regex to parse ISO8601 interval format- `P[n]Y[n]M[n]DT[n]H[n]M[n([.,][fraction])]S` */
6262
private static final Pattern INTERVAL_PATTERN =
6363
Pattern.compile(
6464
"^P(?!$)(-?\\d+Y)?(-?\\d+M)?(-?\\d+D)?(T(?=-?[.,]?\\d)(-?\\d+H)?(-?\\d+M)?(-?((\\d+([.,]\\d{1,9})?)|([.,]\\d{1,9}))S)?)?$");
6565

66-
private Interval(int months, int days, BigInteger nanoseconds) {
66+
private Interval(int months, int days, BigInteger nanos) {
6767
this.months = months;
6868
this.days = days;
69-
this.nanoseconds = nanoseconds;
69+
this.nanos = nanos;
7070
}
7171

7272
/** Returns the months component of the interval. */
@@ -80,8 +80,8 @@ public int getDays() {
8080
}
8181

8282
/** Returns the nanoseconds component of the interval. */
83-
public BigInteger getNanoseconds() {
84-
return nanoseconds;
83+
public BigInteger getNanos() {
84+
return nanos;
8585
}
8686

8787
public static Builder builder() {
@@ -100,39 +100,37 @@ public static Interval ofDays(int days) {
100100

101101
/** Creates an interval with specified number of seconds. */
102102
public static Interval ofSeconds(long seconds) {
103-
return builder().setNanoseconds(BigInteger.valueOf(seconds).multiply(NANOS_PER_SECOND)).build();
103+
return builder().setNanos(BigInteger.valueOf(seconds).multiply(NANOS_PER_SECOND)).build();
104104
}
105105

106106
/** Creates an interval with specified number of milliseconds. */
107-
public static Interval ofMilliseconds(long milliseconds) {
108-
return builder()
109-
.setNanoseconds(BigInteger.valueOf(milliseconds).multiply(NANOS_PER_MILLISECOND))
110-
.build();
107+
public static Interval ofMillis(long millis) {
108+
return builder().setNanos(BigInteger.valueOf(millis).multiply(NANOS_PER_MILLI)).build();
111109
}
112110

113111
/** Creates an interval with specified number of microseconds. */
114-
public static Interval ofMicroseconds(long micros) {
112+
public static Interval ofMicros(long micros) {
115113
return builder()
116-
.setNanoseconds(
117-
BigInteger.valueOf(micros).multiply(BigInteger.valueOf(NANOS_PER_MICROSECOND)))
114+
.setNanos(BigInteger.valueOf(micros).multiply(BigInteger.valueOf(NANOS_PER_MICRO)))
118115
.build();
119116
}
120117

121118
/** Creates an interval with specified number of nanoseconds. */
122-
public static Interval ofNanoseconds(@NotNull BigInteger nanos) {
123-
return builder().setNanoseconds(nanos).build();
119+
public static Interval ofNanos(@NotNull BigInteger nanos) {
120+
return builder().setNanos(nanos).build();
124121
}
125122

126123
/** Creates an interval with specified number of months, days and nanoseconds. */
127-
public static Interval fromMonthsDaysNanos(int months, int days, BigInteger nanoseconds) {
128-
return builder().setMonths(months).setDays(days).setNanoseconds(nanoseconds).build();
124+
public static Interval fromMonthsDaysNanos(int months, int days, BigInteger nanos) {
125+
return builder().setMonths(months).setDays(days).setNanos(nanos).build();
129126
}
130127

131128
private static String getNullOrDefault(Matcher matcher, int groupIdx) {
132129
String value = matcher.group(groupIdx);
133130
return value == null ? "0" : value;
134131
}
135132

133+
/* Parses ISO8601 duration format string to Interval. */
136134
public static Interval parseFromString(String interval) {
137135
Matcher matcher = INTERVAL_PATTERN.matcher(interval);
138136
if (!matcher.matches()) {
@@ -158,11 +156,11 @@ public static Interval parseFromString(String interval) {
158156
return Interval.builder()
159157
.setMonths(Math.toIntExact(totalMonths))
160158
.setDays(Math.toIntExact(days))
161-
.setNanoseconds(totalNanos)
159+
.setNanos(totalNanos)
162160
.build();
163161
}
164162

165-
/** Converts Interval to ISO8601 Duration Formatted String. */
163+
/** Converts Interval to ISO8601 duration format string. */
166164
public String toISO8601() {
167165
if (this.equals(ZERO)) {
168166
return "P0Y";
@@ -187,7 +185,7 @@ public String toISO8601() {
187185
result.append(String.format("%dD", this.getDays()));
188186
}
189187

190-
BigInteger nanos = this.getNanoseconds();
188+
BigInteger nanos = this.getNanos();
191189
BigInteger zero = BigInteger.valueOf(0);
192190
if (nanos.compareTo(zero) != 0) {
193191
result.append("T");
@@ -238,22 +236,22 @@ public boolean equals(Object rhs) {
238236
Interval anotherInterval = (Interval) rhs;
239237
return getMonths() == anotherInterval.getMonths()
240238
&& getDays() == anotherInterval.getDays()
241-
&& getNanoseconds().equals(anotherInterval.getNanoseconds());
239+
&& getNanos().equals(anotherInterval.getNanos());
242240
}
243241

244242
@Override
245243
public int hashCode() {
246244
int result = 17;
247245
result = 31 * result + Integer.valueOf(getMonths()).hashCode();
248246
result = 31 * result + Integer.valueOf(getDays()).hashCode();
249-
result = 31 * result + getNanoseconds().hashCode();
247+
result = 31 * result + getNanos().hashCode();
250248
return result;
251249
}
252250

253251
public static class Builder {
254252
private int months = 0;
255253
private int days = 0;
256-
private BigInteger nanoseconds = BigInteger.ZERO;
254+
private BigInteger nanos = BigInteger.ZERO;
257255

258256
Builder setMonths(int months) {
259257
this.months = months;
@@ -265,13 +263,13 @@ Builder setDays(int days) {
265263
return this;
266264
}
267265

268-
Builder setNanoseconds(BigInteger nanoseconds) {
269-
this.nanoseconds = nanoseconds;
266+
Builder setNanos(BigInteger nanos) {
267+
this.nanos = nanos;
270268
return this;
271269
}
272270

273271
public Interval build() {
274-
return new Interval(months, days, nanoseconds);
272+
return new Interval(months, days, nanos);
275273
}
276274
}
277275
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ public static Collection<Object[]> parameters() {
445445
"getIntervalListInternal",
446446
Arrays.asList(
447447
Interval.parseFromString("P1Y2M3DT4H5M6.78912345S"),
448-
Interval.ZERO,
448+
Interval.parseFromString("P0Y"),
449449
Interval.parseFromString("P-1Y2M-3DT-4H5M6.78912345S")),
450450
"getIntervalList",
451451
Collections.singletonList("getValue")

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ public void serialization() {
558558
Interval.builder()
559559
.setMonths(100)
560560
.setDays(10)
561-
.setNanoseconds(BigInteger.valueOf(1000010))
561+
.setNanos(BigInteger.valueOf(1000010))
562562
.build()),
563563
Value.interval(null),
564564
Value.stringArray(ImmutableList.of("one", "two")),
@@ -585,7 +585,8 @@ public void serialization() {
585585
Value.dateArray(null),
586586
Value.intervalArray(
587587
ImmutableList.of(
588-
Interval.ZERO, Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30000L)))),
588+
Interval.parseFromString("P0Y"),
589+
Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30000L)))),
589590
Value.intervalArray(null),
590591
Value.struct(s(null, 30)),
591592
Value.struct(structType, null),

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

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,60 +32,60 @@ public void testOfMonths() {
3232
Interval interval = Interval.ofMonths(10);
3333
assertEquals(10, interval.getMonths());
3434
assertEquals(0, interval.getDays());
35-
assertEquals(BigInteger.ZERO, interval.getNanoseconds());
35+
assertEquals(BigInteger.ZERO, interval.getNanos());
3636
}
3737

3838
@Test
3939
public void testOfDays() {
4040
Interval interval = Interval.ofDays(10);
4141
assertEquals(0, interval.getMonths());
4242
assertEquals(10, interval.getDays());
43-
assertEquals(BigInteger.ZERO, interval.getNanoseconds());
43+
assertEquals(BigInteger.ZERO, interval.getNanos());
4444
}
4545

4646
@Test
4747
public void testOfSeconds() {
4848
Interval interval = Interval.ofSeconds(10);
4949
assertEquals(0, interval.getMonths());
5050
assertEquals(0, interval.getDays());
51-
assertEquals(BigInteger.valueOf(10000000000L), interval.getNanoseconds());
51+
assertEquals(BigInteger.valueOf(10000000000L), interval.getNanos());
5252
}
5353

5454
@Test
55-
public void testOfMilliseconds() {
56-
Interval interval = Interval.ofMilliseconds(10);
55+
public void testOfMillis() {
56+
Interval interval = Interval.ofMillis(10);
5757
assertEquals(0, interval.getMonths());
5858
assertEquals(0, interval.getDays());
59-
assertEquals(BigInteger.valueOf(10000000L), interval.getNanoseconds());
59+
assertEquals(BigInteger.valueOf(10000000L), interval.getNanos());
6060
}
6161

6262
@Test
63-
public void testOfMicroseconds() {
64-
Interval interval = Interval.ofMicroseconds(10);
63+
public void testOfMicros() {
64+
Interval interval = Interval.ofMicros(10);
6565
assertEquals(0, interval.getMonths());
6666
assertEquals(0, interval.getDays());
67-
assertEquals(BigInteger.valueOf(10000), interval.getNanoseconds());
67+
assertEquals(BigInteger.valueOf(10000), interval.getNanos());
6868
}
6969

7070
@Test
71-
public void testOfNanoseconds() {
72-
Interval interval = Interval.ofNanoseconds(BigInteger.valueOf(10));
71+
public void testOfNanos() {
72+
Interval interval = Interval.ofNanos(BigInteger.valueOf(10));
7373
assertEquals(0, interval.getMonths());
7474
assertEquals(0, interval.getDays());
75-
assertEquals(10, interval.getNanoseconds().longValueExact());
75+
assertEquals(10, interval.getNanos().longValueExact());
7676
}
7777

7878
@Test
7979
public void testFromMonthsDaysNanoseconds() {
8080
Interval interval = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(1030));
8181
assertEquals(10, interval.getMonths());
8282
assertEquals(20, interval.getDays());
83-
assertEquals(1030, interval.getNanoseconds().longValueExact());
83+
assertEquals(1030, interval.getNanos().longValueExact());
8484

8585
Interval interval2 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(-1030));
8686
assertEquals(10, interval2.getMonths());
8787
assertEquals(20, interval2.getDays());
88-
assertEquals(-1030, interval2.getNanoseconds().longValueExact());
88+
assertEquals(-1030, interval2.getNanos().longValueExact());
8989
}
9090

9191
@Test
@@ -149,7 +149,7 @@ public void testParseFromString() {
149149
Interval interval = Interval.parseFromString(testCase.intervalString);
150150
assertEquals(testCase.months, interval.getMonths());
151151
assertEquals(testCase.days, interval.getDays());
152-
assertEquals(testCase.nanoseconds, interval.getNanoseconds());
152+
assertEquals(testCase.nanoseconds, interval.getNanos());
153153
}
154154
}
155155

@@ -248,7 +248,7 @@ public void testToISO8601() {
248248
Interval.builder()
249249
.setMonths(testCase.months)
250250
.setDays(testCase.days)
251-
.setNanoseconds(testCase.nanoseconds)
251+
.setNanos(testCase.nanoseconds)
252252
.build();
253253

254254
assertEquals(testCase.intervalString, interval.toISO8601());
@@ -257,16 +257,14 @@ public void testToISO8601() {
257257

258258
@Test
259259
public void testGetNanoseconds() {
260-
Interval interval1 =
261-
Interval.fromMonthsDaysNanos(
262-
10, 20, BigInteger.valueOf(30 * Interval.NANOS_PER_MICROSECOND + 40));
263-
assertEquals(30040, interval1.getNanoseconds().longValueExact());
260+
Interval interval1 = Interval.fromMonthsDaysNanos(10, 20, BigInteger.valueOf(30040));
261+
assertEquals(30040, interval1.getNanos().longValueExact());
264262

265263
Interval interval2 = Interval.fromMonthsDaysNanos(0, 0, BigInteger.valueOf(123456789));
266-
assertEquals(123456789, interval2.getNanoseconds().longValueExact());
264+
assertEquals(123456789, interval2.getNanos().longValueExact());
267265

268266
Interval interval3 = Interval.fromMonthsDaysNanos(-10, -20, BigInteger.valueOf(-123456789));
269-
assertEquals(-123456789, interval3.getNanoseconds().longValueExact());
267+
assertEquals(-123456789, interval3.getNanos().longValueExact());
270268
}
271269

272270
@Test

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ private void setRandomValue(Value.Builder builder, Type type) {
153153
Interval.builder()
154154
.setMonths(random.nextInt(100) - 100)
155155
.setDays(random.nextInt(100) - 100)
156-
.setNanoseconds(BigInteger.valueOf(random.nextInt(10000000) - 10000000))
156+
.setNanos(BigInteger.valueOf(random.nextInt(10000000) - 10000000))
157157
.build();
158158
builder.setStringValue(interval.toISO8601());
159159
break;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ public void resultSetIteration() {
9393
Date[] dateArray = {
9494
Date.fromYearMonthDay(1, 2, 3), Date.fromYearMonthDay(4, 5, 6), Date.fromYearMonthDay(7, 8, 9)
9595
};
96-
Interval[] intervalArray = {Interval.ZERO, Interval.parseFromString("P1Y2M3DT-5H-7M8.9675S")};
96+
Interval[] intervalArray = {
97+
Interval.parseFromString("P0Y"), Interval.parseFromString("P1Y2M3DT-5H-7M8.9675S")
98+
};
9799
String[] stringArray = {"abc", "def", "ghi"};
98100
String[] jsonArray = {"{}", "{\"color\":\"red\",\"value\":\"#f00\"}", "[]"};
99101
AbstractMessage[] protoMessageArray = {

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

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ public static Date defaultDate() {
333333
}
334334

335335
public static Interval defaultInterval() {
336-
return Interval.ZERO;
336+
return Interval.parseFromString("P0Y");
337337
}
338338

339339
public static boolean[] defaultBooleanArray() {
@@ -398,14 +398,10 @@ public static Interval[] defaultIntervalArray() {
398398
Interval.builder()
399399
.setMonths(-10)
400400
.setDays(-100)
401-
.setNanoseconds(BigInteger.valueOf(-9999999L))
401+
.setNanos(BigInteger.valueOf(-9999999L))
402402
.build(),
403-
Interval.ZERO,
404-
Interval.builder()
405-
.setMonths(10)
406-
.setDays(100)
407-
.setNanoseconds(BigInteger.valueOf(9999999L))
408-
.build()
403+
Interval.parseFromString("P0Y"),
404+
Interval.builder().setMonths(10).setDays(100).setNanos(BigInteger.valueOf(9999999L)).build()
409405
};
410406
}
411407

@@ -414,13 +410,13 @@ public static Iterable<Interval> defaultIntervalIterable() {
414410
Interval.builder()
415411
.setMonths(-10)
416412
.setDays(-100)
417-
.setNanoseconds(BigInteger.valueOf(-9999999L))
413+
.setNanos(BigInteger.valueOf(-9999999L))
418414
.build(),
419-
Interval.ZERO,
415+
Interval.parseFromString("P0Y"),
420416
Interval.builder()
421417
.setMonths(10)
422418
.setDays(100)
423-
.setNanoseconds(BigInteger.valueOf(9999999L))
419+
.setNanos(BigInteger.valueOf(9999999L))
424420
.build());
425421
}
426422

0 commit comments

Comments
 (0)