Skip to content

Commit 9cb5e04

Browse files
committed
Type changes
1 parent 7303a64 commit 9cb5e04

File tree

8 files changed

+584
-421
lines changed

8 files changed

+584
-421
lines changed

crates/configuration/src/configuration.sql

+60-21
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,65 @@ WITH column_data AS (
66
c.column_name,
77
TO_JSON_STRING(STRUCT(
88
c.column_name AS name,
9-
JSON_OBJECT('scalarType',
10-
CASE
11-
WHEN LOWER(c.data_type) = 'string' THEN 'string'
12-
WHEN LOWER(c.data_type) = 'bytes' THEN 'bytes'
13-
WHEN LOWER(c.data_type) = 'int64' THEN 'int64'
14-
WHEN LOWER(c.data_type) = 'float64' THEN 'float64'
15-
WHEN LOWER(c.data_type) = 'bool' THEN 'boolean'
16-
WHEN LOWER(c.data_type) = 'numeric' THEN 'numeric'
17-
WHEN LOWER(c.data_type) = 'bignumeric' THEN 'bignumeric'
18-
WHEN LOWER(c.data_type) = 'geography' THEN 'geography'
19-
WHEN LOWER(c.data_type) = 'date' THEN 'date'
20-
WHEN LOWER(c.data_type) = 'datetime' THEN 'datetime'
21-
WHEN LOWER(c.data_type) = 'time' THEN 'time'
22-
WHEN LOWER(c.data_type) = 'timestamp' THEN 'timestamp'
23-
WHEN LOWER(c.data_type) = 'json' THEN 'json'
24-
WHEN STARTS_WITH(LOWER(c.data_type), 'array<') THEN 'array'
25-
WHEN STARTS_WITH(LOWER(c.data_type), 'struct<') THEN 'struct'
26-
ELSE 'any'
27-
END
28-
) AS type,
9+
CASE
10+
WHEN LOWER(c.data_type) LIKE 'array%' THEN
11+
JSON_OBJECT('arrayType',
12+
JSON_OBJECT('scalarType', TRIM(REPLACE(REPLACE(LOWER(c.data_type), 'array<', ''), '>', '')))
13+
)
14+
WHEN LOWER(c.data_type) LIKE 'range%' THEN
15+
JSON_OBJECT('rangeType', TRIM(REPLACE(REPLACE(LOWER(c.data_type), 'range<', ''), '>', '')))
16+
WHEN LOWER(c.data_type) LIKE 'struct%' THEN
17+
JSON_OBJECT('structType',
18+
(SELECT
19+
JSON_OBJECT(
20+
ARRAY_AGG(TRIM(SPLIT(TRIM(field), ' ')[OFFSET(0)])),
21+
ARRAY_AGG(JSON_OBJECT('scalarType',
22+
LOWER(
23+
IF(
24+
ARRAY_LENGTH(SPLIT(TRIM(field), ' ')) > 1,
25+
case TRIM(SPLIT(TRIM(field), ' ')[OFFSET(1)])
26+
WHEN 'string' THEN 'string'
27+
WHEN 'bytes' THEN 'bytes'
28+
WHEN 'int64' THEN 'int64'
29+
WHEN 'float64' THEN 'float64'
30+
WHEN 'bool' THEN 'boolean'
31+
WHEN 'numeric' THEN 'numeric'
32+
WHEN 'bignumeric' THEN 'bignumeric'
33+
WHEN 'geography' THEN 'geography'
34+
WHEN 'date' THEN 'date'
35+
WHEN 'datetime' THEN 'datetime'
36+
WHEN 'time' THEN 'time'
37+
WHEN 'timestamp' THEN 'timestamp'
38+
WHEN 'json' THEN 'json'
39+
ELSE 'any'
40+
END,
41+
"any"
42+
)
43+
)
44+
))
45+
)
46+
FROM UNNEST(SPLIT(TRIM(REPLACE(REPLACE(LOWER(c.data_type), 'struct<', ''), '>', '')), ',')) AS field)
47+
)
48+
ELSE
49+
JSON_OBJECT('scalarType',
50+
CASE
51+
WHEN LOWER(c.data_type) = 'string' THEN 'string'
52+
WHEN LOWER(c.data_type) = 'bytes' THEN 'bytes'
53+
WHEN LOWER(c.data_type) = 'int64' THEN 'int64'
54+
WHEN LOWER(c.data_type) = 'float64' THEN 'float64'
55+
WHEN LOWER(c.data_type) = 'bool' THEN 'boolean'
56+
WHEN LOWER(c.data_type) = 'numeric' THEN 'numeric'
57+
WHEN LOWER(c.data_type) = 'bignumeric' THEN 'bignumeric'
58+
WHEN LOWER(c.data_type) = 'geography' THEN 'geography'
59+
WHEN LOWER(c.data_type) = 'date' THEN 'date'
60+
WHEN LOWER(c.data_type) = 'datetime' THEN 'datetime'
61+
WHEN LOWER(c.data_type) = 'time' THEN 'time'
62+
WHEN LOWER(c.data_type) = 'timestamp' THEN 'timestamp'
63+
WHEN LOWER(c.data_type) = 'json' THEN 'json'
64+
ELSE 'any'
65+
END
66+
)
67+
END AS type,
2968
CASE WHEN c.is_nullable = 'YES' THEN 'nullable' ELSE 'nonNullable' END AS nullable
3069
)) AS column_info
3170
FROM HASURA_DATABASE_NAME_PLACEHOLDER.INFORMATION_SCHEMA.TABLES AS t
@@ -138,4 +177,4 @@ SELECT
138177
)), '}') AS result
139178
FROM columns_struct
140179
LEFT JOIN relationship_struct ON columns_struct.table_name = relationship_struct.table_name
141-
LEFT JOIN unique_constraint_struct ON columns_struct.table_name = unique_constraint_struct.table_name
180+
LEFT JOIN unique_constraint_struct ON columns_struct.table_name = unique_constraint_struct.table_name

crates/configuration/src/to_runtime_configuration.rs

+12-143
Original file line numberDiff line numberDiff line change
@@ -85,34 +85,17 @@ fn convert_scalar_types(
8585
type_name: scalar_type.type_name,
8686
schema_name: (scalar_type.schema_name),
8787
description: scalar_type.description,
88-
aggregate_functions: scalar_type
89-
.aggregate_functions
90-
.into_iter()
91-
.map(|(k, v)| (k, convert_aggregate_function(v)))
92-
.collect(),
93-
comparison_operators: scalar_type
94-
.comparison_operators
95-
.into_iter()
96-
.map(|(k, v)| (k, convert_comparison_operator(v)))
97-
.collect(),
98-
type_representation: scalar_type
99-
.type_representation
100-
.map(convert_type_representation),
88+
aggregate_functions: scalar_type.aggregate_functions,
89+
comparison_operators: scalar_type.comparison_operators,
90+
type_representation: scalar_type.type_representation.clone(),
91+
full_type_representation: scalar_type.type_representation,
10192
},
10293
)
10394
})
10495
.collect(),
10596
)
10697
}
10798

108-
fn convert_aggregate_function(
109-
aggregate_function: metadata::AggregateFunction,
110-
) -> query_engine_metadata::metadata::AggregateFunction {
111-
query_engine_metadata::metadata::AggregateFunction {
112-
return_type: aggregate_function.return_type,
113-
}
114-
}
115-
11699
fn convert_native_operations(
117100
native_operations: metadata::NativeOperations,
118101
) -> query_engine_metadata::metadata::NativeOperations {
@@ -171,10 +154,16 @@ fn convert_nullable(nullable: &metadata::Nullable) -> query_engine_metadata::met
171154

172155
fn convert_type(r#type: metadata::Type) -> query_engine_metadata::metadata::Type {
173156
match r#type {
174-
metadata::Type::ScalarType(t) => query_engine_metadata::metadata::Type::ScalarType(t),
175157
metadata::Type::ArrayType(t) => {
176158
query_engine_metadata::metadata::Type::ArrayType(Box::new(convert_type(*t)))
177-
}
159+
},
160+
metadata::Type::RangeType(t) => {
161+
query_engine_metadata::metadata::Type::RangeType(t)
162+
},
163+
metadata::Type::StructType(t) => {
164+
query_engine_metadata::metadata::Type::StructType(t)
165+
},
166+
metadata::Type::ScalarType(t) => query_engine_metadata::metadata::Type::ScalarType(t),
178167
}
179168
}
180169

@@ -258,126 +247,6 @@ fn convert_native_query_part(
258247
}
259248
}
260249

