Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙️ Pengaturan Proxy Target

Skip to content

Commit bd7af2f

Browse files
Test CREATE PROCEDURE BEGIN ATOMIC on every dialect
1 parent 1e97be8 commit bd7af2f

2 files changed

Lines changed: 94 additions & 79 deletions

File tree

‎tests/sqlparser_common.rs‎

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22848,3 +22848,91 @@ fn parse_grant_on_tables_named_after_object_types() {
2284822848
verified_stmt(&format!("GRANT SELECT ON {name}.t TO r"));
2284922849
}
2285022850
}
22851+
22852+
#[test]
22853+
fn parse_create_procedure_begin_atomic() {
22854+
let sql = "CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC INSERT INTO t VALUES (1); END";
22855+
verified_stmt(sql);
22856+
match all_dialects().run_parser_method(sql, |parser| parser.parse_statement().unwrap()) {
22857+
Statement::CreateProcedure {
22858+
body: CreateProcedureBody::BeginAtomic(body),
22859+
..
22860+
} => {
22861+
assert_eq!(
22862+
body.statements,
22863+
vec![verified_stmt("INSERT INTO t VALUES (1)")]
22864+
);
22865+
assert_eq!(
22866+
body.span(),
22867+
Span::new(Location::new(1, 36), Location::new(1, 78))
22868+
);
22869+
}
22870+
stmt => panic!("unexpected statement: {stmt:?}"),
22871+
}
22872+
22873+
for sql in [
22874+
"CREATE PROCEDURE p (a INT) LANGUAGE sql BEGIN ATOMIC INSERT INTO t VALUES (a); UPDATE t SET b = a; END",
22875+
"CREATE PROCEDURE p () BEGIN ATOMIC SELECT 1; END",
22876+
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC END",
22877+
] {
22878+
verified_stmt(sql);
22879+
}
22880+
22881+
one_statement_parses_to(
22882+
r#"CREATE PROCEDURE public.p(a integer)
22883+
LANGUAGE sql
22884+
BEGIN ATOMIC
22885+
INSERT INTO public.t (a)
22886+
VALUES (p.a);
22887+
END"#,
22888+
"CREATE PROCEDURE public.p (a INTEGER) LANGUAGE sql BEGIN ATOMIC INSERT INTO public.t (a) VALUES (p.a); END",
22889+
);
22890+
22891+
for (sql, err) in [
22892+
(
22893+
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1;",
22894+
"Expected: END, found: EOF",
22895+
),
22896+
(
22897+
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1 AS a END",
22898+
"Expected: ;, found: END",
22899+
),
22900+
(
22901+
"CREATE PROCEDURE p () LANGUAGE sql BEGIN SELECT 1; END",
22902+
"Expected: AS, found: BEGIN",
22903+
),
22904+
(
22905+
"CREATE PROCEDURE p () LANGUAGE sql AS BEGIN SELECT 1;",
22906+
"Expected: END, found: EOF",
22907+
),
22908+
] {
22909+
assert_eq!(
22910+
parse_sql_statements(sql).unwrap_err(),
22911+
ParserError::ParserError(err.to_string()),
22912+
"{sql}"
22913+
);
22914+
}
22915+
}
22916+
22917+
#[test]
22918+
fn display_create_procedure_begin_atomic_propagates_write_errors() {
22919+
use core::fmt::{self, Write};
22920+
22921+
struct RejectingWriter(&'static str);
22922+
22923+
impl Write for RejectingWriter {
22924+
fn write_str(&mut self, value: &str) -> fmt::Result {
22925+
if value == self.0 {
22926+
Err(fmt::Error)
22927+
} else {
22928+
Ok(())
22929+
}
22930+
}
22931+
}
22932+
22933+
let stmt = verified_stmt("CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1; END");
22934+
for rejected in [" BEGIN ATOMIC", " ", ";", " END"] {
22935+
let mut writer = RejectingWriter(rejected);
22936+
assert_eq!(write!(writer, "{stmt}"), Err(fmt::Error), "{rejected:?}");
22937+
}
22938+
}

‎tests/sqlparser_postgres.rs‎

Lines changed: 6 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -11512,7 +11512,7 @@ END"#,
1151211512
}
1151311513

