name: MySqlGrammar
class_comment: null
dependencies:
- name: Builder
  type: class
  source: Illuminate\Database\Query\Builder
- name: JoinLateralClause
  type: class
  source: Illuminate\Database\Query\JoinLateralClause
- name: Str
  type: class
  source: Illuminate\Support\Str
properties:
- name: operators
  visibility: protected
  comment: '# * The grammar specific operators.

    # *

    # * @var string[]'
methods:
- name: whereNull
  visibility: protected
  parameters:
  - name: query
  - name: where
  comment: "# * The grammar specific operators.\n# *\n# * @var string[]\n# */\n# protected\
    \ $operators = ['sounds like'];\n# \n# /**\n# * Add a \"where null\" clause to\
    \ the query.\n# *\n# * @param  \\Illuminate\\Database\\Query\\Builder  $query\n\
    # * @param  array  $where\n# * @return string"
- name: whereNotNull
  visibility: protected
  parameters:
  - name: query
  - name: where
  comment: '# * Add a "where not null" clause to the query.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $where

    # * @return string'
- name: whereFullText
  visibility: public
  parameters:
  - name: query
  - name: where
  comment: '# * Compile a "where fulltext" clause.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $where

    # * @return string'
- name: compileIndexHint
  visibility: protected
  parameters:
  - name: query
  - name: indexHint
  comment: '# * Compile the index hints for the query.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  \Illuminate\Database\Query\IndexHint  $indexHint

    # * @return string'
- name: compileGroupLimit
  visibility: protected
  parameters:
  - name: query
  comment: '# * Compile a group limit clause.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @return string'
- name: useLegacyGroupLimit
  visibility: public
  parameters:
  - name: query
  comment: '# * Determine whether to use a legacy group limit clause for MySQL < 8.0.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @return bool'
- name: compileLegacyGroupLimit
  visibility: protected
  parameters:
  - name: query
  comment: '# * Compile a group limit clause for MySQL < 8.0.

    # *

    # * Derived from https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @return string'
- name: compileInsertOrIgnore
  visibility: public
  parameters:
  - name: query
  - name: values
  comment: '# * Compile an insert ignore statement into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $values

    # * @return string'
- name: compileInsertOrIgnoreUsing
  visibility: public
  parameters:
  - name: query
  - name: columns
  - name: sql
  comment: '# * Compile an insert ignore statement using a subquery into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $columns

    # * @param  string  $sql

    # * @return string'
- name: compileJsonContains
  visibility: protected
  parameters:
  - name: column
  - name: value
  comment: '# * Compile a "JSON contains" statement into SQL.

    # *

    # * @param  string  $column

    # * @param  string  $value

    # * @return string'
- name: compileJsonOverlaps
  visibility: protected
  parameters:
  - name: column
  - name: value
  comment: '# * Compile a "JSON overlaps" statement into SQL.

    # *

    # * @param  string  $column

    # * @param  string  $value

    # * @return string'
- name: compileJsonContainsKey
  visibility: protected
  parameters:
  - name: column
  comment: '# * Compile a "JSON contains key" statement into SQL.

    # *

    # * @param  string  $column

    # * @return string'
- name: compileJsonLength
  visibility: protected
  parameters:
  - name: column
  - name: operator
  - name: value
  comment: '# * Compile a "JSON length" statement into SQL.

    # *

    # * @param  string  $column

    # * @param  string  $operator

    # * @param  string  $value

    # * @return string'
- name: compileJsonValueCast
  visibility: public
  parameters:
  - name: value
  comment: '# * Compile a "JSON value cast" statement into SQL.

    # *

    # * @param  string  $value

    # * @return string'
- name: compileRandom
  visibility: public
  parameters:
  - name: seed
  comment: '# * Compile the random statement into SQL.

    # *

    # * @param  string|int  $seed

    # * @return string'
- name: compileLock
  visibility: protected
  parameters:
  - name: query
  - name: value
  comment: '# * Compile the lock into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  bool|string  $value

    # * @return string'
- name: compileInsert
  visibility: public
  parameters:
  - name: query
  - name: values
  comment: '# * Compile an insert statement into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $values

    # * @return string'
- name: compileUpdateColumns
  visibility: protected
  parameters:
  - name: query
  - name: values
  comment: '# * Compile the columns for an update statement.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $values

    # * @return string'
- name: compileUpsert
  visibility: public
  parameters:
  - name: query
  - name: values
  - name: uniqueBy
  - name: update
  comment: '# * Compile an "upsert" statement into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  array  $values

    # * @param  array  $uniqueBy

    # * @param  array  $update

    # * @return string'
- name: compileJoinLateral
  visibility: public
  parameters:
  - name: join
  - name: expression
  comment: '# * Compile a "lateral join" clause.

    # *

    # * @param  \Illuminate\Database\Query\JoinLateralClause  $join

    # * @param  string  $expression

    # * @return string'
- name: compileJsonUpdateColumn
  visibility: protected
  parameters:
  - name: key
  - name: value
  comment: '# * Prepare a JSON column being updated using the JSON_SET function.

    # *

    # * @param  string  $key

    # * @param  mixed  $value

    # * @return string'
- name: compileUpdateWithoutJoins
  visibility: protected
  parameters:
  - name: query
  - name: table
  - name: columns
  - name: where
  comment: '# * Compile an update statement without joins into SQL.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  string  $table

    # * @param  string  $columns

    # * @param  string  $where

    # * @return string'
- name: prepareBindingsForUpdate
  visibility: public
  parameters:
  - name: bindings
  - name: values
  comment: '# * Prepare the bindings for an update statement.

    # *

    # * Booleans, integers, and doubles are inserted into JSON updates as raw values.

    # *

    # * @param  array  $bindings

    # * @param  array  $values

    # * @return array'
- name: compileDeleteWithoutJoins
  visibility: protected
  parameters:
  - name: query
  - name: table
  - name: where
  comment: '# * Compile a delete query that does not use joins.

    # *

    # * @param  \Illuminate\Database\Query\Builder  $query

    # * @param  string  $table

    # * @param  string  $where

    # * @return string'
- name: wrapValue
  visibility: protected
  parameters:
  - name: value
  comment: '# * Wrap a single string in keyword identifiers.

    # *

    # * @param  string  $value

    # * @return string'
- name: wrapJsonSelector
  visibility: protected
  parameters:
  - name: value
  comment: '# * Wrap the given JSON selector.

    # *

    # * @param  string  $value

    # * @return string'
- name: wrapJsonBooleanSelector
  visibility: protected
  parameters:
  - name: value
  comment: '# * Wrap the given JSON selector for boolean values.

    # *

    # * @param  string  $value

    # * @return string'
traits:
- Illuminate\Database\Query\Builder
- Illuminate\Database\Query\JoinLateralClause
- Illuminate\Support\Str
interfaces: []