================================================================================
Project
================================================================================
Project project_name {
  database_type: 'PostgreSQL'
  Note: 'Description of the project' // Comment thu 3
}
--------------------------------------------------------------------------------

(source
  (definition
    (keyword)
    (identifier)
    (block
      (note
        (note_start)
          (string))
      (note
        (note_start)
          (string))
	(comment))))

================================================================================
Table simple
================================================================================
Table "test.abc" {
  // Comment thu 2
  "id" int(10) [pk, not null, increment]
  "lucky_number" int(10) [ pk, unique, default: 123, note: 'Number' ]
  "private_key" varchar(255) [not null, note: 'to include unit number']
  "open_at" datetime [not null]
  "created_at" timestamp [default: NULL]
  "updated_at" timestamp [default: NULL]
  "deleted_at" timestamp [default: NULL]
}
--------------------------------------------------------------------------------

(source
  (definition
    (keyword)
    (identifier)
    (block
      (comment)
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)
          (setting_kind)
          (setting_kind)))
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)
          (setting_kind)
          (default
            (default_start)
            (value
              (number)))
          (note
            (note_start)
            (string))))
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)
          (note
            (note_start)
            (string))))
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)))
      (item
        (identifier)
        (type)
        (setting
          (default
            (default_start)
            (value))))
      (item
        (identifier)
        (type)
        (setting
          (default
            (default_start)
            (value))))
      (item
        (identifier)
        (type)
        (setting
          (default
            (default_start)
            (value)))))))

================================================================================
Table alias
================================================================================
Table core.user as U { /* Day la comment
  cha can co gi het
*/
  Note: '''
    This is a block string
    This string can spans over multiple lines.
    `now()`
  '''
}
--------------------------------------------------------------------------------

(source
  (definition
    (keyword)
    (identifier)
    (identifier)
    (block
      (comment)
      (note
        (note_start)
          (string)))))

================================================================================
TableGroup
================================================================================
TableGroup test {
  merchants
  /* mot vai comment khac */ countries
}
--------------------------------------------------------------------------------

(source
  (definition
    (keyword)
    (identifier)
    (block
      (item
        (identifier))
      (comment)
      (item
        (identifier)))))


================================================================================
Index
================================================================================
Table test {
  id int(10) [pk, not null, increment]
  assignee_id int(10) [not null]

  Indexes {
    assignee_id [name: "index_assignee_id"]
  }
}
--------------------------------------------------------------------------------

(source
  (definition
    (keyword)
    (identifier)
    (block
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)
          (setting_kind)
          (setting_kind)))
      (item
        (identifier)
        (type)
        (setting
          (setting_kind)))
      (index_definition
        (indexes)
        (index_block
          (index
            (identifier)
            (setting
                  (name
                    (name_start)
                    (value
                      (identifier))))))))))