1151411514
#[test]
11515-
fn display_begin_atomic_propagates_write_errors() {
11515+
fn display_create_function_begin_atomic_propagates_write_errors() {
1151611516
use core::fmt::{self, Write};
1151711517

1151811518
struct RejectingWriter(&'static str);
@@ -11527,84 +11527,11 @@ fn display_begin_atomic_propagates_write_errors() {
1152711527
}
1152811528
}
1152911529

11530-
for sql in [
11531-
"CREATE FUNCTION f() RETURNS INT LANGUAGE sql BEGIN ATOMIC SELECT 1; END",
11532-
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1; END",
11533-
] {
11534-
let stmt = pg_and_generic().verified_stmt(sql);
11535-
for rejected in [" BEGIN ATOMIC", " ", ";", " END"] {
11536-
let mut writer = RejectingWriter(rejected);
11537-
assert_eq!(
11538-
write!(writer, "{stmt}"),
11539-
Err(fmt::Error),
11540-
"{sql}: {rejected:?}"
11541-
);
11542-
}
11543-
}
11544-
}
11545-
11546-
#[test]
11547-
fn parse_create_procedure_begin_atomic() {
11548-
let sql = "CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC INSERT INTO t VALUES (1); END";
11549-
pg_and_generic().verified_stmt(sql);
11550-
match pg_and_generic().run_parser_method(sql, |parser| parser.parse_statement().unwrap()) {
11551-
Statement::CreateProcedure {
11552-
body: CreateProcedureBody::BeginAtomic(body),
11553-
..
11554-
} => {
11555-
assert_eq!(
11556-
body.statements,
11557-
vec![pg_and_generic().verified_stmt("INSERT INTO t VALUES (1)")]
11558-
);
11559-
assert_eq!(
11560-
body.span(),
11561-
Span::new(Location::new(1, 36), Location::new(1, 78))
11562-
);
11563-
}
11564-
stmt => panic!("unexpected statement: {stmt:?}"),
11565-
}
11566-
11567-
for sql in [
11568-
"CREATE PROCEDURE p (a INT) LANGUAGE sql BEGIN ATOMIC INSERT INTO t VALUES (a); UPDATE t SET b = a; END",
11569-
"CREATE PROCEDURE p () BEGIN ATOMIC SELECT 1; END",
11570-
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC END",
11571-
] {
11572-
pg_and_generic().verified_stmt(sql);
11573-
}
11574-
11575-
pg_and_generic().one_statement_parses_to(
11576-
r#"CREATE PROCEDURE public.p(a integer)
11577-
LANGUAGE sql
11578-
BEGIN ATOMIC
11579-
INSERT INTO public.t (a)
11580-
VALUES (p.a);
11581-
END"#,
11582-
"CREATE PROCEDURE public.p (a INTEGER) LANGUAGE sql BEGIN ATOMIC INSERT INTO public.t (a) VALUES (p.a); END",
11583-
);
11584-
11585-
for (sql, err) in [
11586-
(
11587-
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1;",
11588-
"Expected: END, found: EOF",
11589-
),
11590-
(
11591-
"CREATE PROCEDURE p () LANGUAGE sql BEGIN ATOMIC SELECT 1 END",
11592-
"Expected: ;, found: END",
11593-
),
11594-
(
11595-
"CREATE PROCEDURE p () LANGUAGE sql BEGIN SELECT 1; END",
11596-
"Expected: AS, found: BEGIN",
11597-
),
11598-
(
11599-
"CREATE PROCEDURE p () LANGUAGE sql AS BEGIN SELECT 1;",
11600-
"Expected: END, found: EOF",
11601-
),
11602-
] {
11603-
assert_eq!(
11604-
pg_and_generic().parse_sql_statements(sql).unwrap_err(),
11605-
ParserError::ParserError(err.to_string()),
11606-
"{sql}"
11607-
);
11530+
let stmt = pg_and_generic()
11531+
.verified_stmt("CREATE FUNCTION f() RETURNS INT LANGUAGE sql BEGIN ATOMIC SELECT 1; END");
11532+
for rejected in [" BEGIN ATOMIC", " ", ";", " END"] {
11533+
let mut writer = RejectingWriter(rejected);
11534+
assert_eq!(write!(writer, "{stmt}"), Err(fmt::Error), "{rejected:?}");
1160811535
}
1160911536
}
1161011537

0 commit comments

Comments
 (0)