public Object getFieldValue(_Fields field) { switch (field) { case NAME: return getName(); case DESCRIPTION: return getDescription(); case LOCATION_URI: return getLocationUri(); case PARAMETERS: return getParameters(); case PRIVILEGES: return getPrivileges(); case OWNER_NAME: return getOwnerName(); case OWNER_TYPE: return getOwnerType(); case CATALOG_NAME: return getCatalogName(); case CREATE_TIME: return getCreateTime(); } throw new IllegalStateException(); }
@Test public void testDbCreateTimeOverride() throws Exception { // create db by providing a create time. Should be overridden, create time should // always be set by metastore Database testDb = new DatabaseBuilder().setName("test_create_time") .setCreateTime(1) .create(client, metaStore.getConf()); Database database = client.getDatabase("test_create_time"); Assert.assertTrue("Database create time should have been set", database.getCreateTime() > 0); Assert.assertTrue("Database create time should have been reset by metastore", database.getCreateTime() != 1); }
@Test public void testDatabaseCreateTime() throws Exception { // create db without specifying createtime Database testDb = new DatabaseBuilder().setName("test_create_time").create(client, metaStore.getConf()); Database database = client.getDatabase("test_create_time"); Assert.assertTrue("Database create time should have been set", database.getCreateTime() > 0); }
@Override public void createDatabase(Database db) throws InvalidObjectException, MetaException { boolean commited = false; MDatabase mdb = new MDatabase(); assert db.getCatalogName() != null; mdb.setCatalogName(normalizeIdentifier(db.getCatalogName())); assert mdb.getCatalogName() != null; mdb.setName(db.getName().toLowerCase()); mdb.setLocationUri(db.getLocationUri()); mdb.setDescription(db.getDescription()); mdb.setParameters(db.getParameters()); mdb.setOwnerName(db.getOwnerName()); PrincipalType ownerType = db.getOwnerType(); mdb.setOwnerType((null == ownerType ? PrincipalType.USER.name() : ownerType.name())); mdb.setCreateTime(db.getCreateTime()); try { openTransaction(); pm.makePersistent(mdb); commited = commitTransaction(); } finally { if (!commited) { rollbackTransaction(); } } }
@Test public void testDefaultDatabaseData() throws Exception { Database database = client.getDatabase(DEFAULT_DATABASE); Assert.assertEquals("Default database name", "default", database.getName()); Assert.assertEquals("Default database description", "Default Hive database", database.getDescription()); Assert.assertEquals("Default database location", metaStore.getWarehouseRoot(), new Path(database.getLocationUri())); Assert.assertEquals("Default database parameters", new HashMap<String, String>(), database.getParameters()); Assert.assertEquals("Default database owner", "public", database.getOwnerName()); Assert.assertEquals("Default database owner type", PrincipalType.ROLE, database.getOwnerType()); Assert.assertNull("Default database privileges", database.getPrivileges()); Assert.assertTrue("database create time should be set", database.isSetCreateTime()); Assert.assertTrue("Database create time should be non-zero", database.getCreateTime() > 0); }
/** * This test creates and queries a database and then drops it. Good for testing the happy path. */ @Test public void testCreateGetDeleteDatabase() throws Exception { Database database = getDatabaseWithAllParametersSet(); client.createDatabase(database); Database createdDatabase = client.getDatabase(database.getName()); // The createTime will be set on the server side, so the comparison should skip it database.setCreateTime(createdDatabase.getCreateTime()); Assert.assertEquals("Comparing databases", database, createdDatabase); Assert.assertTrue("The directory should be created", metaStore.isPathExists( new Path(database.getLocationUri()))); client.dropDatabase(database.getName()); Assert.assertFalse("The directory should be removed", metaStore.isPathExists(new Path(database.getLocationUri()))); try { client.getDatabase(database.getName()); Assert.fail("Expected a NoSuchObjectException to be thrown"); } catch (NoSuchObjectException exception) { // Expected exception } }
@Test public void testAlterDatabase() throws Exception { Database originalDatabase = testDatabases[0]; Database newDatabase = new DatabaseBuilder() // The database name is not changed during alter .setName(originalDatabase.getName()) .setOwnerType(PrincipalType.GROUP) .setOwnerName("owner2") .setLocation(metaStore.getWarehouseRoot() + "/database_location_2") .setDescription("dummy description 2") .addParam("param_key_1", "param_value_1_2") .addParam("param_key_2_3", "param_value_2_3") .setCreateTime(originalDatabase.getCreateTime()) .build(metaStore.getConf()); client.alterDatabase(originalDatabase.getName(), newDatabase); Database alteredDatabase = client.getDatabase(newDatabase.getName()); Assert.assertEquals("Comparing Databases", newDatabase, alteredDatabase); }