Skip to content

Commit edd0384

Browse files
committed
feat: add PG OID support
1 parent 950c2b1 commit edd0384

25 files changed

+1130
-235
lines changed

google-cloud-spanner/clirr-ignored-differences.xml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,63 @@
192192
<className>com/google/cloud/spanner/StructReader</className>
193193
<method>java.util.List getPgJsonbList(java.lang.String)</method>
194194
</difference>
195+
<!-- PG OID -->
196+
<difference>
197+
<differenceType>7013</differenceType>
198+
<className>com/google/cloud/spanner/AbstractStructReader</className>
199+
<method>long[] getPgOidArrayInternal(int)</method>
200+
</difference>
201+
<difference>
202+
<differenceType>7013</differenceType>
203+
<className>com/google/cloud/spanner/AbstractStructReader</className>
204+
<method>long getPgOidInternal(int)</method>
205+
</difference>
206+
<difference>
207+
<differenceType>7013</differenceType>
208+
<className>com/google/cloud/spanner/AbstractStructReader</className>
209+
<method>java.util.List getPgOidListInternal(int)</method>
210+
</difference>
211+
<difference>
212+
<differenceType>7012</differenceType>
213+
<className>com/google/cloud/spanner/StructReader</className>
214+
<method>long getPgOid(int)</method>
215+
</difference>
216+
<difference>
217+
<differenceType>7012</differenceType>
218+
<className>com/google/cloud/spanner/StructReader</className>
219+
<method>long getPgOid(java.lang.String)</method>
220+
</difference>
221+
<difference>
222+
<differenceType>7012</differenceType>
223+
<className>com/google/cloud/spanner/StructReader</className>
224+
<method>long[] getPgOidArray(int)</method>
225+
</difference>
226+
<difference>
227+
<differenceType>7012</differenceType>
228+
<className>com/google/cloud/spanner/StructReader</className>
229+
<method>long[] getPgOidArray(java.lang.String)</method>
230+
</difference>
231+
<difference>
232+
<differenceType>7012</differenceType>
233+
<className>com/google/cloud/spanner/StructReader</className>
234+
<method>java.util.List getPgOidList(int)</method>
235+
</difference>
236+
<difference>
237+
<differenceType>7012</differenceType>
238+
<className>com/google/cloud/spanner/StructReader</className>
239+
<method>java.util.List getPgOidList(java.lang.String)</method>
240+
</difference>
241+
<difference>
242+
<differenceType>7013</differenceType>
243+
<className>com/google/cloud/spanner/Value</className>
244+
<method>long getPgOid()</method>
245+
</difference>
246+
<difference>
247+
<differenceType>7013</differenceType>
248+
<className>com/google/cloud/spanner/Value</className>
249+
<method>java.util.List getPgOidArray()</method>
250+
</difference>
251+
195252
<difference>
196253
<differenceType>7012</differenceType>
197254
<className>com/google/cloud/spanner/BatchClient</className>

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,9 @@ private Object writeReplace() {
480480
case PG_JSONB:
481481
builder.set(fieldName).to(Value.pgJsonb((String) value));
482482
break;
483+
case PG_OID:
484+
builder.set(fieldName).to(Value.pgOid((Long) value));
485+
break;
483486
case BYTES:
484487
builder
485488
.set(fieldName)
@@ -520,6 +523,9 @@ private Object writeReplace() {
520523
case PG_JSONB:
521524
builder.set(fieldName).toPgJsonbArray((Iterable<String>) value);
522525
break;
526+
case PG_OID:
527+
builder.set(fieldName).toPgOidArray((Iterable<Long>) value);
528+
break;
523529
case BYTES:
524530
builder
525531
.set(fieldName)
@@ -596,6 +602,7 @@ private static Object decodeValue(Type fieldType, com.google.protobuf.Value prot
596602
checkType(fieldType, proto, KindCase.BOOL_VALUE);
597603
return proto.getBoolValue();
598604
case INT64:
605+
case PG_OID:
599606
checkType(fieldType, proto, KindCase.STRING_VALUE);
600607
return Long.parseLong(proto.getStringValue());
601608
case FLOAT64:
@@ -666,6 +673,8 @@ static Object decodeArrayValue(Type elementType, ListValue listValue) {
666673
case STRUCT:
667674
return Lists.transform(
668675
listValue.getValuesList(), input -> decodeValue(elementType, input));
676+
case PG_OID:
677+
return new PgOidArray(listValue);
669678
default:
670679
throw new AssertionError("Unhandled type code: " + elementType.getCode());
671680
}
@@ -734,6 +743,11 @@ protected String getPgJsonbInternal(int columnIndex) {
734743
return (String) rowData.get(columnIndex);
735744
}
736745

746+
@Override
747+
protected long getPgOidInternal(int columnIndex) {
748+
return (Long) rowData.get(columnIndex);
749+
}
750+
737751
@Override
738752
protected ByteArray getBytesInternal(int columnIndex) {
739753
return getLazyBytesInternal(columnIndex).getByteArray();
@@ -780,6 +794,8 @@ protected Value getValueInternal(int columnIndex) {
780794
return Value.json(isNull ? null : getJsonInternal(columnIndex));
781795
case PG_JSONB:
782796
return Value.pgJsonb(isNull ? null : getPgJsonbInternal(columnIndex));
797+
case PG_OID:
798+
return Value.pgOid(isNull ? null : getPgOidInternal(columnIndex));
783799
case BYTES:
784800
return Value.internalBytes(isNull ? null : getLazyBytesInternal(columnIndex));
785801
case TIMESTAMP:
@@ -810,6 +826,8 @@ protected Value getValueInternal(int columnIndex) {
810826
return Value.jsonArray(isNull ? null : getJsonListInternal(columnIndex));
811827
case PG_JSONB:
812828
return Value.pgJsonbArray(isNull ? null : getPgJsonbListInternal(columnIndex));
829+
case PG_OID:
830+
return Value.pgOidArray(isNull ? null : getPgOidListInternal(columnIndex));
813831
case BYTES:
814832
return Value.bytesArray(isNull ? null : getBytesListInternal(columnIndex));
815833
case TIMESTAMP:
@@ -897,6 +915,16 @@ protected List<String> getPgJsonbListInternal(int columnIndex) {
897915
return Collections.unmodifiableList((List<String>) rowData.get(columnIndex));
898916
}
899917

918+
@Override
919+
protected long[] getPgOidArrayInternal(int columnIndex) {
920+
return getPgOidListInternal(columnIndex).toPrimitiveArray(columnIndex);
921+
}
922+
923+
@Override
924+
protected PgOidArray getPgOidListInternal(int columnIndex) {
925+
return (PgOidArray) rowData.get(columnIndex);
926+
}
927+
900928
@Override
901929
@SuppressWarnings("unchecked") // We know ARRAY<BYTES> produces a List<LazyByteArray>.
902930
protected List<ByteArray> getBytesListInternal(int columnIndex) {
@@ -1457,6 +1485,31 @@ Double get(double[] array, int i) {
14571485
}
14581486
}
14591487

1488+
static class PgOidArray extends PrimitiveArray<Long, long[]> {
1489+
PgOidArray(ListValue protoList) {
1490+
super(protoList);
1491+
}
1492+
1493+
PgOidArray(long[] data, BitSet nulls) {
1494+
super(data, nulls, data.length);
1495+
}
1496+
1497+
@Override
1498+
long[] newArray(int size) {
1499+
return new long[size];
1500+
}
1501+
1502+
@Override
1503+
void setProto(long[] array, int i, com.google.protobuf.Value protoValue) {
1504+
array[i] = Long.parseLong(protoValue.getStringValue());
1505+
}
1506+
1507+
@Override
1508+
Long get(long[] array, int i) {
1509+
return array[i];
1510+
}
1511+
}
1512+
14601513
protected abstract GrpcStruct currRow();
14611514

14621515
@Override
@@ -1499,6 +1552,11 @@ protected String getPgJsonbInternal(int columnIndex) {
14991552
return currRow().getPgJsonbInternal(columnIndex);
15001553
}
15011554

1555+
@Override
1556+
protected long getPgOidInternal(int columnIndex) {
1557+
return currRow().getPgOidInternal(columnIndex);
1558+
}
1559+
15021560
@Override
15031561
protected ByteArray getBytesInternal(int columnIndex) {
15041562
return currRow().getBytesInternal(columnIndex);
@@ -1569,6 +1627,16 @@ protected List<String> getPgJsonbListInternal(int columnIndex) {
15691627
return currRow().getJsonListInternal(columnIndex);
15701628
}
15711629

1630+
@Override
1631+
protected long[] getPgOidArrayInternal(int columnIndex) {
1632+
return currRow().getPgOidArrayInternal(columnIndex);
1633+
}
1634+
1635+
@Override
1636+
protected List<Long> getPgOidListInternal(int columnIndex) {
1637+
return currRow().getPgOidListInternal(columnIndex);
1638+
}
1639+
15721640
@Override
15731641
protected List<ByteArray> getBytesListInternal(int columnIndex) {
15741642
return currRow().getBytesListInternal(columnIndex);

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ protected String getPgJsonbInternal(int columnIndex) {
5252
throw new UnsupportedOperationException("Not implemented");
5353
}
5454

55+
protected abstract long getPgOidInternal(int columnIndex);
56+
5557
protected abstract ByteArray getBytesInternal(int columnIndex);
5658

5759
protected abstract Timestamp getTimestampInternal(int columnIndex);
@@ -86,6 +88,10 @@ protected List<String> getPgJsonbListInternal(int columnIndex) {
8688
throw new UnsupportedOperationException("Not implemented");
8789
}
8890

91+
protected abstract long[] getPgOidArrayInternal(int columnIndex);
92+
93+
protected abstract List<Long> getPgOidListInternal(int columnIndex);
94+
8995
protected abstract List<ByteArray> getBytesListInternal(int columnIndex);
9096

9197
protected abstract List<Timestamp> getTimestampListInternal(int columnIndex);
@@ -210,6 +216,19 @@ public String getPgJsonb(String columnName) {
210216
return getPgJsonbInternal(columnIndex);
211217
}
212218

219+
@Override
220+
public long getPgOid(int columnIndex) {
221+
checkNonNullOfType(columnIndex, Type.pgOid(), columnIndex);
222+
return getPgOidInternal(columnIndex);
223+
}
224+
225+
@Override
226+
public long getPgOid(String columnName) {
227+
int columnIndex = getColumnIndex(columnName);
228+
checkNonNullOfType(columnIndex, Type.pgOid(), columnName);
229+
return getPgOidInternal(columnIndex);
230+
}
231+
213232
@Override
214233
public ByteArray getBytes(int columnIndex) {
215234
checkNonNullOfType(columnIndex, Type.bytes(), columnIndex);
@@ -398,6 +417,32 @@ public List<String> getPgJsonbList(String columnName) {
398417
return getPgJsonbListInternal(columnIndex);
399418
}
400419

420+
@Override
421+
public long[] getPgOidArray(int columnIndex) {
422+
checkNonNullOfType(columnIndex, Type.array(Type.pgOid()), columnIndex);
423+
return getPgOidArrayInternal(columnIndex);
424+
}
425+
426+
@Override
427+
public long[] getPgOidArray(String columnName) {
428+
int columnIndex = getColumnIndex(columnName);
429+
checkNonNullOfType(columnIndex, Type.array(Type.pgOid()), columnName);
430+
return getPgOidArrayInternal(columnIndex);
431+
}
432+
433+
@Override
434+
public List<Long> getPgOidList(int columnIndex) {
435+
checkNonNullOfType(columnIndex, Type.array(Type.pgOid()), columnIndex);
436+
return getPgOidListInternal(columnIndex);
437+
}
438+
439+
@Override
440+
public List<Long> getPgOidList(String columnName) {
441+
int columnIndex = getColumnIndex(columnName);
442+
checkNonNullOfType(columnIndex, Type.array(Type.pgOid()), columnName);
443+
return getPgOidListInternal(columnIndex);
444+
}
445+
401446
@Override
402447
public List<ByteArray> getBytesList(int columnIndex) {
403448
checkNonNullOfType(columnIndex, Type.array(Type.bytes()), columnIndex);

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,18 @@ public String getPgJsonb(String columnName) {
180180
return delegate.get().getPgJsonb(columnName);
181181
}
182182

183+
@Override
184+
public long getPgOid(int columnIndex) {
185+
checkValidState();
186+
return delegate.get().getPgOid(columnIndex);
187+
}
188+
189+
@Override
190+
public long getPgOid(String columnName) {
191+
checkValidState();
192+
return delegate.get().getPgOid(columnName);
193+
}
194+
183195
@Override
184196
public ByteArray getBytes(int columnIndex) {
185197
checkValidState();
@@ -334,6 +346,29 @@ public List<String> getPgJsonbList(String columnName) {
334346
return delegate.get().getPgJsonbList(columnName);
335347
}
336348

349+
public long[] getPgOidArray(int columnIndex) {
350+
checkValidState();
351+
return delegate.get().getPgOidArray(columnIndex);
352+
}
353+
354+
@Override
355+
public long[] getPgOidArray(String columnName) {
356+
checkValidState();
357+
return delegate.get().getPgOidArray(columnName);
358+
}
359+
360+
@Override
361+
public List<Long> getPgOidList(int columnIndex) {
362+
checkValidState();
363+
return delegate.get().getPgOidList(columnIndex);
364+
}
365+
366+
@Override
367+
public List<Long> getPgOidList(String columnName) {
368+
checkValidState();
369+
return delegate.get().getPgOidList(columnName);
370+
}
371+
337372
@Override
338373
public List<ByteArray> getBytesList(int columnIndex) {
339374
checkValidState();

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,16 @@ public String getPgJsonb(String columnName) {
270270
return getCurrentRowAsStruct().getPgJsonb(columnName);
271271
}
272272

273+
@Override
274+
public long getPgOid(int columnIndex) {
275+
return getCurrentRowAsStruct().getPgOid(columnIndex);
276+
}
277+
278+
@Override
279+
public long getPgOid(String columnName) {
280+
return getCurrentRowAsStruct().getPgOid(columnName);
281+
}
282+
273283
@Override
274284
public ByteArray getBytes(int columnIndex) {
275285
return getCurrentRowAsStruct().getBytes(columnIndex);
@@ -410,6 +420,26 @@ public List<String> getPgJsonbList(String columnName) {
410420
return getCurrentRowAsStruct().getPgJsonbList(columnName);
411421
}
412422

423+
@Override
424+
public long[] getPgOidArray(int columnIndex) {
425+
return getCurrentRowAsStruct().getPgOidArray(columnIndex);
426+
}
427+
428+
@Override
429+
public long[] getPgOidArray(String columnName) {
430+
return getCurrentRowAsStruct().getPgOidArray(columnName);
431+
}
432+
433+
@Override
434+
public List<Long> getPgOidList(int columnIndex) {
435+
return getCurrentRowAsStruct().getPgOidList(columnIndex);
436+
}
437+
438+
@Override
439+
public List<Long> getPgOidList(String columnName) {
440+
return getCurrentRowAsStruct().getPgOidList(columnName);
441+
}
442+
413443
@Override
414444
public List<ByteArray> getBytesList(int columnIndex) {
415445
return getCurrentRowAsStruct().getBytesList(columnIndex);

0 commit comments

Comments
 (0)