Added IF EXISTS for DROP DATABASE command, #4659
parent
78e6979be5
commit
2235dcec6b
|
@ -30,6 +30,7 @@
|
|||
- [#4648](https://github.com/influxdb/influxdb/pull/4648): UDP Client (v2 client)
|
||||
- [#4690](https://github.com/influxdb/influxdb/pull/4690): SHOW SHARDS now includes database and policy. Thanks @pires
|
||||
- [#4676](https://github.com/influxdb/influxdb/pull/4676): UDP service listener performance enhancements
|
||||
- [#4659](https://github.com/influxdb/influxdb/pull/4659): Support IF EXISTS for DROP DATABASE
|
||||
|
||||
### Bugfixes
|
||||
- [#4643](https://github.com/influxdb/influxdb/pull/4643): Fix panic during backup restoration. Thanks @oiooj
|
||||
|
|
|
@ -78,6 +78,16 @@ func TestServer_DatabaseCommands(t *testing.T) {
|
|||
command: `DROP DATABASE db1`,
|
||||
exp: `{"results":[{}]}`,
|
||||
},
|
||||
&Query{
|
||||
name: "drop database should error if it does not exists",
|
||||
command: `DROP DATABASE db1`,
|
||||
exp: `{"results":[{"error":"database not found: db1"}]}`,
|
||||
},
|
||||
&Query{
|
||||
name: "drop database should not error with non-existing database db1 WITH IF EXISTS",
|
||||
command: `DROP DATABASE IF EXISTS db1`,
|
||||
exp: `{"results":[{}]}`,
|
||||
},
|
||||
&Query{
|
||||
name: "show database should have no results",
|
||||
command: `SHOW DATABASES`,
|
||||
|
|
|
@ -340,12 +340,19 @@ func (s *CreateDatabaseStatement) RequiredPrivileges() ExecutionPrivileges {
|
|||
type DropDatabaseStatement struct {
|
||||
// Name of the database to be dropped.
|
||||
Name string
|
||||
|
||||
// IfExists indicates whether to return without error if the database
|
||||
// does not exists.
|
||||
IfExists bool
|
||||
}
|
||||
|
||||
// String returns a string representation of the drop database statement.
|
||||
func (s *DropDatabaseStatement) String() string {
|
||||
var buf bytes.Buffer
|
||||
_, _ = buf.WriteString("DROP DATABASE ")
|
||||
if s.IfExists {
|
||||
_, _ = buf.WriteString("IF EXISTS ")
|
||||
}
|
||||
_, _ = buf.WriteString(s.Name)
|
||||
return buf.String()
|
||||
}
|
||||
|
|
|
@ -1458,6 +1458,16 @@ func (p *Parser) parseCreateDatabaseStatement() (*CreateDatabaseStatement, error
|
|||
func (p *Parser) parseDropDatabaseStatement() (*DropDatabaseStatement, error) {
|
||||
stmt := &DropDatabaseStatement{}
|
||||
|
||||
// Look for "IF EXISTS"
|
||||
if tok, _, _ := p.scanIgnoreWhitespace(); tok == IF {
|
||||
if err := p.parseTokens([]Token{EXISTS}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
stmt.IfExists = true
|
||||
} else {
|
||||
p.unscan()
|
||||
}
|
||||
|
||||
// Parse the name of the database to be dropped.
|
||||
lit, err := p.parseIdent()
|
||||
if err != nil {
|
||||
|
|
|
@ -1224,8 +1224,18 @@ func TestParser_ParseStatement(t *testing.T) {
|
|||
|
||||
// DROP DATABASE statement
|
||||
{
|
||||
s: `DROP DATABASE testdb`,
|
||||
stmt: &influxql.DropDatabaseStatement{Name: "testdb"},
|
||||
s: `DROP DATABASE testdb`,
|
||||
stmt: &influxql.DropDatabaseStatement{
|
||||
Name: "testdb",
|
||||
IfExists: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
s: `DROP DATABASE IF EXISTS testdb`,
|
||||
stmt: &influxql.DropDatabaseStatement{
|
||||
Name: "testdb",
|
||||
IfExists: true,
|
||||
},
|
||||
},
|
||||
|
||||
// DROP MEASUREMENT statement
|
||||
|
@ -1599,6 +1609,8 @@ func TestParser_ParseStatement(t *testing.T) {
|
|||
{s: `CREATE DATABASE IF NOT`, err: `found EOF, expected EXISTS at line 1, char 24`},
|
||||
{s: `CREATE DATABASE IF NOT EXISTS`, err: `found EOF, expected identifier at line 1, char 31`},
|
||||
{s: `DROP DATABASE`, err: `found EOF, expected identifier at line 1, char 15`},
|
||||
{s: `DROP DATABASE IF`, err: `found EOF, expected EXISTS at line 1, char 18`},
|
||||
{s: `DROP DATABASE IF EXISTS`, err: `found EOF, expected identifier at line 1, char 25`},
|
||||
{s: `DROP RETENTION`, err: `found EOF, expected POLICY at line 1, char 16`},
|
||||
{s: `DROP RETENTION POLICY`, err: `found EOF, expected identifier at line 1, char 23`},
|
||||
{s: `DROP RETENTION POLICY "1h.cpu"`, err: `found EOF, expected ON at line 1, char 31`},
|
||||
|
|
|
@ -370,6 +370,9 @@ func (q *QueryExecutor) executeDropDatabaseStatement(stmt *influxql.DropDatabase
|
|||
if err != nil {
|
||||
return &influxql.Result{Err: err}
|
||||
} else if dbi == nil {
|
||||
if stmt.IfExists {
|
||||
return &influxql.Result{}
|
||||
}
|
||||
return &influxql.Result{Err: ErrDatabaseNotFound(stmt.Name)}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue