| 72 | } |
| 73 | |
| 74 | func TestSplitMySQLStatements(t *testing.T) { |
| 75 | tests := []struct { |
| 76 | statement string |
| 77 | expected []string |
| 78 | }{ |
| 79 | { |
| 80 | statement: "SELECT * FROM t1 WHERE c1 = 1; SELECT * FROM t2;", |
| 81 | expected: []string{ |
| 82 | "SELECT * FROM t1 WHERE c1 = 1;", |
| 83 | " SELECT * FROM t2;", |
| 84 | }, |
| 85 | }, |
| 86 | { |
| 87 | statement: `CREATE PROCEDURE my_procedure (IN id INT, OUT name VARCHAR(255)) |
| 88 | BEGIN |
| 89 | SELECT name INTO name FROM users WHERE id = id; |
| 90 | END; SELECT * FROM t2;`, |
| 91 | expected: []string{ |
| 92 | `CREATE PROCEDURE my_procedure (IN id INT, OUT name VARCHAR(255)) |
| 93 | BEGIN |
| 94 | SELECT name INTO name FROM users WHERE id = id; |
| 95 | END;`, |
| 96 | " SELECT * FROM t2;", |
| 97 | }, |
| 98 | }, |
| 99 | { |
| 100 | statement: `CREATE PROCEDURE my_procedure (IN id INT, OUT name VARCHAR(255)) |
| 101 | BEGIN |
| 102 | SELECT IF(id = 1, 'one', 'other') INTO name FROM users; |
| 103 | END; SELECT REPEAT('123', a) FROM t2;`, |
| 104 | expected: []string{ |
| 105 | `CREATE PROCEDURE my_procedure (IN id INT, OUT name VARCHAR(255)) |
| 106 | BEGIN |
| 107 | SELECT IF(id = 1, 'one', 'other') INTO name FROM users; |
| 108 | END;`, |
| 109 | " SELECT REPEAT('123', a) FROM t2;", |
| 110 | }, |
| 111 | }, |
| 112 | } |
| 113 | |
| 114 | for _, test := range tests { |
| 115 | list, err := SplitSQL(test.statement) |
| 116 | require.NoError(t, err) |
| 117 | require.Equal(t, len(test.expected), len(list)) |
| 118 | for i, statement := range list { |
| 119 | require.Equal(t, test.expected[i], statement.Text) |
| 120 | } |
| 121 | } |
| 122 | } |