Skip to content

Commit 0630175

Browse files
committed
Use relational types for structs and arrays
1 parent 3f82672 commit 0630175

File tree

63 files changed

+1437
-1395
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1437
-1395
lines changed

fdb-relational-api/src/main/java/com/apple/foundationdb/relational/api/ArrayMetaData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
package com.apple.foundationdb.relational.api;
2222

2323
import com.apple.foundationdb.relational.api.exceptions.ErrorCode;
24+
import com.apple.foundationdb.relational.api.metadata.DataType;
2425

26+
import javax.annotation.Nonnull;
2527
import java.sql.SQLException;
2628
import java.sql.Wrapper;
2729

@@ -59,4 +61,7 @@ default StructMetaData getElementStructMetaData() throws SQLException {
5961
* @throws SQLException if the type of the column is not an array, or if something else goes wrong.
6062
*/
6163
ArrayMetaData getElementArrayMetaData() throws SQLException;
64+
65+
@Nonnull
66+
DataType.ArrayType getRelationalDataType() throws SQLException;
6267
}

fdb-relational-api/src/main/java/com/apple/foundationdb/relational/api/FieldDescription.java

Lines changed: 0 additions & 205 deletions
This file was deleted.

fdb-relational-api/src/main/java/com/apple/foundationdb/relational/api/RelationalArrayBuilder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import javax.annotation.Nonnull;
2424
import java.sql.SQLException;
25+
import java.util.UUID;
2526

2627
/**
2728
* Builder for {@link RelationalArray}.
@@ -42,7 +43,11 @@ public interface RelationalArrayBuilder {
4243

4344
RelationalArrayBuilder addString(@Nonnull String value) throws SQLException;
4445

45-
RelationalArrayBuilder addLong(@Nonnull long value) throws SQLException;
46+
RelationalArrayBuilder addLong(long value) throws SQLException;
47+
48+
RelationalArrayBuilder addUuid(@Nonnull UUID value) throws SQLException;
49+
50+
RelationalArrayBuilder addObject(@Nonnull Object value) throws SQLException;
4651

4752
RelationalArrayBuilder addStruct(RelationalStruct struct) throws SQLException;
4853
}

fdb-relational-api/src/main/java/com/apple/foundationdb/relational/api/RelationalArrayMetaData.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@
2121
package com.apple.foundationdb.relational.api;
2222

2323
import com.apple.foundationdb.annotation.API;
24-
2524
import com.apple.foundationdb.relational.api.exceptions.ErrorCode;
2625
import com.apple.foundationdb.relational.api.exceptions.RelationalException;
27-
26+
import com.apple.foundationdb.relational.api.metadata.DataType;
2827
import com.google.common.base.Suppliers;
2928

3029
import javax.annotation.Nonnull;
30+
import java.sql.DatabaseMetaData;
3131
import java.sql.SQLException;
32-
import java.sql.Types;
3332
import java.util.Objects;
3433
import java.util.function.Supplier;
3534

@@ -39,41 +38,42 @@
3938
@API(API.Status.EXPERIMENTAL)
4039
public final class RelationalArrayMetaData implements ArrayMetaData {
4140

42-
private final FieldDescription element;
41+
private final DataType.ArrayType type;
4342

4443
private final Supplier<Integer> hashCodeSupplier;
4544

46-
private RelationalArrayMetaData(@Nonnull FieldDescription element) {
47-
this.element = element;
45+
private RelationalArrayMetaData(@Nonnull DataType.ArrayType type) {
46+
this.type = type;
4847
this.hashCodeSupplier = Suppliers.memoize(this::calculateHashCode);
4948
}
5049

51-
public static RelationalArrayMetaData ofPrimitive(int sqlType, int nullable) {
52-
return new RelationalArrayMetaData(FieldDescription.primitive("VALUE", sqlType, nullable));
53-
}
54-
55-
public static RelationalArrayMetaData ofStruct(@Nonnull StructMetaData metaData, int nullable) {
56-
return new RelationalArrayMetaData(FieldDescription.struct("VALUE", nullable, metaData));
50+
@Nonnull
51+
public static RelationalArrayMetaData of(@Nonnull DataType.ArrayType type) {
52+
return new RelationalArrayMetaData(type);
5753
}
5854

5955
@Override
60-
public int isElementNullable() throws SQLException {
61-
return element.isNullable();
56+
public int isElementNullable() {
57+
if (type.getElementType().isNullable()) {
58+
return DatabaseMetaData.columnNullable;
59+
} else {
60+
return DatabaseMetaData.columnNoNulls;
61+
}
6262
}
6363

6464
@Override
6565
public String getElementName() throws SQLException {
66-
return element.getName();
66+
return "VALUE";
6767
}
6868

6969
@Override
7070
public int getElementType() throws SQLException {
71-
return element.getSqlTypeCode();
71+
return type.getElementType().getJdbcSqlCode();
7272
}
7373

7474
@Override
75-
public String getElementTypeName() throws SQLException {
76-
return SqlTypeNamesSupport.getSqlTypeName(element.getSqlTypeCode());
75+
public String getElementTypeName() {
76+
return SqlTypeNamesSupport.getSqlTypeName(type.getElementType().getJdbcSqlCode());
7777
}
7878

7979
/**
@@ -86,10 +86,10 @@ public String getElementTypeName() throws SQLException {
8686
*/
8787
@Override
8888
public StructMetaData getElementStructMetaData() throws SQLException {
89-
if (element.getSqlTypeCode() != Types.STRUCT) {
89+
if (type.getElementType().getCode() != DataType.Code.STRUCT) {
9090
throw new RelationalException("Element is not of STRUCT type", ErrorCode.CANNOT_CONVERT_TYPE).toSqlException();
9191
}
92-
return element.getFieldMetaData();
92+
return RelationalStructMetaData.of((DataType.StructType) type.getElementType());
9393
}
9494

9595
/**
@@ -102,15 +102,21 @@ public StructMetaData getElementStructMetaData() throws SQLException {
102102
*/
103103
@Override
104104
public ArrayMetaData getElementArrayMetaData() throws SQLException {
105-
if (element.getSqlTypeCode() != Types.ARRAY) {
105+
if (type.getElementType().getCode() != DataType.Code.ARRAY) {
106106
throw new RelationalException("Element is not of ARRAY type", ErrorCode.CANNOT_CONVERT_TYPE).toSqlException();
107107
}
108-
return element.getArrayMetaData();
108+
return RelationalArrayMetaData.of((DataType.ArrayType) type.getElementType());
109+
}
110+
111+
@Nonnull
112+
@Override
113+
public DataType.ArrayType getRelationalDataType() throws SQLException {
114+
return type;
109115
}
110116

111117
@Nonnull
112-
public FieldDescription getElementField() {
113-
return element;
118+
public DataType getElementDataType() {
119+
return type.getElementType();
114120
}
115121

116122
@Override
@@ -132,7 +138,7 @@ public boolean equals(Object other) {
132138
if (otherMetadata == this) {
133139
return true;
134140
}
135-
return element.equals(otherMetadata.element);
141+
return type.equals(otherMetadata.type);
136142
}
137143

138144
@Override
@@ -141,7 +147,7 @@ public int hashCode() {
141147
}
142148

143149
private int calculateHashCode() {
144-
return Objects.hash(element);
150+
return Objects.hash(type);
145151
}
146152

147153
}

0 commit comments

Comments
 (0)