CurtHagenlocher commented on code in PR #1356:
URL: https://github.com/apache/arrow-adbc/pull/1356#discussion_r1445397917
##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -607,17 +608,24 @@ public override IArrowArrayStream
GetInfo(List<AdbcInfoCode> codes)
ArrowBuffer.BitmapBuilder nullBitmapBuffer = new
ArrowBuffer.BitmapBuilder();
int length = 0;
- string query = string.Format("SELECT * FROM
`{0}`.`{1}`.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE table_name = '{2}'
AND constraint_name = '{3}'",
- Sanitize(catalog), Sanitize(dbSchema), Sanitize(table),
Sanitize(constraintName));
+ // table_name = '{2}' AND
Review Comment:
These are commented-out because they might be re-enabled at some point e.g.
when some other problem is fixed? If so, consider leaving an explanatory
comment.
##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -683,8 +691,40 @@ private XdbcDataType ToXdbcDataType(string type)
return XdbcDataType.XdbcDataType_XDBC_VARBINARY;
case "NUMERIC" or "DECIMAL" or "BIGNUMERIC" or "BIGDECIMAL":
return XdbcDataType.XdbcDataType_XDBC_NUMERIC;
-
default:
+
+ int decimalMaxScale = 28;
Review Comment:
Is the "28" due to limitations of CLR decimal? How does this code relate to
the use of SqlDecimal?
##########
csharp/src/Drivers/BigQuery/BigQueryStatement.cs:
##########
@@ -107,46 +107,54 @@ private IArrowType TranslateType(TableFieldSchema field)
switch (field.Type)
{
case "INTEGER" or "INT64":
- return Int64Type.Default;
+ return GetType(field, Int64Type.Default);
case "FLOAT" or "FLOAT64":
- return DoubleType.Default;
+ return GetType(field, DoubleType.Default);
case "BOOL" or "BOOLEAN":
- return BooleanType.Default;
+ return GetType(field, BooleanType.Default);
case "STRING":
- return StringType.Default;
+ return GetType(field, StringType.Default);
case "BYTES":
- return BinaryType.Default;
+ return GetType(field, BinaryType.Default);
case "DATETIME":
- return TimestampType.Default;
+ return GetType(field, TimestampType.Default);
case "TIMESTAMP":
- return TimestampType.Default;
+ return GetType(field, TimestampType.Default);
case "TIME":
- return Time64Type.Default;
+ return GetType(field, Time64Type.Default);
case "DATE":
- return Date64Type.Default;
+ return GetType(field, Date64Type.Default);
case "RECORD" or "STRUCT":
// its a json string
- return StringType.Default;
+ return GetType(field, StringType.Default);
// treat these values as strings
case "GEOGRAPHY" or "JSON":
- return StringType.Default;
+ return GetType(field, StringType.Default);
// get schema cannot get precision and scale for NUMERIC or
BIGNUMERIC types
// instead, the max values are returned from BigQuery
// see 'precision' on
https://cloud.google.com/bigquery/docs/reference/rest/v2/tables
// and discussion in
https://github.com/apache/arrow-adbc/pull/1192#discussion_r1365987279
case "NUMERIC" or "DECIMAL":
- return new Decimal128Type(38, 9);
+ return GetType(field, new Decimal128Type(38, 9));
case "BIGNUMERIC" or "BIGDECIMAL":
- return
bool.Parse(this.Options[BigQueryParameters.LargeDecimalsAsString]) ?
StringType.Default : new Decimal256Type(76, 38);
+ return
bool.Parse(this.Options[BigQueryParameters.LargeDecimalsAsString]) ?
GetType(field, StringType.Default) : GetType(field, new Decimal256Type(76, 38));
default: throw new InvalidOperationException($"{field.Type}
cannot be translated");
}
}
+ private IArrowType GetType(TableFieldSchema field, IArrowType type)
+ {
+ if(field.Mode == "REPEATED")
Review Comment:
nit: space before paren?
##########
csharp/test/Apache.Arrow.Adbc.Tests/Metadata/GetObjectsParser.cs:
##########
@@ -149,5 +152,55 @@ private static List<AdbcColumn> ParseColumns(StructArray
columnsArray)
return columns;
}
+
+ private static List<AdbcConstraint> ParseConstraints(StructArray
constraintsArray)
+ {
+ if (constraintsArray == null) return null;
+
+ List<AdbcConstraint> constraints = new List<AdbcConstraint>();
+
+ StringArray name =
(StringArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
=> f.Name == "constraint_name")]; // constraint_name | utf8
+ StringArray type =
(StringArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
=> f.Name == "constraint_type")]; // constraint_type | utf8 not null
+ ListArray column_names =
(ListArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
=> f.Name == "constraint_column_names")]; // constraint_column_names |
list<utf8> not null
+ ListArray column_usage =
(ListArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
=> f.Name == "constraint_column_usage")]; // constraint_column_usage |
list<USAGE_SCHEMA>
+
+ for (int i = 0; i < constraintsArray.Length; i++)
+ {
+ AdbcConstraint c = new AdbcConstraint();
+ c.Name = name.GetString(i);
+ c.Type = type.GetString(i);
+
+ StringArray col_names = column_names.GetSlicedValues(i) as
StringArray;
+ StructArray usage = column_usage.GetSlicedValues(i) as
StructArray;
+
+ //for(int j=0; j< column_names.Length; j++)
Review Comment:
This is commented-out because it might be enabled at some point e.g. when
some other problem is fixed? If so, consider leaving an explanatory comment.
##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -683,8 +691,40 @@ private XdbcDataType ToXdbcDataType(string type)
return XdbcDataType.XdbcDataType_XDBC_VARBINARY;
case "NUMERIC" or "DECIMAL" or "BIGNUMERIC" or "BIGDECIMAL":
return XdbcDataType.XdbcDataType_XDBC_NUMERIC;
-
default:
+
+ int decimalMaxScale = 28;
+
+ if(type.StartsWith("NUMERIC("))
Review Comment:
nit: space before paren?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]