sql_lexer icon indicating copy to clipboard operation
sql_lexer copied to clipboard

NULL and number literals in schemas converted to ?

Open phrohdoh opened this issue 9 years ago • 3 comments

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);
    }

phrohdoh avatar Oct 23 '16 14:10 phrohdoh

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.

phrohdoh avatar Oct 27 '16 02:10 phrohdoh

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.

phrohdoh avatar Oct 27 '16 03:10 phrohdoh

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.

thijsc avatar Oct 27 '16 08:10 thijsc