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

Method parseAlterConnectorStatement

pkg/sql/parser/alter.go:273–327  ·  view source on GitHub ↗

parseAlterConnectorStatement parses ALTER CONNECTOR statements

(stmt *ast.AlterStatement)

Source from the content-addressed store, hash-verified

271
272// parseAlterConnectorStatement parses ALTER CONNECTOR statements
273func (p *Parser) parseAlterConnectorStatement(stmt *ast.AlterStatement) (*ast.AlterStatement, error) {
274 stmt.Name = p.parseIdentAsString()
275 if !p.matchType(models.TokenTypeSet) {
276 return nil, p.expectedError("SET")
277 }
278
279 op := &ast.AlterConnectorOperation{}
280
281 switch {
282 case p.matchType(models.TokenTypeDcproperties):
283 if !p.matchType(models.TokenTypeLParen) {
284 return nil, p.expectedError("(")
285 }
286 op.Properties = make(map[string]string)
287 for {
288 // DCPROPERTIES keys are arbitrary user-defined names that may
289 // coincide with SQL keywords (e.g. "key", "url"). Accept any
290 // word-like token as a bare identifier here.
291 key := p.parseBareWordAsString()
292 if !p.matchType(models.TokenTypeEq) {
293 return nil, p.expectedError("=")
294 }
295 value := p.parseStringLiteral()
296 op.Properties[key] = value
297
298 if !p.matchType(models.TokenTypeComma) {
299 break
300 }
301 }
302 if !p.matchType(models.TokenTypeRParen) {
303 return nil, p.expectedError(")")
304 }
305
306 case p.matchType(models.TokenTypeUrl):
307 op.URL = p.parseStringLiteral()
308
309 case p.matchType(models.TokenTypeOwner):
310 owner := &ast.AlterConnectorOwner{}
311 if p.matchType(models.TokenTypeUser) {
312 owner.IsUser = true
313 } else if p.matchType(models.TokenTypeRole) {
314 owner.IsUser = false
315 } else {
316 return nil, p.expectedError("USER or ROLE")
317 }
318 owner.Name = p.parseIdentAsString()
319 op.Owner = owner
320
321 default:
322 return nil, p.expectedError("DCPROPERTIES, URL, or OWNER")
323 }
324
325 stmt.Operation = op
326 return stmt, nil
327}
328
329// parseRoleOption parses a role option
330func (p *Parser) parseRoleOption() (*ast.RoleOption, error) {

Callers 1

parseAlterStatementMethod · 0.95

Calls 5

parseIdentAsStringMethod · 0.95
matchTypeMethod · 0.95
expectedErrorMethod · 0.95
parseBareWordAsStringMethod · 0.95
parseStringLiteralMethod · 0.95

Tested by

no test coverage detected