private String executeSqlDataApi()

in quick-start/java/RedshiftDataAPI.java [88:161]


    private String executeSqlDataApi(AWSRedshiftDataAPI redshiftDataApiClient, String redshiftClusterId,
            String redshiftDatabaseName, String redshiftUser, String command, String query, boolean isSynchronous,
            LambdaLogger logger) throws InterruptedException {
        String queryStatus = "";
        int attempts = 0;
        try {

            ExecuteStatementRequest statementRequest = new ExecuteStatementRequest();
            DescribeStatementRequest describeRequest = new DescribeStatementRequest();

            statementRequest.setClusterIdentifier(redshiftClusterId);
            statementRequest.setDbUser(redshiftUser);
            statementRequest.setDatabase(redshiftDatabaseName);
            statementRequest.setSql(query);

            // Calling Redshift Data API with executeStatement()
            ExecuteStatementResult resp = redshiftDataApiClient.executeStatement(statementRequest);

            String queryId = resp.getId();
            boolean done = false;

            describeRequest.setId(queryId);

            DescribeStatementResult describeResult = redshiftDataApiClient.describeStatement(describeRequest);
            queryStatus = describeResult.getStatus();

            // Wait until query is finished or max cycles limit has been reached.
            while (done == false && isSynchronous && attempts++ < MAX_WAIT_CYCLES) {
                TimeUnit.SECONDS.sleep(1);

                describeResult = redshiftDataApiClient.describeStatement(describeRequest);
                queryStatus = describeResult.getStatus();

                if (queryStatus.equals("FAILED")) {
                    logger.log(String.format("SQL query failed, query id: %s \n Error: %s", queryId,
                            describeResult.getError().toString()));
                    System.exit(1);
                } else if (queryStatus.equals("FINISHED")) {
                    logger.log(String.format("Query status is: %s for query id: %s and command: %s\n", queryStatus,
                            queryId, command));
                    done = true;

                    // Print query response if available (typically from Select SQL statements)
                    if (describeResult.isHasResultSet()) {
                        GetStatementResultRequest statementResultRequest = new GetStatementResultRequest();
                        statementResultRequest.setId(queryId);
                        GetStatementResultResult sqlresult = redshiftDataApiClient
                                .getStatementResult(statementResultRequest);
                        logger.log(String.format("Printing response of query: %s --> %s", command,
                                sqlresult.getRecords().toString()));
                    }

                } else {
                    logger.log(String.format("Currently working... query status is: %s \n", queryStatus));
                }

            }

            if (done == false && attempts >= MAX_WAIT_CYCLES && isSynchronous) {
                logger.log(
                        "Limit for MAX_WAIT_CYCLES has been reached before the query was able to finish. We have exited out of the while-loop. You may increase the limit accordingly. \n");
                logger.log(String.format("Query status is: %s for query id: %s and command: %s\n", queryStatus, queryId,
                        command));
                System.exit(1);
            }

        } catch (AWSRedshiftDataAPIException e) {
            logger.log(e.getStackTrace().toString());
            System.exit(1);

        }
        return queryStatus;

    }