261-
fn convert_type_representation(
262-
type_representation: metadata::TypeRepresentation,
263-
) -> query_engine_metadata::metadata::TypeRepresentation {
264-
match type_representation {
265-
metadata::TypeRepresentation::Boolean => {
266-
query_engine_metadata::metadata::TypeRepresentation::Boolean
267-
}
268-
metadata::TypeRepresentation::Bytes => {
269-
query_engine_metadata::metadata::TypeRepresentation::Bytes
270-
}
271-
metadata::TypeRepresentation::String => {
272-
query_engine_metadata::metadata::TypeRepresentation::String
273-
}
274-
metadata::TypeRepresentation::Int64 => {
275-
query_engine_metadata::metadata::TypeRepresentation::Int64
276-
}
277-
metadata::TypeRepresentation::Float64 => {
278-
query_engine_metadata::metadata::TypeRepresentation::Float64
279-
}
280-
metadata::TypeRepresentation::Numeric => {
281-
query_engine_metadata::metadata::TypeRepresentation::Numeric
282-
}
283-
metadata::TypeRepresentation::BigNumeric => {
284-
query_engine_metadata::metadata::TypeRepresentation::BigNumeric
285-
}
286-
metadata::TypeRepresentation::Timestamp => {
287-
query_engine_metadata::metadata::TypeRepresentation::Timestamp
288-
}
289-
metadata::TypeRepresentation::Time => {
290-
query_engine_metadata::metadata::TypeRepresentation::Time
291-
}
292-
metadata::TypeRepresentation::Date => {
293-
query_engine_metadata::metadata::TypeRepresentation::Date
294-
}
295-
metadata::TypeRepresentation::Datetime => {
296-
query_engine_metadata::metadata::TypeRepresentation::Datetime
297-
}
298-
metadata::TypeRepresentation::Array(inner) => {
299-
query_engine_metadata::metadata::TypeRepresentation::Array(Box::new(
300-
convert_type_representation(*inner),
301-
))
302-
}
303-
metadata::TypeRepresentation::Geography => {
304-
query_engine_metadata::metadata::TypeRepresentation::Geography
305-
}
306-
metadata::TypeRepresentation::Struct(fields) => {
307-
query_engine_metadata::metadata::TypeRepresentation::Struct(
308-
fields
309-
.into_iter()
310-
.map(|(k, v)| (k, Box::new(convert_type_representation(*v))))
311-
.collect(),
312-
)
313-
}
314-
metadata::TypeRepresentation::Json => {
315-
query_engine_metadata::metadata::TypeRepresentation::Json
316-
}
317-
metadata::TypeRepresentation::Enum(v) => {
318-
query_engine_metadata::metadata::TypeRepresentation::Enum(v)
319-
}
320-
}
321-
}
322-
323-
fn convert_comparison_operator(
324-
comparison_operator: metadata::ComparisonOperator,
325-
) -> query_engine_metadata::metadata::ComparisonOperator {
326-
query_engine_metadata::metadata::ComparisonOperator {
327-
operator_name: comparison_operator.operator_name,
328-
operator_kind: convert_operator_kind(&comparison_operator.operator_kind),
329-
argument_type: comparison_operator.argument_type,
330-
is_infix: comparison_operator.is_infix,
331-
}
332-
}
333-
334-
fn convert_operator_kind(
335-
operator_kind: &metadata::OperatorKind,
336-
) -> query_engine_metadata::metadata::OperatorKind {
337-
match operator_kind {
338-
metadata::OperatorKind::Equal => query_engine_metadata::metadata::OperatorKind::Equal,
339-
metadata::OperatorKind::In => query_engine_metadata::metadata::OperatorKind::In,
340-
metadata::OperatorKind::Custom => query_engine_metadata::metadata::OperatorKind::Custom,
341-
}
342-
}
343-
344-
// fn convert_composite_types(
345-
// composite_types: metadata::CompositeTypes,
346-
// ) -> query_engine_metadata::metadata::CompositeTypes {
347-
// query_engine_metadata::metadata::CompositeTypes(
348-
// composite_types
349-
// .0
350-
// .into_iter()
351-
// .map(|(k, composite_type)| (k, convert_composite_type(composite_type)))
352-
// .collect(),
353-
// )
354-
// }
355-
356-
// fn convert_composite_type(
357-
// composite_type: metadata::CompositeType,
358-
// ) -> query_engine_metadata::metadata::CompositeType {
359-
// query_engine_metadata::metadata::CompositeType {
360-
// type_name: composite_type.type_name,
361-
// schema_name: (composite_type.schema_name),
362-
// fields: composite_type
363-
// .fields
364-
// .into_iter()
365-
// .map(|(k, field)| (k, convert_composite_type_field_info(field)))
366-
// .collect(),
367-
// description: composite_type.description,
368-
// }
369-
// }
370-
371-
// fn convert_composite_type_field_info(
372-
// field: metadata::FieldInfo,
373-
// ) -> query_engine_metadata::metadata::FieldInfo {
374-
// query_engine_metadata::metadata::FieldInfo {
375-
// field_name: field.field_name,
376-
// r#type: convert_type(field.r#type),
377-
// description: field.description,
378-
// }
379-
// }
380-
381250
pub fn convert_tables(tables: metadata::TablesInfo) -> query_engine_metadata::metadata::TablesInfo {
382251
query_engine_metadata::metadata::TablesInfo(
383252
tables

0 commit comments

Comments
 (0)