|
23 | 23 | mod test_utils; |
24 | 24 |
|
25 | 25 | use helpers::attached_token::AttachedToken; |
26 | | -use sqlparser::ast::{DataType, DropBehavior, DropOperator, DropOperatorSignature}; |
| 26 | +use sqlparser::ast::{ |
| 27 | + DataType, DropBehavior, DropOperator, DropOperatorClass, DropOperatorSignature, |
| 28 | +}; |
27 | 29 | use sqlparser::tokenizer::Span; |
28 | 30 | use test_utils::*; |
29 | 31 |
|
@@ -6908,6 +6910,14 @@ fn parse_drop_operator() { |
6908 | 6910 | drop_behavior: Some(DropBehavior::Cascade), |
6909 | 6911 | }) |
6910 | 6912 | ); |
| 6913 | + |
| 6914 | + // Test error: DROP OPERATOR with no operators |
| 6915 | + let sql = "DROP OPERATOR (INTEGER, INTEGER)"; |
| 6916 | + assert!(pg().parse_sql_statements(sql).is_err()); |
| 6917 | + |
| 6918 | + // Test error: DROP OPERATOR IF EXISTS with no operators |
| 6919 | + let sql = "DROP OPERATOR IF EXISTS (INTEGER, INTEGER)"; |
| 6920 | + assert!(pg().parse_sql_statements(sql).is_err()); |
6911 | 6921 | } |
6912 | 6922 |
|
6913 | 6923 | #[test] |
@@ -6963,6 +6973,77 @@ fn parse_drop_operator_family() { |
6963 | 6973 | } |
6964 | 6974 | } |
6965 | 6975 | } |
| 6976 | + |
| 6977 | + // Test error: DROP OPERATOR FAMILY with no names |
| 6978 | + let sql = "DROP OPERATOR FAMILY USING btree"; |
| 6979 | + assert!(pg().parse_sql_statements(sql).is_err()); |
| 6980 | + |
| 6981 | + // Test error: DROP OPERATOR FAMILY IF EXISTS with no names |
| 6982 | + let sql = "DROP OPERATOR FAMILY IF EXISTS USING btree"; |
| 6983 | + assert!(pg().parse_sql_statements(sql).is_err()); |
| 6984 | +} |
| 6985 | + |
| 6986 | +#[test] |
| 6987 | +fn parse_drop_operator_class() { |
| 6988 | + for if_exists in [true, false] { |
| 6989 | + for drop_behavior in [ |
| 6990 | + None, |
| 6991 | + Some(DropBehavior::Cascade), |
| 6992 | + Some(DropBehavior::Restrict), |
| 6993 | + ] { |
| 6994 | + for index_method in &["btree", "hash", "gist", "gin", "spgist", "brin"] { |
| 6995 | + for (names_str, names_vec) in [ |
| 6996 | + ( |
| 6997 | + "widget_ops", |
| 6998 | + vec![ObjectName::from(vec![Ident::new("widget_ops")])], |
| 6999 | + ), |
| 7000 | + ( |
| 7001 | + "myschema.int4_ops", |
| 7002 | + vec![ObjectName::from(vec![ |
| 7003 | + Ident::new("myschema"), |
| 7004 | + Ident::new("int4_ops"), |
| 7005 | + ])], |
| 7006 | + ), |
| 7007 | + ( |
| 7008 | + "ops1, ops2, schema.ops3", |
| 7009 | + vec![ |
| 7010 | + ObjectName::from(vec![Ident::new("ops1")]), |
| 7011 | + ObjectName::from(vec![Ident::new("ops2")]), |
| 7012 | + ObjectName::from(vec![Ident::new("schema"), Ident::new("ops3")]), |
| 7013 | + ], |
| 7014 | + ), |
| 7015 | + ] { |
| 7016 | + let sql = format!( |
| 7017 | + "DROP OPERATOR CLASS{} {} USING {}{}", |
| 7018 | + if if_exists { " IF EXISTS" } else { "" }, |
| 7019 | + names_str, |
| 7020 | + index_method, |
| 7021 | + match drop_behavior { |
| 7022 | + Some(behavior) => format!(" {}", behavior), |
| 7023 | + None => String::new(), |
| 7024 | + } |
| 7025 | + ); |
| 7026 | + assert_eq!( |
| 7027 | + pg_and_generic().verified_stmt(&sql), |
| 7028 | + Statement::DropOperatorClass(DropOperatorClass { |
| 7029 | + if_exists, |
| 7030 | + names: names_vec.clone(), |
| 7031 | + using: Ident::new(*index_method), |
| 7032 | + drop_behavior, |
| 7033 | + }) |
| 7034 | + ); |
| 7035 | + } |
| 7036 | + } |
| 7037 | + } |
| 7038 | + } |
| 7039 | + |
| 7040 | + // Test error: DROP OPERATOR CLASS with no names |
| 7041 | + let sql = "DROP OPERATOR CLASS USING btree"; |
| 7042 | + assert!(pg().parse_sql_statements(sql).is_err()); |
| 7043 | + |
| 7044 | + // Test error: DROP OPERATOR CLASS IF EXISTS with no names |
| 7045 | + let sql = "DROP OPERATOR CLASS IF EXISTS USING btree"; |
| 7046 | + assert!(pg().parse_sql_statements(sql).is_err()); |
6966 | 7047 | } |
6967 | 7048 |
|
6968 | 7049 | #[test] |
|
0 commit comments