Skip to content

Commit f2740a8

Browse files
sqlparser-ast: add support for rename table
Add parsing support for rename table. Change-Id: Id5e665ae4615b2abc7b93ae297882f96f7b2c30e Reviewed-on: https://gerrit.readyset.name/c/readyset/+/9888 Tested-by: Buildkite CI Reviewed-by: Michael Zink <[email protected]>
1 parent edffcdd commit f2740a8

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

readyset-sql-parsing/tests/parity.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,3 +818,15 @@ fn where_not_in_not_between() {
818818
"nom-sql error"
819819
);
820820
}
821+
822+
#[test]
823+
fn rename_table() {
824+
check_parse_both!("RENAME TABLE tb1 TO tb2");
825+
check_parse_both!("ALTER TABLE tb1 RENAME TO tb2");
826+
// disabled as sqlparser does not currently support this syntax
827+
check_parse_fails!(
828+
Dialect::MySQL,
829+
"ALTER TABLE tb1 RENAME AS tb2",
830+
"sql parser error: Expected: TO, found: tb2"
831+
);
832+
}

readyset-sql/src/ast/query.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ impl TryFromDialect<sqlparser::ast::Statement> for SqlQuery {
208208
comment: comment.unwrap_or("".to_owned()),
209209
}))
210210
}
211+
RenameTable(rename) => Ok(Self::RenameTable(RenameTableStatement {
212+
ops: rename.try_into_dialect(dialect)?,
213+
})),
211214
_ => not_yet_implemented!("other query: {value:?}"),
212215
}
213216
}

readyset-sql/src/ast/rename.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ use std::fmt;
33
use itertools::Itertools;
44
use readyset_util::fmt::fmt_with;
55
use serde::{Deserialize, Serialize};
6+
use sqlparser::ast::RenameTable;
67
use test_strategy::Arbitrary;
78

8-
use crate::{Dialect, DialectDisplay, ast::*};
9+
use crate::{AstConversionError, Dialect, DialectDisplay, IntoDialect, TryFromDialect, ast::*};
910

1011
#[derive(Clone, Debug, Default, Eq, Hash, PartialEq, Serialize, Deserialize, Arbitrary)]
1112
pub struct RenameTableStatement {
@@ -30,6 +31,19 @@ pub struct RenameTableOperation {
3031
pub to: Relation,
3132
}
3233

34+
impl TryFromDialect<sqlparser::ast::RenameTable> for RenameTableOperation {
35+
fn try_from_dialect(
36+
value: sqlparser::ast::RenameTable,
37+
dialect: Dialect,
38+
) -> Result<Self, AstConversionError> {
39+
let RenameTable { old_name, new_name } = value;
40+
Ok(Self {
41+
from: old_name.into_dialect(dialect),
42+
to: new_name.into_dialect(dialect),
43+
})
44+
}
45+
}
46+
3347
impl DialectDisplay for RenameTableOperation {
3448
fn display(&self, dialect: Dialect) -> impl fmt::Display + '_ {
3549
fmt_with(move |f| {

0 commit comments

Comments
 (0)