parseReturningColumns parses the columns in a RETURNING clause Supports: column names, *, qualified names (table.column), expressions
()
| 232 | // parseReturningColumns parses the columns in a RETURNING clause |
| 233 | // Supports: column names, *, qualified names (table.column), expressions |
| 234 | func (p *Parser) parseReturningColumns() ([]ast.Expression, error) { |
| 235 | var columns []ast.Expression |
| 236 | |
| 237 | for { |
| 238 | // Check for * (return all columns) |
| 239 | if p.isType(models.TokenTypeMul) { |
| 240 | columns = append(columns, &ast.Identifier{Name: "*"}) |
| 241 | p.advance() |
| 242 | } else { |
| 243 | // Parse expression (can be column name, qualified name, or expression) |
| 244 | expr, err := p.parseExpression() |
| 245 | if err != nil { |
| 246 | return nil, fmt.Errorf("failed to parse RETURNING column: %w", err) |
| 247 | } |
| 248 | columns = append(columns, expr) |
| 249 | } |
| 250 | |
| 251 | // Check for comma to continue parsing more columns |
| 252 | if !p.isType(models.TokenTypeComma) { |
| 253 | break |
| 254 | } |
| 255 | p.advance() // Consume comma |
| 256 | } |
| 257 | |
| 258 | return columns, nil |
| 259 | } |
| 260 | |
| 261 | // parseOnConflictClause parses the ON CONFLICT clause (PostgreSQL UPSERT) |
| 262 | // Syntax: ON CONFLICT [(columns)] | ON CONSTRAINT name DO NOTHING | DO UPDATE SET ... |
no test coverage detected