|
21 | 21 | import org.testng.annotations.Optional; |
22 | 22 | import org.testng.annotations.Test; |
23 | 23 |
|
| 24 | +import static com.facebook.presto.common.type.BigintType.BIGINT; |
24 | 25 | import static com.facebook.presto.common.type.VarcharType.VARCHAR; |
25 | 26 | import static com.facebook.presto.plugin.oracle.OracleQueryRunner.createOracleQueryRunner; |
26 | 27 | import static com.facebook.presto.testing.MaterializedResult.resultBuilder; |
27 | 28 | import static com.facebook.presto.testing.assertions.Assert.assertEquals; |
| 29 | +import static com.google.common.collect.Iterables.getOnlyElement; |
28 | 30 | import static java.lang.String.format; |
29 | 31 | import static java.util.stream.Collectors.joining; |
30 | 32 | import static java.util.stream.IntStream.range; |
31 | 33 | import static org.testng.Assert.assertFalse; |
| 34 | +import static org.testng.Assert.assertNull; |
32 | 35 | import static org.testng.Assert.assertTrue; |
33 | 36 |
|
34 | 37 | public class TestOracleDistributedQueries |
@@ -167,19 +170,164 @@ public void testShowColumns(@Optional("PARQUET") String storageFormat) |
167 | 170 | { |
168 | 171 | MaterializedResult actual = computeActual("SHOW COLUMNS FROM orders"); |
169 | 172 |
|
170 | | - MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR) |
171 | | - .row("orderkey", "bigint", "", "") |
172 | | - .row("custkey", "bigint", "", "") |
173 | | - .row("orderstatus", "varchar(1)", "", "") |
174 | | - .row("totalprice", "double", "", "") |
175 | | - .row("orderdate", "timestamp", "", "") |
176 | | - .row("orderpriority", "varchar(15)", "", "") |
177 | | - .row("clerk", "varchar(15)", "", "") |
178 | | - .row("shippriority", "bigint", "", "") |
179 | | - .row("comment", "varchar(79)", "", "") |
| 173 | + MaterializedResult expectedParametrizedVarchar = resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR, BIGINT, BIGINT, BIGINT) |
| 174 | + .row("orderkey", "bigint", "", "", 19L, null, null) |
| 175 | + .row("custkey", "bigint", "", "", 19L, null, null) |
| 176 | + .row("orderstatus", "varchar(1)", "", "", null, null, 1L) |
| 177 | + .row("totalprice", "double", "", "", 53L, null, null) |
| 178 | + .row("orderdate", "timestamp", "", "", null, null, null) |
| 179 | + .row("orderpriority", "varchar(15)", "", "", null, null, 15L) |
| 180 | + .row("clerk", "varchar(15)", "", "", null, null, 15L) |
| 181 | + .row("shippriority", "bigint", "", "", 19L, null, null) |
| 182 | + .row("comment", "varchar(79)", "", "", null, null, 79L) |
180 | 183 | .build(); |
181 | 184 |
|
182 | 185 | // Until we migrate all connectors to parametrized varchar we check two options |
183 | 186 | assertEquals(actual, expectedParametrizedVarchar, format("%s does not matches %s", actual, expectedParametrizedVarchar)); |
184 | 187 | } |
| 188 | + |
| 189 | + @Test |
| 190 | + @Override |
| 191 | + public void testNonAutoCommitTransactionWithCommit() |
| 192 | + { |
| 193 | + //Catalog oracle only supports writes using autocommit |
| 194 | + } |
| 195 | + |
| 196 | + @Test |
| 197 | + @Override |
| 198 | + public void testNonAutoCommitTransactionWithRollback() |
| 199 | + { |
| 200 | + //Catalog oracle only supports writes using autocommit |
| 201 | + } |
| 202 | + |
| 203 | + @Test |
| 204 | + @Override |
| 205 | + public void testDelete() |
| 206 | + { |
| 207 | + //This connector does not support deletes |
| 208 | + } |
| 209 | + |
| 210 | + @Test |
| 211 | + @Override |
| 212 | + public void testAddColumn() |
| 213 | + { |
| 214 | + assertUpdate("CREATE TABLE test_add_column AS SELECT 123 x", 1); |
| 215 | + assertUpdate("CREATE TABLE test_add_column_a AS SELECT 234 x, 111 a", 1); |
| 216 | + assertUpdate("CREATE TABLE test_add_column_ab AS SELECT 345 x, 222 a, 33.3E0 b", 1); |
| 217 | + assertUpdate("CREATE TABLE test_add_column_abc AS SELECT 456 x, 333 a, 66.6E0 b, 'fourth' c", 1); |
| 218 | + |
| 219 | + assertQueryFails("ALTER TABLE test_add_column ADD COLUMN x bigint", ".* Column 'x' already exists"); |
| 220 | + assertQueryFails("ALTER TABLE test_add_column ADD COLUMN X bigint", ".* Column 'X' already exists"); |
| 221 | + assertQueryFails("ALTER TABLE test_add_column ADD COLUMN q bad_type", ".* Unknown type 'bad_type' for column 'q'"); |
| 222 | + |
| 223 | + assertUpdate("ALTER TABLE test_add_column ADD COLUMN a bigint"); |
| 224 | + assertUpdate("INSERT INTO test_add_column SELECT * FROM test_add_column_a", 1); |
| 225 | + MaterializedResult materializedRows = computeActual("SELECT x, a FROM test_add_column ORDER BY x"); |
| 226 | + assertEquals(materializedRows.getMaterializedRows().get(0).getField(0), 123L); |
| 227 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(1)); |
| 228 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(0), 234L); |
| 229 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(1), 111L); |
| 230 | + |
| 231 | + assertUpdate("ALTER TABLE test_add_column ADD COLUMN b double"); |
| 232 | + assertUpdate("INSERT INTO test_add_column SELECT * FROM test_add_column_ab", 1); |
| 233 | + materializedRows = computeActual("SELECT x, a, b FROM test_add_column ORDER BY x"); |
| 234 | + assertEquals(materializedRows.getMaterializedRows().get(0).getField(0), 123L); |
| 235 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(1)); |
| 236 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(2)); |
| 237 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(0), 234L); |
| 238 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(1), 111L); |
| 239 | + assertNull(materializedRows.getMaterializedRows().get(1).getField(2)); |
| 240 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(0), 345L); |
| 241 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(1), 222L); |
| 242 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(2), 33.3); |
| 243 | + |
| 244 | + assertUpdate("ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c varchar"); |
| 245 | + assertUpdate("ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c varchar"); |
| 246 | + assertUpdate("INSERT INTO test_add_column SELECT * FROM test_add_column_abc", 1); |
| 247 | + materializedRows = computeActual("SELECT x, a, b, c FROM test_add_column ORDER BY x"); |
| 248 | + assertEquals(materializedRows.getMaterializedRows().get(0).getField(0), 123L); |
| 249 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(1)); |
| 250 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(2)); |
| 251 | + assertNull(materializedRows.getMaterializedRows().get(0).getField(3)); |
| 252 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(0), 234L); |
| 253 | + assertEquals(materializedRows.getMaterializedRows().get(1).getField(1), 111L); |
| 254 | + assertNull(materializedRows.getMaterializedRows().get(1).getField(2)); |
| 255 | + assertNull(materializedRows.getMaterializedRows().get(1).getField(3)); |
| 256 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(0), 345L); |
| 257 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(1), 222L); |
| 258 | + assertEquals(materializedRows.getMaterializedRows().get(2).getField(2), 33.3); |
| 259 | + assertNull(materializedRows.getMaterializedRows().get(2).getField(3)); |
| 260 | + assertEquals(materializedRows.getMaterializedRows().get(3).getField(0), 456L); |
| 261 | + assertEquals(materializedRows.getMaterializedRows().get(3).getField(1), 333L); |
| 262 | + assertEquals(materializedRows.getMaterializedRows().get(3).getField(2), 66.6); |
| 263 | + assertEquals(materializedRows.getMaterializedRows().get(3).getField(3), "fourth"); |
| 264 | + |
| 265 | + assertUpdate("DROP TABLE test_add_column"); |
| 266 | + assertUpdate("DROP TABLE test_add_column_a"); |
| 267 | + assertUpdate("DROP TABLE test_add_column_ab"); |
| 268 | + assertUpdate("DROP TABLE test_add_column_abc"); |
| 269 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_add_column")); |
| 270 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_add_column_a")); |
| 271 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_add_column_ab")); |
| 272 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_add_column_abc")); |
| 273 | + |
| 274 | + assertUpdate("ALTER TABLE IF EXISTS test_add_column ADD COLUMN x bigint"); |
| 275 | + assertUpdate("ALTER TABLE IF EXISTS test_add_column ADD COLUMN IF NOT EXISTS x bigint"); |
| 276 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_add_column")); |
| 277 | + } |
| 278 | + |
| 279 | + @Override |
| 280 | + public void testUpdate() |
| 281 | + { |
| 282 | + // Updates are not supported by the connector |
| 283 | + } |
| 284 | + @Override |
| 285 | + public void testPayloadJoinApplicability() |
| 286 | + { |
| 287 | + // no op -- test not supported due to lack of support for map(integer, integer) column type. |
| 288 | + } |
| 289 | + |
| 290 | + @Override |
| 291 | + public void testPayloadJoinCorrectness() |
| 292 | + { |
| 293 | + // no op -- test not supported due to lack of support for map(integer, integer) column type. |
| 294 | + } |
| 295 | + |
| 296 | + @Override |
| 297 | + public void testRemoveRedundantCastToVarcharInJoinClause() |
| 298 | + { |
| 299 | + // no op -- test not supported due to lack of support for map(integer, integer) column type. |
| 300 | + } |
| 301 | + |
| 302 | + @Override |
| 303 | + public void testRenameTable() |
| 304 | + { |
| 305 | + assertUpdate("CREATE TABLE test_rename AS SELECT 123 x", 1); |
| 306 | + |
| 307 | + assertUpdate("ALTER TABLE test_rename RENAME TO test_rename_new"); |
| 308 | + MaterializedResult materializedRows = computeActual("SELECT x FROM test_rename_new"); |
| 309 | + assertEquals(getOnlyElement(materializedRows.getMaterializedRows()).getField(0), 123L); |
| 310 | + |
| 311 | + assertUpdate("ALTER TABLE IF EXISTS test_rename_new RENAME TO test_rename"); |
| 312 | + materializedRows = computeActual("SELECT x FROM test_rename"); |
| 313 | + assertEquals(getOnlyElement(materializedRows.getMaterializedRows()).getField(0), 123L); |
| 314 | + |
| 315 | + assertUpdate("ALTER TABLE IF EXISTS test_rename RENAME TO test_rename_new"); |
| 316 | + materializedRows = computeActual("SELECT x FROM test_rename_new"); |
| 317 | + assertEquals(getOnlyElement(materializedRows.getMaterializedRows()).getField(0), 123L); |
| 318 | + |
| 319 | + // provide new table name in uppercase |
| 320 | + assertUpdate("ALTER TABLE test_rename_new RENAME TO TEST_RENAME"); |
| 321 | + materializedRows = computeActual("SELECT x FROM test_rename"); |
| 322 | + assertEquals(getOnlyElement(materializedRows.getMaterializedRows()).getField(0), 123L); |
| 323 | + |
| 324 | + assertUpdate("DROP TABLE test_rename"); |
| 325 | + |
| 326 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_rename")); |
| 327 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_rename_new")); |
| 328 | + |
| 329 | + assertUpdate("ALTER TABLE IF EXISTS test_rename RENAME TO test_rename_new"); |
| 330 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_rename")); |
| 331 | + assertFalse(getQueryRunner().tableExists(getSession(), "test_rename_new")); |
| 332 | + } |
185 | 333 | } |
0 commit comments