NULL and number literals in schemas converted to ?
This does not seem correct to me.
Neither 50 or NULL are placeholder values.
CREATE TABLE puf2017 (
Id int IDENTITY,
DrugTier nvarchar(max) NOT NULL,
PriorAuthorization bit NOT NULL,
QuantityLimit bit NOT NULL,
StepTherapy bit NOT NULL,
StandardComponentId nvarchar(50) NOT NULL,
BusinessYear int NOT NULL
)
GO
CREATE TABLE puf2017 (
Id int IDENTITY,
DrugTier nvarchar(max) NOT ?,
PriorAuthorization bit NOT ?,
QuantityLimit bit NOT ?,
StepTherapy bit NOT ?,
StandardComponentId nvarchar(?) NOT ?,
BusinessYear int NOT ?
)
GO
These tests pass so the sanitation is definitely to blame, not lexing:
#[test]
fn test_not_null() {
let sql = "NOT NULL";
let written = helpers::lex_and_write(sql.to_string());
assert_eq!(written, sql);
}
#[test]
fn test_std_cmpnt_id() {
let sql = "StandardComponentId nvarchar(50) NOT NULL";
let written = helpers::lex_and_write(sql.to_string());
assert_eq!(written, sql);
}
The issue is that schema was, apparently, never considered for sanitation input so there are no checks for table creation.
This means that NOT is always seen as a comparison and not a condition.
Upon further investigation this is more clear as Create and Table are not keywords.
I may give this a shot in my freetime over at my fork, if anyone is interested.
Indeed. We didn't need schemas for our use case of sanitizing queries that commonly occur in ActiveRecord. I would like to support this though. I'll add support for this, but have to see when I can find some time :-).
If you'd like to take a stab, that'd be great too.