@Override public List<SchemaField> load(ProjectCollection key) throws Exception { try (Connection conn = prestoConnectionFactory.openConnection()) { ResultSet dbColumns = conn.getMetaData().getColumns(config.getColdStorageConnector(), key.project, key.collection, null); List<SchemaField> schema = convertToSchema(dbColumns); if (schema == null) { return ImmutableList.of(); } return schema; } } });
public List<SchemaField> convertToSchema(ResultSet dbColumns) throws SQLException { List<SchemaField> schemaFields = Lists.newArrayList(); while (dbColumns.next()) { String columnName = dbColumns.getString("COLUMN_NAME"); FieldType fieldType = fromSql(dbColumns.getInt("DATA_TYPE"), dbColumns.getString("TYPE_NAME"), s -> fromPrestoType(s)); schemaFields.add(new SchemaField(columnName, fieldType)); } return schemaFields.isEmpty() ? null : schemaFields; }
@Override public Map<String, List<SchemaField>> getCollections(String project) { try { return collectionCache.get(project).stream() .collect(Collectors.toMap(c -> c, collection -> getCollection(project, collection))); } catch (ExecutionException e) { throw Throwables.propagate(e); } }
Runnable task; if (currentFields.isEmpty()) { if (!getProjects().contains(project)) { throw new NotExistsException("Project"); return getOrCreateCollectionFields(project, collection, fields); } else { throw new IllegalStateException(e.getMessage());
@Override public void createProject(String project) { if (config.getExistingProjects().contains(project)) { checkProject(project); try (Handle handle = dbi.open()) { handle.createStatement("INSERT INTO project (name) VALUES(:name)") .bind("name", project) .execute(); } catch (Exception e) { if (getProjects().contains(project)) { throw new RakamException("The project already exists", BAD_REQUEST); } } super.onCreateProject(project); return; } throw new RakamException(NOT_IMPLEMENTED); }