@Override public void createMaterializedView(String project, MaterializedView materializedView) { Set<MaterializedView> materializedViews = this.materializedViews.computeIfAbsent(project, (key) -> new HashSet<>()); if (materializedViews.contains(materializedView)) { throw new AlreadyExistsException("Materialized view", HttpResponseStatus.BAD_REQUEST); } materializedViews.add(materializedView); }
@Override public void createProject(String project) { try { dynamoDBClient.putItem(new PutItemRequest() .withTableName(tableConfig.getTableName()) .addExpectedEntry("id", new ExpectedAttributeValue().withExists(false)) .withItem(ImmutableMap.<String, AttributeValue>builder() .put("project", new AttributeValue(project)) .put("id", new AttributeValue("|")).build() )); } catch (ConditionalCheckFailedException e) { throw new AlreadyExistsException("Project", HttpResponseStatus.BAD_REQUEST); } }
@Override public CompletableFuture<Void> create(RequestContext context, MaterializedView materializedView) { Query statement = (Query) sqlParser.createStatement(materializedView.query, new ParsingOptions()); StringBuilder builder = new StringBuilder(); HashMap<String, String> map = new HashMap<>(); new RakamSqlFormatter.Formatter(builder, qualifiedName -> queryExecutor.formatTableReference(context.project, qualifiedName, Optional.empty(), map), '"') .process(statement, 1); QueryExecution execution = queryExecutor .executeRawStatement(context, format("create table %s as %s limit 0", queryExecutor.formatTableReference(context.project, QualifiedName.of("materialized", materializedView.tableName), Optional.empty(), ImmutableMap.of()), builder.toString(), Optional.empty()), map); return execution.getResult().thenAccept(result -> { try { get(context.project, materializedView.tableName); throw new AlreadyExistsException("Materialized view", BAD_REQUEST); } catch (NotExistsException e) { } if (result.isFailed()) { throw new RakamException(result.getError().message, INTERNAL_SERVER_ERROR); } else { database.createMaterializedView(context.project, materializedView); } }); }
@Override public void createProject(String project) { checkProject(project); try (Handle handle = dbi.open()) { try { handle.createStatement("INSERT INTO project (name) VALUES(:name)") .bind("name", project) .execute(); } catch (Exception e) { if (getProjects().contains(project)) { throw new AlreadyExistsException("project", BAD_REQUEST); } } } super.onCreateProject(project); }
try { get(context.project, materializedView.tableName); throw new AlreadyExistsException("Materialized view", BAD_REQUEST); } catch (NotExistsException e) {
public void save(String project, RealTimeReport report) { try (Handle handle = dbi.open()) { handle.createStatement("INSERT INTO realtime_reports (project, name, table_name, collections, dimensions, filter, measures) " + "VALUES (:project, :name, :table_name, :collections, :dimensions, :filter, :measures)") .bind("project", project) .bind("name", report.name) .bind("table_name", report.table_name) .bind("collections", JsonHelper.encode(report.collections)) .bind("dimensions", JsonHelper.encode(report.dimensions)) .bind("filter", report.filter) .bind("measures", JsonHelper.encode(report.measures)) .execute(); } catch (UnableToExecuteStatementException e) { try { list(project).stream().anyMatch(re -> re.table_name.equals(report.table_name)); } catch (NotExistsException ex) { throw e; } throw new AlreadyExistsException(String.format("Report '%s'", report.table_name), BAD_REQUEST); } } }
public void save(Integer user, int project, Page page) { try (Handle handle = dbi.open()) { handle.createStatement("INSERT INTO custom_page (project_id, name, slug, category, data, user_id) VALUES (:project, :name, :slug, :category, :data, :user)") .bind("project", project) .bind("name", page.name) .bind("slug", page.slug) .bind("category", page.category) .bind("user", user) .bind("data", JsonHelper.encode(page.files)).execute(); } catch (Exception e) { // TODO move it to transaction if (get(project, page.slug) != null) { throw new AlreadyExistsException(String.format("Custom page %s", page.slug), BAD_REQUEST); } throw e; } }
@Override public void createMaterializedView(String project, MaterializedView materializedView) { try (Handle handle = dbi.open()) { try { handle.createStatement("INSERT INTO materialized_views (project, name, query, table_name, update_interval, incremental, real_time, options) " + "VALUES (:project, :name, :query, :table_name, :update_interval, :incremental, :real_time, :options)") .bind("project", project) .bind("name", materializedView.name) .bind("table_name", materializedView.tableName) .bind("query", materializedView.query) .bind("update_interval", materializedView.updateInterval != null ? materializedView.updateInterval.toMillis() : null) .bind("incremental", materializedView.incremental) .bind("real_time", materializedView.realTime) .bind("options", JsonHelper.encode(materializedView.options)) .execute(); } catch (Exception e) { try { getMaterializedView(project, materializedView.tableName); } catch (RakamException e1) { if (e1.getStatusCode() == NOT_FOUND) { throw Throwables.propagate(e1); } } throw new AlreadyExistsException("Materialized view", BAD_REQUEST); } } }
@JsonRequest @ApiOperation(value = "Create dashboard") @Path("/create") @ProtectEndpoint(writeOperation = true) public Dashboard create( @Named("user_id") Project project, @ApiParam("name") String name, @ApiParam(value = "shared_everyone", required = false) Boolean sharedEveryone, @ApiParam(value = "options", required = false) Map<String, Object> options, @ApiParam(value = "refresh_duration", required = false) Duration refreshDuration) { try (Handle handle = dbi.open()) { int id; try { id = handle.createQuery("INSERT INTO dashboard (project_id, name, user_id, options, refresh_interval) VALUES (:project, :name, :user, :options, :refreshInterval) RETURNING id") .bind("project", project.project) .bind("user", project.userId) .bind("options", JsonHelper.encode(options)) .bind("refreshInterval", refreshDuration != null ? refreshDuration.getSeconds() : null) .bind("name", name).map(IntegerMapper.FIRST).first(); } catch (Exception e) { if (handle.createQuery("SELECT 1 FROM dashboard WHERE (project_id, name) = (:project, :name)") .bind("project", project.project) .bind("name", name).first() != null) { throw new AlreadyExistsException("Dashboard", BAD_REQUEST); } throw e; } return new Dashboard(id, project.userId, name, null, options, TRUE.equals(sharedEveryone)); } }
if (existingUser != null) { if (existingUser.get("created_at") != null) { throw new AlreadyExistsException("A user with same email address", EXPECTATION_FAILED); } else {
@Override public void save(Integer user, int project, CustomReport report) { try (Handle handle = dbi.open()) { handle.createStatement("INSERT INTO custom_reports (report_type, project_id, name, data, user_id) VALUES (:reportType, :project, :name, :data, :user)") .bind("reportType", report.reportType) .bind("project", project) .bind("name", report.name) .bind("user", user) .bind("data", JsonHelper.encode(report.data)).execute(); } catch (Exception e) { // TODO move it to transaction if (get(report.reportType, project, report.name) != null) { throw new AlreadyExistsException("Custom report", HttpResponseStatus.BAD_REQUEST); } throw e; } }
public void save(Integer userId, int project, Report report) { try (Handle handle = dbi.open()) { handle.createStatement("INSERT INTO reports (project_id, slug, category, name, query, options, user_id, query_options) VALUES (:project, :slug, :category, :name, :query, :options, :user, :query_options)") .bind("project", project) .bind("name", report.name) .bind("query", report.query) .bind("slug", report.slug) .bind("user", userId) .bind("category", report.category) .bind("query_options", JsonHelper.encode(report.queryOptions)) .bind("shared", report.shared) .bind("options", JsonHelper.encode(report.options)) .execute(); } catch (UnableToExecuteStatementException e) { try { get(null, project, report.slug); } catch (NotExistsException ex) { throw e; } throw new AlreadyExistsException(String.format("Report '%s'", report.slug), BAD_REQUEST); } }
public SuccessMessage addDatabase(String project, CustomDataSource hook) { try (Handle handle = dbi.open()) { try { handle.createStatement("INSERT INTO custom_data_source (project, schema_name, type, options) " + "VALUES (:project, :schema_name, :type, :options)") .bind("project", project) .bind("schema_name", hook.schemaName) .bind("type", hook.type) .bind("options", JsonHelper.encode(hook.options)) .execute(); return SuccessMessage.success(); } catch (Exception e) { try { getDatabase(project, hook.schemaName); throw new AlreadyExistsException("Custom database", BAD_REQUEST); } catch (RakamException e1) { if (e1.getStatusCode() != NOT_FOUND) { throw e1; } else { throw e; } } } } }
public SuccessMessage addFile(String project, @ApiParam("tableName") String tableName, @ApiParam("options") DiscoverableRemoteTable hook) { try (Handle handle = dbi.open()) { try { handle.createStatement("INSERT INTO custom_file_source (project, table_name, options) " + "VALUES (:project, :table_name, :options)") .bind("project", project) .bind("table_name", tableName) .bind("options", JsonHelper.encode(hook.getTable())) .execute(); return SuccessMessage.success(); } catch (Exception e) { try { getFile(project, tableName); throw new AlreadyExistsException("Custom file", BAD_REQUEST); } catch (RakamException e1) { if (e1.getStatusCode() != NOT_FOUND) { throw e1; } else { throw e; } } } } }
@Override public void createProject(String project) { StringResponse resp = ClickHouseQueryExecution.runStatementSafe(config, format("CREATE DATABASE `%s`", project)); if(resp.getStatusCode() != 200) { if(resp.getBody().startsWith("Code: 82")) { throw new AlreadyExistsException("Project", BAD_REQUEST); } throw new RakamException(resp.getBody().split("\n", 2)[0], INTERNAL_SERVER_ERROR); } super.onCreateProject(project); }