diff --git a/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java b/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java index 7aa7e1495140987aff7f6f4fe1cbd69edfc622ad..dc1462363590ff0ebfd6194ddea6c5422d225137 100644 --- a/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java +++ b/src/main/java/org/opengauss/sqltranslator/dialect/mysql/MySqlToOpenGaussOutputVisitor.java @@ -2103,12 +2103,10 @@ public class MySqlToOpenGaussOutputVisitor extends MySqlOutputVisitor { println(); } } - if (! (x.getBody() instanceof SQLSetStatement)) { - if (x.isUpdate() || x.isInsert()) { - println("RETURN NEW;"); - } else { - println("RETURN OLD;"); - } + if (x.isUpdate() || x.isInsert()) { + println("RETURN NEW;"); + } else { + println("RETURN OLD;"); } println("END;"); println("$$ LANGUAGE plpgsql;"); diff --git a/src/test/java/org/opengauss/sqltranslator/SqlTranslateTest.java b/src/test/java/org/opengauss/sqltranslator/SqlTranslateTest.java index 2a11501cac98af16d84e2166e41c525a3e02745a..9ad0275adb79dae111d4f33e692e419360982abf 100644 --- a/src/test/java/org/opengauss/sqltranslator/SqlTranslateTest.java +++ b/src/test/java/org/opengauss/sqltranslator/SqlTranslateTest.java @@ -121,6 +121,12 @@ public class SqlTranslateTest { assertEquals(sqlContents[1], sqlContents[2]); } + @Test + public void test_createTrigger04() throws IOException { + String[] sqlContents = execFile("createTrigger_statement_04.sql"); + assertEquals(sqlContents[1], sqlContents[2]); + } + @Test public void test_dataType() throws IOException { String[] sqlContents = execFile("dataType_statement.sql"); diff --git a/src/test/resources/dialect/mysql/expect/createTrigger_statement_01.sql b/src/test/resources/dialect/mysql/expect/createTrigger_statement_01.sql index 19a1038c9be3694b15f391b768276e7cf88aeb91..7993e2d5085fa61eda3ec5ec51d9eba2d896f106 100644 --- a/src/test/resources/dialect/mysql/expect/createTrigger_statement_01.sql +++ b/src/test/resources/dialect/mysql/expect/createTrigger_statement_01.sql @@ -1,13 +1,12 @@ CREATE TABLE t_employee ( work_year INTEGER ); --- DEFINER `root`@`%` +-- DEFINER `mysql_test`@`%` CREATE OR REPLACE FUNCTION createFunction_1692ab45b3a540ca863d5612ed34a1b0() RETURNS TRIGGER AS $$ DECLARE BEGIN -new.work_year := 0; -new.work_year := 1; +new.work_year := 10; WHILE new.work_year > 0 LOOP new.work_year := new.work_year - 1; END LOOP; diff --git a/src/test/resources/dialect/mysql/expect/createTrigger_statement_02.sql b/src/test/resources/dialect/mysql/expect/createTrigger_statement_02.sql index c8391c8aaeb3879fbbc7d005b1bbfc19081036de..159fb5442b2a5edf225f049059d28f5c08d0201f 100644 --- a/src/test/resources/dialect/mysql/expect/createTrigger_statement_02.sql +++ b/src/test/resources/dialect/mysql/expect/createTrigger_statement_02.sql @@ -1,13 +1,18 @@ +CREATE TABLE account ( + amount INTEGER +); +SET @wongloong = 1; -- DEFINER `mysql_test`@`%` CREATE OR REPLACE FUNCTION createFunction_5e55ac4ac3e940efb7e838c4b62128cf() RETURNS TRIGGER AS $$ DECLARE BEGIN SET @wongloong = @wongloong + NEW.amount; +RETURN NEW; END; $$ LANGUAGE plpgsql; -CREATE TRIGGER test1.ins_sum -BEFORE INSERT ON test1.account +CREATE TRIGGER ins_sum +BEFORE INSERT ON account FOR EACH ROW EXECUTE PROCEDURE createFunction_5e55ac4ac3e940efb7e838c4b62128cf(); \ No newline at end of file diff --git a/src/test/resources/dialect/mysql/expect/createTrigger_statement_03.sql b/src/test/resources/dialect/mysql/expect/createTrigger_statement_03.sql index 67ff6d8ca6bf1c6d518b52b3660fa187ce14681f..54dc9b808bd7359758565db8fb1afb176b4bc2e5 100644 --- a/src/test/resources/dialect/mysql/expect/createTrigger_statement_03.sql +++ b/src/test/resources/dialect/mysql/expect/createTrigger_statement_03.sql @@ -1,3 +1,12 @@ +CREATE TABLE table1 ( + id INTEGER, + name VARCHAR(50) +); +CREATE TABLE table2 ( + id INTEGER, + name VARCHAR(50) +); +-- DEFINER `mysql_test`@`%` CREATE OR REPLACE FUNCTION createFunction_a92a685008044eac9628e1d7ff309c43() RETURNS TRIGGER AS $$ DECLARE diff --git a/src/test/resources/dialect/mysql/expect/createTrigger_statement_04.sql b/src/test/resources/dialect/mysql/expect/createTrigger_statement_04.sql new file mode 100644 index 0000000000000000000000000000000000000000..111edd64fff9bfc47abce42928a65a5ddf7711b7 --- /dev/null +++ b/src/test/resources/dialect/mysql/expect/createTrigger_statement_04.sql @@ -0,0 +1,20 @@ +CREATE TABLE table3 ( + id INTEGER, + name VARCHAR(10), + col VARCHAR(20), + PRIMARY KEY (id) +); +-- DEFINER `mysql_test`@`%` +CREATE OR REPLACE FUNCTION createFunction_58e6c454b7864573b71b7d6fb6b252c0() RETURNS TRIGGER AS +$$ +DECLARE +BEGIN +new.col := concat(new.name, new.id); +RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger3 +BEFORE INSERT ON table3 +FOR EACH ROW +EXECUTE PROCEDURE createFunction_58e6c454b7864573b71b7d6fb6b252c0(); \ No newline at end of file diff --git a/src/test/resources/dialect/mysql/input/createTrigger_statement_01.sql b/src/test/resources/dialect/mysql/input/createTrigger_statement_01.sql index 349b20d7a0a16779576a8a79f23889c546fac506..1fb1c54808816e8af143266b777ff950841d1f47 100644 --- a/src/test/resources/dialect/mysql/input/createTrigger_statement_01.sql +++ b/src/test/resources/dialect/mysql/input/createTrigger_statement_01.sql @@ -1,18 +1,22 @@ create table t_employee(work_year int); -CREATE Definer=`root`@`%` TRIGGER tr_before_insert_employee - BEFORE UPDATE - ON t_employee - FOR EACH ROW - BEGIN - SET new.work_year = 0; - SET new.work_year = 1; - while new.work_year>0 do - set new.work_year=new.work_year-1; - end while; +-- delimiter $ +CREATE DEFINER=`mysql_test`@`%` TRIGGER tr_before_insert_employee BEFORE UPDATE ON t_employee FOR EACH ROW +BEGIN + SET new.work_year = 10; + while new.work_year>0 do + set new.work_year=new.work_year-1; + end while; - repeat - set new.work_year=new.work_year+1; - until new.work_year>10 end repeat; - END; + repeat + set new.work_year=new.work_year+1; + until new.work_year>10 + end repeat; +END; +-- $ +-- delimiter ; +insert into t_employee values(5); +update t_employee set work_year = 20; +select * from t_employee; +-- 针对update,总是返回11 diff --git a/src/test/resources/dialect/mysql/input/createTrigger_statement_02.sql b/src/test/resources/dialect/mysql/input/createTrigger_statement_02.sql index 8f569116247d5d0d85a52c4a4bec165a0798fdce..394784d2fa83811a5455a014ce167cc6c06159f1 100644 --- a/src/test/resources/dialect/mysql/input/createTrigger_statement_02.sql +++ b/src/test/resources/dialect/mysql/input/createTrigger_statement_02.sql @@ -1 +1,6 @@ -CREATE DEFINER=`mysql_test`@`%` TRIGGER test1.ins_sum BEFORE INSERT ON test1.account FOR EACH ROW SET @wongloong = @wongloong + NEW.amount; \ No newline at end of file +create table account(amount int); +set @wongloong=1; +CREATE DEFINER=`mysql_test`@`%` TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @wongloong = @wongloong + NEW.amount; +insert into account values(3); +select @wongloong; +-- 返回4 \ No newline at end of file diff --git a/src/test/resources/dialect/mysql/input/createTrigger_statement_03.sql b/src/test/resources/dialect/mysql/input/createTrigger_statement_03.sql index 6b7608d9419c3bea9a2c2e730144323d391b9fad..831de8976d8d45e47bf48585a9615f30b644fb32 100644 --- a/src/test/resources/dialect/mysql/input/createTrigger_statement_03.sql +++ b/src/test/resources/dialect/mysql/input/createTrigger_statement_03.sql @@ -1 +1,6 @@ -create trigger trigger1 before insert on table1 for each row insert into table2 values(new.id, new.name); \ No newline at end of file +create table table1(id int, name varchar(50)); +create table table2(id int, name varchar(50)); +create DEFINER=`mysql_test`@`%` trigger trigger1 before insert on table1 for each row insert into table2 values(new.id, new.name); +insert into table1 values(1, 'test1'); +select * from table2; +-- table2新增一行和table1相同的数据 \ No newline at end of file diff --git a/src/test/resources/dialect/mysql/input/createTrigger_statement_04.sql b/src/test/resources/dialect/mysql/input/createTrigger_statement_04.sql new file mode 100644 index 0000000000000000000000000000000000000000..7a85219e565a6bab1cec2e1beafca0123bd9be57 --- /dev/null +++ b/src/test/resources/dialect/mysql/input/createTrigger_statement_04.sql @@ -0,0 +1,5 @@ +create table table3 (id int, name varchar(10), col varchar(20), primary key(id)); +create DEFINER=`mysql_test`@`%` trigger trigger3 before insert on table3 for each row set new.col = concat(new.name, new.id); +insert into table3(id, name) values(1, 'test'); +select * from table3; +-- table1的col列内容为test1 \ No newline at end of file