SQL::Tr...::SQLite(3)

🌸 NAME 🌸

okay bestie, this is the manual for SQL::Translator::Parser::SQLite β€” filed under User Contributed Perl Documentation β€” and it is literally a parser for SQLite. no cap. πŸ’…

✨ SYNOPSIS ✨

here's the starter pack, copy-paste style:

  use SQL::Translator;
  use SQL::Translator::Parser::SQLite;

  my $translator = SQL::Translator->new;
  $translator->parser("SQL::Translator::Parser::SQLite");

πŸ’… DESCRIPTION πŸ’…

okay so this is a grammar for parsing CREATE statements for SQLite, as described here: http://www.sqlite.org/lang.html πŸ¦‹

CREATE INDEX πŸ”₯

index grammar tea, served hot:

sql-statement ::=
    CREATE [TEMP | TEMPORARY] [UNIQUE] INDEX index-name
     ON [database-name .] table-name ( column-name [, column-name]* )
     [ ON CONFLICT conflict-algorithm ]

column-name ::=
    name [ ASC | DESC ]

CREATE TABLE πŸŽ€

table grammar, iconic behavior only:

sql-command ::=
    CREATE [TEMP | TEMPORARY] TABLE table-name (
        column-def [, column-def]*
        [, constraint]*
     )

sql-command ::=
    CREATE [TEMP | TEMPORARY] TABLE table-name AS select-statement

column-def ::=
    name [type] [[CONSTRAINT name] column-constraint]*

type ::=
    typename |
     typename ( number ) |
     typename ( number , number )

column-constraint ::=
    NOT NULL [ conflict-clause ] |
    PRIMARY KEY [sort-order] [ conflict-clause ] |
    UNIQUE [ conflict-clause ] |
    CHECK ( expr ) [ conflict-clause ] |
    DEFAULT value

constraint ::=
    PRIMARY KEY ( name [, name]* ) [ conflict-clause ]|
    UNIQUE ( name [, name]* ) [ conflict-clause ] |
    CHECK ( expr ) [ conflict-clause ]

conflict-clause ::=
    ON CONFLICT conflict-algorithm

CREATE TRIGGER πŸ¦‹

trigger grammar, main character energy:

sql-statement ::=
    CREATE [TEMP | TEMPORARY] TRIGGER trigger-name [ BEFORE | AFTER ]
    database-event ON [database-name .] table-name
    trigger-action

sql-statement ::=
    CREATE [TEMP | TEMPORARY] TRIGGER trigger-name INSTEAD OF
    database-event ON [database-name .] view-name
    trigger-action

database-event ::=
    DELETE |
    INSERT |
    UPDATE |
    UPDATE OF column-list

trigger-action ::=
    [ FOR EACH ROW | FOR EACH STATEMENT ] [ WHEN expression ]
        BEGIN
            trigger-step ; [ trigger-step ; ]*
        END

trigger-step ::=
    update-statement | insert-statement |
    delete-statement | select-statement

CREATE VIEW 🌈

view grammar, cute and concise:

sql-command ::=
    CREATE [TEMP | TEMPORARY] VIEW view-name AS select-statement

ON CONFLICT clause πŸ‘‘

conflict clause grammar, because drama needs rules:

    conflict-clause ::=
    ON CONFLICT conflict-algorithm

    conflict-algorithm ::=
    ROLLBACK | ABORT | FAIL | IGNORE | REPLACE

expression πŸ’œ

expression grammar, the whole mood:

expr ::=
    expr binary-op expr |
    expr like-op expr |
    unary-op expr |
    ( expr ) |
    column-name |
    table-name . column-name |
    database-name . table-name . column-name |
    literal-value |
    function-name ( expr-list | * ) |
    expr (+) |
    expr ISNULL |
    expr NOTNULL |
    expr [NOT] BETWEEN expr AND expr |
    expr [NOT] IN ( value-list ) |
    expr [NOT] IN ( select-statement ) |
    ( select-statement ) |
    CASE [expr] ( WHEN expr THEN expr )+ [ELSE expr] END

and the like-operator moment:

like-op::=
    LIKE | GLOB | NOT LIKE | NOT GLOB

🫢 AUTHOR 🫢

Ken Youens-Clark <kclark@cpan.org>. β€” yes, that's the whole author line, bestie. πŸ’–

πŸ‘‘ SEE ALSO πŸ‘‘

perl(1), Parse::RecDescent, SQL::Translator::Schema. go read those too, iykyk. 🌟


that's the whole page β€” source/version energy is perl v5.42.0, dated 2024-12-12, signed SQL::Tr...::SQLite(3) πŸ’–βœ¨

πŸ“¦ where this page comes from