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

Method parseArrayConstructor

pkg/sql/parser/expressions_complex.go:281–348  ·  view source on GitHub ↗

parseArrayConstructor parses PostgreSQL ARRAY constructor syntax. Supports both ARRAY[...] (square bracket) and ARRAY(...) (subquery) forms. Examples: ARRAY[1, 2, 3] - Array literal with square brackets ARRAY['a', 'b', 'c'] - String array ARRAY[x, y, z]

()

Source from the content-addressed store, hash-verified

279// ARRAY[x, y, z] - Array from expressions
280// ARRAY(SELECT id FROM users) - Array from subquery
281func (p *Parser) parseArrayConstructor() (*ast.ArrayConstructorExpression, error) {
282 p.advance() // Consume ARRAY
283
284 arrayExpr := ast.GetArrayConstructor()
285
286 // Check for square bracket syntax: ARRAY[...]
287 if p.isType(models.TokenTypeLBracket) {
288 p.advance() // Consume [
289
290 // Parse comma-separated list of expressions (can be empty)
291 if !p.isType(models.TokenTypeRBracket) {
292 for {
293 elem, err := p.parseExpression()
294 if err != nil {
295 return nil, err
296 }
297 arrayExpr.Elements = append(arrayExpr.Elements, elem)
298
299 if p.isType(models.TokenTypeComma) {
300 p.advance() // Consume comma
301 } else if p.isType(models.TokenTypeRBracket) {
302 break
303 } else {
304 return nil, p.expectedError(", or ]")
305 }
306 }
307 }
308
309 // Expect closing bracket
310 if !p.isType(models.TokenTypeRBracket) {
311 return nil, p.expectedError("]")
312 }
313 p.advance() // Consume ]
314
315 return arrayExpr, nil
316 }
317
318 // Check for parenthesis syntax: ARRAY(SELECT ...)
319 if p.isType(models.TokenTypeLParen) {
320 p.advance() // Consume (
321
322 // Expect a subquery
323 if !p.isType(models.TokenTypeSelect) && !p.isType(models.TokenTypeWith) {
324 return nil, p.expectedError("SELECT in ARRAY subquery")
325 }
326
327 subquery, err := p.parseSubquery()
328 if err != nil {
329 return nil, err
330 }
331
332 selectStmt, ok := subquery.(*ast.SelectStatement)
333 if !ok {
334 return nil, p.expectedError("SELECT statement in ARRAY subquery")
335 }
336 arrayExpr.Subquery = selectStmt
337
338 // Expect closing parenthesis

Callers 1

Calls 6

advanceMethod · 0.95
isTypeMethod · 0.95
parseExpressionMethod · 0.95
expectedErrorMethod · 0.95
parseSubqueryMethod · 0.95
GetArrayConstructorFunction · 0.92

Tested by

no test coverage detected