@@ -220,9 +220,47 @@ func (p *Parser) parseDropStatement() (ast.Statement, error) {
220220 return p .parseDropDatabaseScopedStatement ()
221221 }
222222
223+ if p .curTok .Type == TokenExternal {
224+ return p .parseDropExternalStatement ()
225+ }
226+
223227 return nil , fmt .Errorf ("unexpected token after DROP: %s" , p .curTok .Literal )
224228}
225229
230+ func (p * Parser ) parseDropExternalStatement () (ast.Statement , error ) {
231+ // Consume EXTERNAL
232+ p .nextToken ()
233+
234+ if p .curTok .Type == TokenLanguage {
235+ return p .parseDropExternalLanguageStatement ()
236+ }
237+
238+ return nil , fmt .Errorf ("unexpected token after EXTERNAL: %s" , p .curTok .Literal )
239+ }
240+
241+ func (p * Parser ) parseDropExternalLanguageStatement () (* ast.DropExternalLanguageStatement , error ) {
242+ // Consume LANGUAGE
243+ p .nextToken ()
244+
245+ stmt := & ast.DropExternalLanguageStatement {}
246+
247+ // Parse language name
248+ stmt .Name = p .parseIdentifier ()
249+
250+ // Check for AUTHORIZATION
251+ if p .curTok .Type == TokenAuthorization {
252+ p .nextToken ()
253+ stmt .Authorization = p .parseIdentifier ()
254+ }
255+
256+ // Skip optional semicolon
257+ if p .curTok .Type == TokenSemicolon {
258+ p .nextToken ()
259+ }
260+
261+ return stmt , nil
262+ }
263+
226264func (p * Parser ) parseDropDatabaseScopedStatement () (ast.Statement , error ) {
227265 // Consume DATABASE
228266 p .nextToken ()
@@ -4958,6 +4996,8 @@ func statementToJSON(stmt ast.Statement) jsonNode {
49584996 return revertStatementToJSON (s )
49594997 case * ast.DropCredentialStatement :
49604998 return dropCredentialStatementToJSON (s )
4999+ case * ast.DropExternalLanguageStatement :
5000+ return dropExternalLanguageStatementToJSON (s )
49615001 case * ast.CreateTableStatement :
49625002 return createTableStatementToJSON (s )
49635003 case * ast.GrantStatement :
@@ -5047,6 +5087,20 @@ func dropCredentialStatementToJSON(s *ast.DropCredentialStatement) jsonNode {
50475087 return node
50485088}
50495089
5090+ func dropExternalLanguageStatementToJSON (s * ast.DropExternalLanguageStatement ) jsonNode {
5091+ node := jsonNode {
5092+ "$type" : "DropExternalLanguageStatement" ,
5093+ "IsIfExists" : s .IsIfExists ,
5094+ }
5095+ if s .Name != nil {
5096+ node ["Name" ] = identifierToJSON (s .Name )
5097+ }
5098+ if s .Authorization != nil {
5099+ node ["Authorization" ] = identifierToJSON (s .Authorization )
5100+ }
5101+ return node
5102+ }
5103+
50505104func alterTableDropTableElementStatementToJSON (s * ast.AlterTableDropTableElementStatement ) jsonNode {
50515105 node := jsonNode {
50525106 "$type" : "AlterTableDropTableElementStatement" ,
0 commit comments