MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / parseMultiplicativeExpression

Method parseMultiplicativeExpression

pkg/sql/parser/expressions.go:176–206  ·  view source on GitHub ↗

parseMultiplicativeExpression parses expressions with *, /, and % operators

()

Source from the content-addressed store, hash-verified

174
175// parseMultiplicativeExpression parses expressions with *, /, and % operators
176func (p *Parser) parseMultiplicativeExpression() (ast.Expression, error) {
177 // Parse the left side using JSON operator expression (higher precedence)
178 left, err := p.parseJSONExpression()
179 if err != nil {
180 return nil, err
181 }
182
183 // Handle *, /, and % operators (left-associative)
184 // Note: TokenTypeAsterisk is used for both * (SELECT) and multiplication
185 // We check context: after an expression, asterisk means multiplication
186 for p.isType(models.TokenTypeAsterisk) || p.isType(models.TokenTypeMul) ||
187 p.isType(models.TokenTypeDiv) || p.isType(models.TokenTypeMod) {
188 opPos := p.currentLocation()
189 operator := p.currentToken.Token.Value
190 p.advance() // Consume operator
191
192 right, err := p.parseJSONExpression()
193 if err != nil {
194 return nil, err
195 }
196
197 left = &ast.BinaryExpression{
198 Left: left,
199 Operator: operator,
200 Right: right,
201 Pos: opPos,
202 }
203 }
204
205 return left, nil
206}
207
208// parseJSONExpression parses JSON/JSONB operators (PostgreSQL) and type casting
209// Handles: ->, ->>, #>, #>>, @>, <@, ?, ?|, ?&, #-, ::

Callers 1

Calls 4

parseJSONExpressionMethod · 0.95
isTypeMethod · 0.95
currentLocationMethod · 0.95
advanceMethod · 0.95

Tested by

no test coverage detected