Skip to content

Commit 96917aa

Browse files
committed
fix: reference type check
1 parent 139e321 commit 96917aa

File tree

3 files changed

+31
-63
lines changed

3 files changed

+31
-63
lines changed

rayql-engine/src/error.rs

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -74,73 +74,12 @@ fn pretty_tokenization_error_message(
7474

7575
pub fn pretty_to_sql_error_message(error: ToSQLError, code: &str) -> String {
7676
match error {
77-
ToSQLError::UnknownReference {
78-
entity_name,
79-
line_number,
80-
column,
81-
} => {
82-
format!(
83-
"Unknown reference: {} at line {}, column {}",
84-
entity_name, line_number, column
85-
)
86-
}
87-
ToSQLError::EnumNotFound {
88-
enum_name,
89-
line_number,
90-
column,
91-
} => {
92-
format!(
93-
"Enum not found: {} at line {}, column {}",
94-
enum_name, line_number, column
95-
)
96-
}
97-
ToSQLError::ModelNotFound {
98-
model_name,
99-
line_number,
100-
column,
101-
} => {
102-
format!(
103-
"Model not found: {} at line {}, column {}",
104-
model_name, line_number, column
105-
)
106-
}
107-
ToSQLError::FieldNotFound {
108-
model_name,
109-
field_name,
110-
line_number,
111-
column,
112-
} => {
113-
format!(
114-
"Field '{}' does not exists on model '{}': at line {}, column {}",
115-
field_name, model_name, line_number, column
116-
)
117-
}
118-
ToSQLError::VariantNotFound {
119-
enum_name,
120-
variant,
121-
line_number,
122-
column,
123-
} => {
124-
format!(
125-
"Variant '{}' does not exists on enum '{}': at line {}, column {}",
126-
variant, enum_name, line_number, column
127-
)
128-
}
129-
ToSQLError::ConversionError {
130-
reason,
131-
line_number,
132-
column,
133-
} => {
134-
format!(
135-
"Conversion error: {} at line {}, column {}",
136-
reason, line_number, column
137-
)
138-
}
13977
ToSQLError::FunctionError {
14078
source,
14179
line_number,
14280
column,
14381
} => pretty_function_error_message(source, code, line_number, column),
82+
e => e.to_string(),
14483
}
14584
}
14685

rayql-engine/src/sql/error.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ pub enum ToSQLError {
77
line_number: usize,
88
column: usize,
99
},
10+
IncorrectReference {
11+
entity_name: String,
12+
variant_name: String,
13+
given_entity_name: String,
14+
line_number: usize,
15+
column: usize,
16+
},
1017
EnumNotFound {
1118
enum_name: String,
1219
line_number: usize,
@@ -55,6 +62,19 @@ impl fmt::Display for ToSQLError {
5562
entity_name
5663
)
5764
}
65+
ToSQLError::IncorrectReference {
66+
entity_name,
67+
variant_name,
68+
given_entity_name,
69+
line_number,
70+
column,
71+
} => {
72+
write!(
73+
f,
74+
"Variant '{}' of enum '{}' passed to a function expecting enum '{}' at line {}, column {}",
75+
variant_name, entity_name, given_entity_name, line_number, column
76+
)
77+
}
5878
ToSQLError::EnumNotFound {
5979
enum_name,
6080
line_number,

rayql-engine/src/sql/function.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use rayql::{
22
schema::{ArgumentValue, Arguments, FunctionCallContext, Schema},
33
sql::error::{FunctionError, ToSQLError},
4+
types::DataType,
45
};
56

67
use rayql::sql::fn_helpers::{check_value, get_single_argument};
@@ -37,7 +38,15 @@ single_arg_fn!(default(schema, argument, context) {
3738
Ok(value.to_sql())
3839
},
3940
ArgumentValue::FunctionCall(func) => func.to_sql(schema),
40-
ArgumentValue::Reference(reference) => reference.variant_reference_to_sql(schema),
41+
ArgumentValue::Reference(reference) => {
42+
if let DataType::Enum(ref enum_name) = context.property_data_type.data_type {
43+
if reference.entity.ne(enum_name) {
44+
return Err(ToSQLError::IncorrectReference { entity_name: reference.entity, variant_name: reference.property, given_entity_name: enum_name.clone(), line_number: reference.line_number, column: reference.column, });
45+
}
46+
}
47+
48+
reference.variant_reference_to_sql(schema)
49+
},
4150
)?;
4251

4352
Ok(format!("DEFAULT {}", value))

0 commit comments

Comments
 (0)