{
  "name": "SQL",
  "rules": {
    "source_file": {
      "type": "REPEAT",
      "content": {
        "type": "SYMBOL",
        "name": "_statement"
      }
    },
    "_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "select_statement"
            },
            {
              "type": "SYMBOL",
              "name": "create_type_statement"
            },
            {
              "type": "SYMBOL",
              "name": "create_domain_statement"
            },
            {
              "type": "SYMBOL",
              "name": "create_index_statement"
            },
            {
              "type": "SYMBOL",
              "name": "create_table_statement"
            },
            {
              "type": "SYMBOL",
              "name": "create_function_statement"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ";"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "create_function_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][rR][eE][aA][tT][eE][  ][fF][uU][nN][cC][tT][iI][oO][nN]"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "create_function_parameters"
        },
        {
          "type": "PATTERN",
          "value": "[rR][eE][tT][uU][rR][nN][sS]"
        },
        {
          "type": "SYMBOL",
          "name": "_create_function_return_type"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_function_language"
              },
              {
                "type": "SYMBOL",
                "name": "_function_body"
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_function_optimizer_hint"
                },
                "named": true,
                "value": "optimizer_hint"
              }
            ]
          }
        }
      ]
    },
    "_function_optimizer_hint": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[vV][oO][lL][aA][tT][iI][lL][eE]"
        },
        {
          "type": "PATTERN",
          "value": "[iI][mM][mM][uU][tT][aA][bB][lL][eE]"
        },
        {
          "type": "PATTERN",
          "value": "[sS][tT][aA][bB][lL][eE]"
        }
      ]
    },
    "_function_language": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[lL][aA][nN][gG][uU][aA][gG][eE]"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          },
          "named": true,
          "value": "language"
        }
      ]
    },
    "_create_function_return_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "setof"
        },
        {
          "type": "SYMBOL",
          "name": "constrained_type"
        }
      ]
    },
    "setof": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[sS][eE][tT][oO][fF]"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type"
            },
            {
              "type": "SYMBOL",
              "name": "constrained_type"
            }
          ]
        }
      ]
    },
    "constrained_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "PATTERN",
                "value": "[nN][oO][tT][  ][nN][uU][lL][lL]"
              },
              "named": true,
              "value": "not_null"
            }
          ]
        }
      ]
    },
    "create_function_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type"
            },
            {
              "type": "SYMBOL",
              "name": "constrained_type"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expression"
                  },
                  "named": true,
                  "value": "default"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "create_function_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "create_function_parameter"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "create_function_parameter"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_function_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[aA][sS]"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "string"
          },
          "named": true,
          "value": "function_body"
        }
      ]
    },
    "create_domain_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][rR][eE][aA][tT][eE][  ][dD][oO][mM][aA][iI][nN]"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "PATTERN",
                  "value": "[aA][sS]"
                },
                {
                  "type": "SYMBOL",
                  "name": "_type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "null_constraint"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "check_constraint"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "create_type_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][rR][eE][aA][tT][eE][  ][tT][yY][pP][eE]"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "PATTERN",
          "value": "[aA][sS]"
        },
        {
          "type": "SYMBOL",
          "name": "parameters"
        }
      ]
    },
    "create_index_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][rR][eE][aA][tT][eE]"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "unique_constraint"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "PATTERN",
          "value": "[iI][nN][dD][eE][xX]"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "PATTERN",
          "value": "[oO][nN]"
        },
        {
          "type": "FIELD",
          "name": "table",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "using_clause"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "index_table_parameters"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "where_clause"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "create_table_column_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "column_default"
              },
              {
                "type": "SYMBOL",
                "name": "primary_key_constraint"
              },
              {
                "type": "SYMBOL",
                "name": "check_constraint"
              },
              {
                "type": "SYMBOL",
                "name": "references_constraint"
              },
              {
                "type": "SYMBOL",
                "name": "unique_constraint"
              },
              {
                "type": "SYMBOL",
                "name": "null_constraint"
              },
              {
                "type": "SYMBOL",
                "name": "named_constraint"
              }
            ]
          }
        }
      ]
    },
    "named_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "CONSTRAINT"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        }
      ]
    },
    "column_default": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[dD][eE][fF][aA][uU][lL][tT]"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_parenthesized_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "string"
                },
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                },
                {
                  "type": "SYMBOL",
                  "name": "function_call"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "type_cast"
            }
          ]
        }
      ]
    },
    "create_table_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "create_table_column_parameter"
                },
                {
                  "type": "SYMBOL",
                  "name": "_table_constraint"
                }
              ]
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "create_table_column_parameter"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_table_constraint"
                      }
                    ]
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_table_constraint": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "table_constraint_foreign_key"
          },
          "named": true,
          "value": "foreign_key"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "table_constraint_unique"
          },
          "named": true,
          "value": "unique"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "table_constraint_primary_key"
          },
          "named": true,
          "value": "primary_key"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "table_constraint_check"
          },
          "named": true,
          "value": "check"
        }
      ]
    },
    "table_constraint_check": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][hH][eE][cC][kK]"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "table_constraint_foreign_key": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[fF][oO][rR][eE][iI][gG][nN][  ][kK][eE][yY]"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "SYMBOL",
          "name": "references_constraint"
        }
      ]
    },
    "table_constraint_unique": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[uU][nN][iI][qQ][uU][eE]"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "table_constraint_primary_key": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[pP][rR][iI][mM][aA][rR][yY][  ][kK][eE][yY]"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "primary_key_constraint": {
      "type": "PATTERN",
      "value": "[pP][rR][iI][mM][aA][rR][yY][  ][kK][eE][yY]"
    },
    "create_table_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][rR][eE][aA][tT][eE][  ][tT][aA][bB][lL][eE]"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "create_table_parameters"
        }
      ]
    },
    "using_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[uU][sS][iI][nN][gG]"
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        }
      ]
    },
    "index_table_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "ordered_expression"
                }
              ]
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_expression"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "ordered_expression"
                      }
                    ]
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "select_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[sS][eE][lL][eE][cC][tT]"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "select_clause"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "where_clause"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "in_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[nN][oO][tT]"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "PATTERN",
            "value": "[iI][nN]"
          },
          {
            "type": "SYMBOL",
            "name": "tuple"
          }
        ]
      }
    },
    "tuple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "elements",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_expression"
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "select_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        }
      ]
    },
    "references_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[rR][eE][fF][eE][rR][eE][nN][cC][eE][sS]"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "identifier"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "identifier"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "on_update_action"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "on_delete_action"
                    }
                  ]
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "on_delete_action"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "on_update_action"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "on_update_action": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[oO][nN][  ][uU][pP][dD][aA][tT][eE]"
        },
        {
          "type": "FIELD",
          "name": "action",
          "content": {
            "type": "SYMBOL",
            "name": "_constraint_action"
          }
        }
      ]
    },
    "on_delete_action": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[oO][nN][  ][dD][eE][lL][eE][tT][eE]"
        },
        {
          "type": "FIELD",
          "name": "action",
          "content": {
            "type": "SYMBOL",
            "name": "_constraint_action"
          }
        }
      ]
    },
    "_constraint_action": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PATTERN",
          "value": "[rR][eE][sS][tT][rR][iI][cC][tT]"
        },
        {
          "type": "PATTERN",
          "value": "[cC][aA][sS][cC][aA][dD][eE]"
        },
        {
          "type": "PATTERN",
          "value": "[sS][eE][tT][  ][nN][uU][lL][lL]"
        }
      ]
    },
    "unique_constraint": {
      "type": "PATTERN",
      "value": "[uU][nN][iI][qQ][uU][eE]"
    },
    "null_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "PATTERN",
              "value": "[nN][oO][tT]"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "NULL"
        }
      ]
    },
    "check_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[cC][hH][eE][cC][kK]"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "null_constraint"
            },
            {
              "type": "SYMBOL",
              "name": "check_constraint"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "check_constraint"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "parameter"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "parameter"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "function_call": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "function",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ","
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_expression"
                        }
                      ]
                    }
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "where_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "PATTERN",
          "value": "[wW][hH][eE][rR][eE]"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "comparison_operator": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "FIELD",
            "name": "operator",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "<"
                },
                {
                  "type": "STRING",
                  "value": "<="
                },
                {
                  "type": "STRING",
                  "value": "<>"
                },
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "STRING",
                  "value": ">"
                },
                {
                  "type": "STRING",
                  "value": ">="
                }
              ]
            }
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          }
        ]
      }
    },
    "_parenthesized_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "is_expression": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "PATTERN",
            "value": "[iI][sS]"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[nN][oO][tT]"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "NULL"
              },
              {
                "type": "SYMBOL",
                "name": "TRUE"
              },
              {
                "type": "SYMBOL",
                "name": "FALSE"
              },
              {
                "type": "SYMBOL",
                "name": "distinct_from"
              }
            ]
          }
        ]
      }
    },
    "distinct_from": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PATTERN",
            "value": "[dD][iI][sS][tT][iI][nN][cC][tT][  ][fF][rR][oO][mM]"
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          }
        ]
      }
    },
    "boolean_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "PATTERN",
                "value": "[aA][nN][dD]"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "PATTERN",
                "value": "[oO][rR]"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        }
      ]
    },
    "NULL": {
      "type": "PATTERN",
      "value": "[nN][uU][lL][lL]"
    },
    "TRUE": {
      "type": "PATTERN",
      "value": "[tT][rR][uU][eE]"
    },
    "FALSE": {
      "type": "PATTERN",
      "value": "[fF][aA][lL][sS][eE]"
    },
    "number": {
      "type": "PATTERN",
      "value": "\\d+"
    },
    "identifier": {
      "type": "PATTERN",
      "value": "[a-zA-Z0-9_]+[.a-zA-Z0-9_]*"
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "'"
            },
            {
              "type": "FIELD",
              "name": "content",
              "content": {
                "type": "PATTERN",
                "value": "[^']*"
              }
            },
            {
              "type": "STRING",
              "value": "'"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "$$"
            },
            {
              "type": "FIELD",
              "name": "content",
              "content": {
                "type": "PATTERN",
                "value": "(\\$?[^$]+)+"
              }
            },
            {
              "type": "STRING",
              "value": "$$"
            }
          ]
        }
      ]
    },
    "field_access": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "->>"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        }
      ]
    },
    "ordered_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "FIELD",
          "name": "order",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "PATTERN",
                "value": "[aA][sS][cC]"
              },
              {
                "type": "PATTERN",
                "value": "[dD][eE][sS][cC]"
              }
            ]
          }
        }
      ]
    },
    "_type_alias": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "identifier"
      },
      "named": true,
      "value": "type"
    },
    "array_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type_alias"
        },
        {
          "type": "SYMBOL",
          "name": "array_type"
        }
      ]
    },
    "type_cast": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_parenthesized_expression"
            },
            {
              "type": "SYMBOL",
              "name": "string"
            },
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "SYMBOL",
              "name": "function_call"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "::"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "--"
              },
              {
                "type": "PATTERN",
                "value": ".*"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "/*"
              },
              {
                "type": "PATTERN",
                "value": "[^*]*\\*+([^/*][^*]*\\*+)*"
              },
              {
                "type": "STRING",
                "value": "/"
              }
            ]
          }
        ]
      }
    },
    "binary_expression": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "STRING",
                "value": "~"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "STRING",
                "value": "+"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        ]
      }
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "function_call"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "field_access"
        },
        {
          "type": "SYMBOL",
          "name": "TRUE"
        },
        {
          "type": "SYMBOL",
          "name": "FALSE"
        },
        {
          "type": "SYMBOL",
          "name": "NULL"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "comparison_operator"
        },
        {
          "type": "SYMBOL",
          "name": "in_expression"
        },
        {
          "type": "SYMBOL",
          "name": "is_expression"
        },
        {
          "type": "SYMBOL",
          "name": "boolean_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_parenthesized_expression"
        },
        {
          "type": "SYMBOL",
          "name": "type_cast"
        },
        {
          "type": "SYMBOL",
          "name": "binary_expression"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "[\\s\\f\\uFEFF\\u2060\\u200B]|\\\\\\r?\\n"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}

