Showing preview only (8,536K chars total). Download the full file or copy to clipboard to get everything.
Repository: 9tigerio/db2rest
Branch: master
Commit: 68c8efac62ba
Files: 556
Total size: 8.0 MB
Directory structure:
gitextract_rp34tsh_/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── RELEASING.md
│ └── workflows/
│ ├── build-verify.yml
│ ├── dockerhub-publish.yml
│ ├── maven-central-publish.yml
│ ├── oracle9i-central-publish.yml
│ └── snapshot.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── README.md
├── db2rest-api/
│ ├── api-rest/
│ │ ├── pom-oracle9i.xml
│ │ ├── pom.xml
│ │ ├── sample-config/
│ │ │ ├── application-db.yml
│ │ │ ├── application-local.yml
│ │ │ ├── application-mongo.yml
│ │ │ ├── application-pg15.yml
│ │ │ └── application-pg16.yml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── homihq/
│ │ │ │ └── db2rest/
│ │ │ │ ├── Db2restApplication.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── CorsFilterConfiguration.java
│ │ │ │ │ ├── DbServiceConfiguration.java
│ │ │ │ │ ├── RestApiConfiguration.java
│ │ │ │ │ ├── WebMvcConfiguration.java
│ │ │ │ │ └── jinjava/
│ │ │ │ │ └── DisabledExpressionTokenScannerSymbols.java
│ │ │ │ ├── interceptor/
│ │ │ │ │ └── DatabaseContextRequestInterceptor.java
│ │ │ │ └── rest/
│ │ │ │ ├── RdbmsRestApi.java
│ │ │ │ ├── admin/
│ │ │ │ │ └── AdminController.java
│ │ │ │ ├── create/
│ │ │ │ │ ├── BulkCreateController.java
│ │ │ │ │ ├── BulkCreateRestApi.java
│ │ │ │ │ ├── CreateController.java
│ │ │ │ │ └── CreateRestApi.java
│ │ │ │ ├── delete/
│ │ │ │ │ ├── DeleteController.java
│ │ │ │ │ └── DeleteRestApi.java
│ │ │ │ ├── meta/
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── DbInfoController.java
│ │ │ │ │ │ ├── DbInfoObject.java
│ │ │ │ │ │ └── DbInfoRestApi.java
│ │ │ │ │ └── schema/
│ │ │ │ │ ├── ColumnObject.java
│ │ │ │ │ ├── SchemaController.java
│ │ │ │ │ ├── SchemaRestApi.java
│ │ │ │ │ ├── TableObject.java
│ │ │ │ │ └── TableWithColumnsObject.java
│ │ │ │ ├── read/
│ │ │ │ │ ├── CountQueryController.java
│ │ │ │ │ ├── ExistsQueryController.java
│ │ │ │ │ ├── FindOneController.java
│ │ │ │ │ └── ReadController.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── FunctionController.java
│ │ │ │ │ └── ProcedureController.java
│ │ │ │ ├── sql/
│ │ │ │ │ └── SQLTemplateController.java
│ │ │ │ └── update/
│ │ │ │ └── UpdateController.java
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ ├── banner.txt
│ │ │ └── sql-templates/
│ │ │ ├── count.jte
│ │ │ ├── delete-mssql.jte
│ │ │ ├── delete.jte
│ │ │ ├── exists-mssql.jte
│ │ │ ├── exists.jte
│ │ │ ├── find-one.jte
│ │ │ ├── insert.jte
│ │ │ ├── read-mssql.jte
│ │ │ ├── read-ora-12.jte
│ │ │ ├── read-ora-9.jte
│ │ │ ├── read.jte
│ │ │ ├── update-mssql.jte
│ │ │ └── update.jte
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── homihq/
│ │ │ └── db2rest/
│ │ │ ├── BaseIntegrationTest.java
│ │ │ ├── DB2BaseIntegrationTest.java
│ │ │ ├── DB2ContainerConfiguration.java
│ │ │ ├── MariaDBBaseIntegrationTest.java
│ │ │ ├── MariaDBContainerConfiguration.java
│ │ │ ├── MsSQLServerContainerConfiguration.java
│ │ │ ├── MySQLBaseIntegrationTest.java
│ │ │ ├── MySQLContainerConfiguration.java
│ │ │ ├── OracleBaseIntegrationTest.java
│ │ │ ├── OracleContainerConfiguration.java
│ │ │ ├── PostgreSQLBaseIntegrationTest.java
│ │ │ ├── PostgreSQLContainerConfiguration.java
│ │ │ ├── SQLiteBaseIntegrationTest.java
│ │ │ ├── SQLiteContainerConfiguration.java
│ │ │ ├── jdbc/
│ │ │ │ └── rest/
│ │ │ │ └── meta/
│ │ │ │ ├── db/
│ │ │ │ │ ├── DbInfoControllerIntegrationTest.java
│ │ │ │ │ └── DbInfoControllerTest.java
│ │ │ │ └── schema/
│ │ │ │ ├── SchemaControllerIntegrationTest.java
│ │ │ │ └── SchemaControllerTest.java
│ │ │ └── rest/
│ │ │ ├── DateTimeUtil.java
│ │ │ ├── cors/
│ │ │ │ └── CorsTest.java
│ │ │ ├── db2/
│ │ │ │ ├── Db2BulkCreateControllerTest.java
│ │ │ │ ├── Db2CountControllerTest.java
│ │ │ │ ├── Db2CreateControllerTest.java
│ │ │ │ ├── Db2DeleteAllTest.java
│ │ │ │ ├── Db2DeleteControllerTest.java
│ │ │ │ ├── Db2JsonFileCreateControllerTest.java
│ │ │ │ ├── Db2ProcedureControllerTest.java
│ │ │ │ ├── Db2RSqlOperatorReadControllerTest.java
│ │ │ │ ├── Db2ReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── Db2ReadControllerTest.java
│ │ │ │ ├── Db2TemplateControllerTest.java
│ │ │ │ └── Db2UpdateControllerTest.java
│ │ │ ├── docsSwagger/
│ │ │ │ ├── OpenApiSpecificationNoSecurityTest.java
│ │ │ │ └── OpenApiSpecificationWithSecurityTest.java
│ │ │ ├── mariadb/
│ │ │ │ ├── MariaDBBasicJoinControllerTest.java
│ │ │ │ ├── MariaDBBulkCreateControllerTest.java
│ │ │ │ ├── MariaDBCountControllerTest.java
│ │ │ │ ├── MariaDBCreateControllerTest.java
│ │ │ │ ├── MariaDBCrossJoinControllerTest.java
│ │ │ │ ├── MariaDBDeleteAllTest.java
│ │ │ │ ├── MariaDBDeleteControllerTest.java
│ │ │ │ ├── MariaDBFunctionControllerTest.java
│ │ │ │ ├── MariaDBInnerJoinControllerTest.java
│ │ │ │ ├── MariaDBInnerJoinMultiTableControllerTest.java
│ │ │ │ ├── MariaDBInnerSelfJoinControllerTest.java
│ │ │ │ ├── MariaDBJsonFileCreateControllerTest.java
│ │ │ │ ├── MariaDBProcedureControllerTest.java
│ │ │ │ ├── MariaDBRSqlOperatorReadControllerTest.java
│ │ │ │ ├── MariaDBReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── MariaDBReadControllerTest.java
│ │ │ │ ├── MariaDBTemplateControllerTest.java
│ │ │ │ ├── MariaDBUpdateControllerTest.java
│ │ │ │ └── MariadbDateTimeAllTest.java
│ │ │ ├── mssql/
│ │ │ │ ├── MsSQLBaseIntegrationTest.java
│ │ │ │ ├── MsSQLBasicJoinControllerTest.java
│ │ │ │ ├── MsSQLBulkCreateControllerTest.java
│ │ │ │ ├── MsSQLCountControllerTest.java
│ │ │ │ ├── MsSQLCreateControllerTest.java
│ │ │ │ ├── MsSQLCrossJoinControllerTest.java
│ │ │ │ ├── MsSQLDateTimeAllTest.java
│ │ │ │ ├── MsSQLDeleteControllerTest.java
│ │ │ │ ├── MsSQLDeleteWithNotAllowedSafeDeleteControllerTest.java
│ │ │ │ ├── MsSQLExistsControllerTest.java
│ │ │ │ ├── MsSQLFindOneControllerTest.java
│ │ │ │ ├── MsSQLFunctionControllerTest.java
│ │ │ │ ├── MsSQLInnerJoinControllerTest.java
│ │ │ │ ├── MsSQLInnerJoinMultiTableControllerTest.java
│ │ │ │ ├── MsSQLInnerSelfJoinControllerTest.java
│ │ │ │ ├── MsSQLJsonFileCreateControllerTest.java
│ │ │ │ ├── MsSQLProcedureControllerTest.java
│ │ │ │ ├── MsSQLRSqlOperatorReadControllerTest.java
│ │ │ │ ├── MsSQLReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── MsSQLReadControllerTest.java
│ │ │ │ └── MsSQLUpdateControllerTest.java
│ │ │ ├── mysql/
│ │ │ │ ├── CountTwoTablesSameNameDiffSchemaTest.java
│ │ │ │ ├── CreateTwoTablesSameNameDiffSchemaTest.java
│ │ │ │ ├── DeleteTwoTablesSameNameDiffSchemaTest.java
│ │ │ │ ├── MySQLBasicJoinControllerTest.java
│ │ │ │ ├── MySQLBulkCreateControllerTest.java
│ │ │ │ ├── MySQLCountControllerTest.java
│ │ │ │ ├── MySQLCreateControllerTest.java
│ │ │ │ ├── MySQLCrossJoinControllerTest.java
│ │ │ │ ├── MySQLDateTimeAllTest.java
│ │ │ │ ├── MySQLDeleteAllTest.java
│ │ │ │ ├── MySQLDeleteControllerTest.java
│ │ │ │ ├── MySQLFunctionControllerTest.java
│ │ │ │ ├── MySQLInnerJoinControllerTest.java
│ │ │ │ ├── MySQLInnerJoinMultiTableControllerTest.java
│ │ │ │ ├── MySQLInnerSelfJoinControllerTest.java
│ │ │ │ ├── MySQLJsonFileCreateControllerTest.java
│ │ │ │ ├── MySQLProcedureControllerTest.java
│ │ │ │ ├── MySQLRSqlOperatorReadControllerTest.java
│ │ │ │ ├── MySQLReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── MySQLReadControllerTest.java
│ │ │ │ ├── MySQLTemplateControllerTest.java
│ │ │ │ ├── MySQLUpdateControllerTest.java
│ │ │ │ ├── ReadTwoTablesSameNameDiffSchemaTest.java
│ │ │ │ └── UpdateTwoTablesSameNameDiffSchemaTest.java
│ │ │ ├── oracle/
│ │ │ │ ├── OracleBasicJoinControllerTest.java
│ │ │ │ ├── OracleBulkCreateControllerTest.java
│ │ │ │ ├── OracleCountControllerTest.java
│ │ │ │ ├── OracleCreateControllerTest.java
│ │ │ │ ├── OracleCrossJoinControllerTest.java
│ │ │ │ ├── OracleDateTimeAllTest.java
│ │ │ │ ├── OracleDeleteAllTest.java
│ │ │ │ ├── OracleDeleteControllerTest.java
│ │ │ │ ├── OracleInnerJoinControllerTest.java
│ │ │ │ ├── OracleInnerJoinMultiTableControllerTest.java
│ │ │ │ ├── OracleInnerSelfJoinControllerTest.java
│ │ │ │ ├── OracleJsonFileCreateControllerTest.java
│ │ │ │ ├── OracleProcedureControllerTest.java
│ │ │ │ ├── OracleRSqlOperatorReadControllerTest.java
│ │ │ │ ├── OracleReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── OracleReadControllerTest.java
│ │ │ │ ├── OracleTemplateControllerTest.java
│ │ │ │ └── OracleUpdateControllerTest.java
│ │ │ ├── pg/
│ │ │ │ ├── PGDateTimeAllTest.java
│ │ │ │ ├── PgBasicJoinControllerTest.java
│ │ │ │ ├── PgBulkCreateControllerTest.java
│ │ │ │ ├── PgCountControllerTest.java
│ │ │ │ ├── PgCreateControllerTest.java
│ │ │ │ ├── PgCrossJoinControllerTest.java
│ │ │ │ ├── PgDeleteAllTest.java
│ │ │ │ ├── PgDeleteControllerTest.java
│ │ │ │ ├── PgExtraFunctionControllerTest.java
│ │ │ │ ├── PgFunctionControllerTest.java
│ │ │ │ ├── PgInnerJoinControllerTest.java
│ │ │ │ ├── PgInnerJoinMultiTableControllerTest.java
│ │ │ │ ├── PgInnerSelfJoinControllerTest.java
│ │ │ │ ├── PgJsonFileCreateControllerTest.java
│ │ │ │ ├── PgMultiTenancyTest.java
│ │ │ │ ├── PgProcedureControllerTest.java
│ │ │ │ ├── PgRSqlOperatorReadControllerTest.java
│ │ │ │ ├── PgReadControllerDefaultFetchLimitTest.java
│ │ │ │ ├── PgReadControllerTest.java
│ │ │ │ ├── PgTemplateControllerTest.java
│ │ │ │ └── PgUpdateControllerTest.java
│ │ │ └── sqlite/
│ │ │ ├── SQLiteBulkCreateControllerTest.java
│ │ │ ├── SQLiteCountControllerTest.java
│ │ │ ├── SQLiteCreateControllerTest.java
│ │ │ ├── SQLiteCrossJoinControllerTest.java
│ │ │ ├── SQLiteDateTimeAllTest.java
│ │ │ ├── SQLiteDeleteControllerTest.java
│ │ │ ├── SQLiteInnerJoinControllerTest.java
│ │ │ ├── SQLiteJsonFileCreateControllerTest.java
│ │ │ ├── SQLiteRSqlOperatorReadControllerTest.java
│ │ │ ├── SQLiteReadControllerTest.java
│ │ │ ├── SQLiteTemplateControllerTest.java
│ │ │ └── SQLiteUpdateControllerTest.java
│ │ └── resources/
│ │ ├── application-it-db2.yaml
│ │ ├── application-it-mariadb.yaml
│ │ ├── application-it-mssql.yaml
│ │ ├── application-it-mysql.yaml
│ │ ├── application-it-oracle.yaml
│ │ ├── application-it-pg-mutlitenancy.yaml
│ │ ├── application-it-pg.yaml
│ │ ├── application-it-sqlite.yaml
│ │ ├── auth-apiKey-test.yaml
│ │ ├── auth-basic.yaml
│ │ ├── db2/
│ │ │ ├── db2-sakila-data.sql
│ │ │ └── db2-sakila.sql
│ │ ├── junit-platform.properties
│ │ ├── mariadb/
│ │ │ ├── mariadb-sakila-data.sql
│ │ │ └── mariadb-sakila.sql
│ │ ├── mssql/
│ │ │ ├── mssql-sakila-data.sql
│ │ │ └── mssql-sakila.sql
│ │ ├── mysql/
│ │ │ ├── mysql-sakila-data.sql
│ │ │ ├── mysql-sakila.sql
│ │ │ └── mysql-wakila-all.sql
│ │ ├── oracle/
│ │ │ ├── oracle-sakila-data.sql
│ │ │ └── oracle-sakila.sql
│ │ ├── pg/
│ │ │ ├── pg-sakila-functions.sql
│ │ │ ├── postgres-sakila-data.sql
│ │ │ └── postgres-sakila.sql
│ │ ├── sqlite/
│ │ │ ├── sqlite-sakila-data.sql
│ │ │ └── sqlite-sakila.sql
│ │ └── testdata/
│ │ ├── BULK_CREATE_ACTOR_REQUEST.json
│ │ ├── BULK_CREATE_DIRECTOR_BAD_REQUEST.json
│ │ ├── BULK_CREATE_DIRECTOR_REQUEST.json
│ │ ├── BULK_CREATE_FILM_BAD_REQUEST.json
│ │ ├── BULK_CREATE_FILM_REQUEST.json
│ │ ├── BULK_CREATE_REVIEW_REQUEST.json
│ │ ├── BULK_RESULT_ACTOR_QUERY.json
│ │ ├── CREATE_ACTOR_REQUEST.json
│ │ ├── CREATE_DIRECTOR_REQUEST.json
│ │ ├── CREATE_EMP_REQUEST.json
│ │ ├── CREATE_FILM_BAD_REQUEST_CSV.csv
│ │ ├── CREATE_FILM_REQUEST.json
│ │ ├── CREATE_FILM_REQUEST_CSV.csv
│ │ ├── CREATE_FILM_REQUEST_ERROR.json
│ │ ├── CREATE_FILM_REQUEST_MISSING_PAYLOAD.json
│ │ ├── CREATE_USER_REQUEST.json
│ │ ├── CREATE_VANITY_VAN_REQUEST.json
│ │ ├── CROSS_JOIN_TOPS.json
│ │ ├── CROSS_JOIN_TOPS_MSSQL.json
│ │ ├── CROSS_JOIN_TOPS_ORACLE.json
│ │ ├── CROSS_JOIN_TOPS_PG.json
│ │ ├── CROSS_JOIN_USERS.json
│ │ ├── CROSS_JOIN_USERS_MSSQL.json
│ │ ├── CROSS_JOIN_USERS_ORACLE.json
│ │ ├── CROSS_JOIN_USERS_PG.json
│ │ ├── EMPTY_ACTOR_QUERY.json
│ │ ├── INNER_JOIN.json
│ │ ├── INNER_JOIN_MULTI_TABLE.json
│ │ ├── INNER_JOIN_MULTI_TABLE_ORACLE.json
│ │ ├── INNER_JOIN_ORACLE.json
│ │ ├── INNER_SELF_JOIN.json
│ │ ├── INNER_SELF_JOIN_ORACLE.json
│ │ ├── LEFT_JOIN.json
│ │ ├── LEFT_JOIN_ORACLE.json
│ │ ├── RIGHT_JOIN.json
│ │ ├── RIGHT_JOIN_ORACLE.json
│ │ ├── SINGLE_RESULT_ACTOR_QUERY.json
│ │ ├── UPDATE_ACTOR_REQUEST.json
│ │ ├── UPDATE_EMPLOYEE_REQUEST.json
│ │ ├── UPDATE_FILMS_REQUEST.json
│ │ ├── UPDATE_FILM_REQUEST.json
│ │ ├── UPDATE_NON_EXISTING_FILM_REQUEST.json
│ │ ├── UPDATE_NON_EXISTING_TABLE.json
│ │ ├── actor.json
│ │ ├── actor5mb.json
│ │ ├── director.json
│ │ ├── sql-db2/
│ │ │ ├── conditional_render_and_op.sql
│ │ │ ├── conditional_render_join.sql
│ │ │ ├── select_all.sql
│ │ │ ├── select_by_id.sql
│ │ │ └── select_by_id_is_required.sql
│ │ ├── sql-mariadb/
│ │ │ ├── conditional_render_and_op.sql
│ │ │ ├── conditional_render_join.sql
│ │ │ ├── select_all.sql
│ │ │ ├── select_by_id.sql
│ │ │ └── select_by_id_is_required.sql
│ │ ├── sql-mysql/
│ │ │ ├── conditional_render_and_op.sql
│ │ │ ├── conditional_render_join.sql
│ │ │ ├── select_all.sql
│ │ │ ├── select_by_id.sql
│ │ │ └── select_by_id_is_required.sql
│ │ ├── sql-oracle/
│ │ │ ├── conditional_render_and_op.sql
│ │ │ ├── conditional_render_join.sql
│ │ │ ├── select_all.sql
│ │ │ ├── select_by_id.sql
│ │ │ └── select_by_id_is_required.sql
│ │ ├── sql-pg/
│ │ │ ├── conditional_render_and_op.sql
│ │ │ ├── conditional_render_join.sql
│ │ │ ├── delete_from_content.sql
│ │ │ ├── insert_from_content.sql
│ │ │ ├── select_all.sql
│ │ │ ├── select_by_id.sql
│ │ │ ├── select_by_id_from_content.sql
│ │ │ ├── select_by_id_is_required.sql
│ │ │ └── update_by_id_from_content.sql
│ │ └── sql-sqlite/
│ │ ├── conditional_render_and_op.sql
│ │ ├── conditional_render_join.sql
│ │ ├── select_all.sql
│ │ └── select_by_id.sql
│ ├── pom.xml
│ └── rest-common/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── homihq/
│ └── db2rest/
│ ├── bulk/
│ │ ├── CSVDataProcessor.java
│ │ ├── DataProcessor.java
│ │ ├── FileStreamObserver.java
│ │ ├── FileSubject.java
│ │ ├── JSONDataProcessor.java
│ │ └── JsonFileDataProcessor.java
│ ├── config/
│ │ ├── CorsConfigProperties.java
│ │ ├── DateTimeConfigProperties.java
│ │ ├── DateTimeConfiguration.java
│ │ ├── Db2RestConfigProperties.java
│ │ ├── MultiTenancy.java
│ │ └── OpenAPIConfiguration.java
│ ├── dtos/
│ │ └── BulkContext.java
│ ├── exception/
│ │ └── GlobalExceptionHandler.java
│ └── multidb/
│ ├── DatabaseConnectionDetail.java
│ ├── DatabaseProperties.java
│ └── EnvironmentProperties.java
├── db2rest-auth/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── homihq/
│ │ └── db2rest/
│ │ └── auth/
│ │ ├── AuthConfiguration.java
│ │ ├── AuthFilter.java
│ │ ├── data/
│ │ │ ├── ApiExcludedResource.java
│ │ │ ├── ApiKey.java
│ │ │ ├── ApiResource.java
│ │ │ ├── AuthData.java
│ │ │ ├── ResourceRole.java
│ │ │ ├── RoleDataFilter.java
│ │ │ ├── User.java
│ │ │ └── UserDetail.java
│ │ ├── datalookup/
│ │ │ ├── ApiAuthDataLookup.java
│ │ │ ├── AuthDataLookup.java
│ │ │ ├── AuthDataProperties.java
│ │ │ ├── FileAuthDataLookup.java
│ │ │ └── NoAuthdataLookup.java
│ │ ├── exception/
│ │ │ └── AuthException.java
│ │ ├── provider/
│ │ │ ├── AbstractAuthProvider.java
│ │ │ ├── apikey/
│ │ │ │ └── ApiKeyAuthProvider.java
│ │ │ ├── basic/
│ │ │ │ └── BasicAuthProvider.java
│ │ │ └── jwt/
│ │ │ ├── JwtAuthProvider.java
│ │ │ └── JwtProperties.java
│ │ └── unkey/
│ │ ├── UnKeyAuthConfiguration.java
│ │ ├── UnKeyAuthFilter.java
│ │ ├── service/
│ │ │ └── UnKeyAuthService.java
│ │ └── to/
│ │ ├── UnKeyVerifyRequest.java
│ │ └── UnKeyVerifyResponse.java
│ └── resources/
│ ├── auth-sample-api-key.yml
│ ├── auth-sample.json
│ └── auth-sample.yml
├── db2rest-core/
│ ├── db2rest-common/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── homihq/
│ │ └── db2rest/
│ │ ├── core/
│ │ │ ├── dto/
│ │ │ │ ├── CountResponse.java
│ │ │ │ ├── CreateBulkResponse.java
│ │ │ │ ├── CreateResponse.java
│ │ │ │ ├── DeleteResponse.java
│ │ │ │ ├── ExistsResponse.java
│ │ │ │ └── UpdateResponse.java
│ │ │ └── exception/
│ │ │ ├── AuthenticationFailedException.java
│ │ │ ├── DeleteOpNotAllowedException.java
│ │ │ ├── GenericDataAccessException.java
│ │ │ ├── InvalidColumnException.java
│ │ │ ├── InvalidOperatorException.java
│ │ │ ├── InvalidTableException.java
│ │ │ ├── PathVariableNamesMissingException.java
│ │ │ ├── PathVariableValuesMissingException.java
│ │ │ ├── PlaceholderConstraintException.java
│ │ │ ├── RpcException.java
│ │ │ ├── SqlTemplateNotFoundException.java
│ │ │ ├── SqlTemplateReadException.java
│ │ │ └── UnsupportedConstraintException.java
│ │ └── multidb/
│ │ └── DatabaseContextHolder.java
│ ├── pom.xml
│ ├── rdbms-common/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ ├── Dialect.java
│ │ └── model/
│ │ ├── ArrayTypeValueHolder.java
│ │ ├── Database.java
│ │ ├── DbAlias.java
│ │ ├── DbColumn.java
│ │ ├── DbJoin.java
│ │ ├── DbSort.java
│ │ ├── DbTable.java
│ │ └── DbWhere.java
│ └── rdbms-support/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── homihq/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ ├── JdbcManager.java
│ │ ├── JdbcOperationService.java
│ │ ├── core/
│ │ │ ├── DbOperationService.java
│ │ │ ├── SimpleRowMapper.java
│ │ │ └── service/
│ │ │ ├── BulkCreateService.java
│ │ │ ├── CountQueryService.java
│ │ │ ├── CreateService.java
│ │ │ ├── DeleteService.java
│ │ │ ├── ExistsQueryService.java
│ │ │ ├── FindOneService.java
│ │ │ ├── FunctionService.java
│ │ │ ├── JdbcBulkCreateService.java
│ │ │ ├── JdbcCountQueryService.java
│ │ │ ├── JdbcCreateService.java
│ │ │ ├── JdbcDeleteService.java
│ │ │ ├── JdbcExistsQueryService.java
│ │ │ ├── JdbcFindOneService.java
│ │ │ ├── JdbcFunctionService.java
│ │ │ ├── JdbcProcedureService.java
│ │ │ ├── JdbcReadService.java
│ │ │ ├── JdbcUpdateService.java
│ │ │ ├── JinJavaTemplateExecutorService.java
│ │ │ ├── ProcedureService.java
│ │ │ ├── ReadService.java
│ │ │ ├── SQLTemplateExecutorService.java
│ │ │ ├── SubRoutine.java
│ │ │ └── UpdateService.java
│ │ ├── dto/
│ │ │ ├── BindVariable.java
│ │ │ ├── CreateContext.java
│ │ │ ├── DeleteContext.java
│ │ │ ├── FnUtil.java
│ │ │ ├── InsertableColumn.java
│ │ │ ├── JoinDetail.java
│ │ │ ├── Placeholder.java
│ │ │ ├── QueryRequest.java
│ │ │ ├── ReadContext.java
│ │ │ └── UpdateContext.java
│ │ ├── multidb/
│ │ │ ├── DbDetailHolder.java
│ │ │ └── RoutingDataSource.java
│ │ ├── processor/
│ │ │ ├── JoinProcessor.java
│ │ │ ├── OrderByProcessor.java
│ │ │ ├── ReadProcessor.java
│ │ │ ├── RootTableFieldProcessor.java
│ │ │ ├── RootTableProcessor.java
│ │ │ └── RootWhereProcessor.java
│ │ ├── rsql/
│ │ │ ├── operator/
│ │ │ │ ├── CustomRSQLOperators.java
│ │ │ │ ├── OperatorHandler.java
│ │ │ │ ├── OperatorMap.java
│ │ │ │ ├── RSQLOperatorHandlers.java
│ │ │ │ └── handler/
│ │ │ │ ├── EndWithOperatorHandler.java
│ │ │ │ ├── EqualToOperatorHandler.java
│ │ │ │ ├── GreaterThanEqualToOperatorHandler.java
│ │ │ │ ├── GreaterThanOperatorHandler.java
│ │ │ │ ├── InOperatorHandler.java
│ │ │ │ ├── IsNotNullOperatorHandler.java
│ │ │ │ ├── IsNullOperatorHandler.java
│ │ │ │ ├── JsonContainInArrayOperatorHandler.java
│ │ │ │ ├── JsonContainOperatorHandler.java
│ │ │ │ ├── JsonbContainOperatorHandler.java
│ │ │ │ ├── JsonbEqualToOperatorHandler.java
│ │ │ │ ├── JsonbKeyExistsOperatorHandler.java
│ │ │ │ ├── LessThanEqualToOperatorHandler.java
│ │ │ │ ├── LessThanOperatorHandler.java
│ │ │ │ ├── LikeOperatorHandler.java
│ │ │ │ ├── NotEqualToOperatorHandler.java
│ │ │ │ ├── NotInOperatorHandler.java
│ │ │ │ ├── NotLikeOperatorHandler.java
│ │ │ │ └── StartWithOperatorHandler.java
│ │ │ ├── parser/
│ │ │ │ └── RSQLParserBuilder.java
│ │ │ ├── resolver/
│ │ │ │ └── CrossTableColumnResolver.java
│ │ │ └── visitor/
│ │ │ └── BaseRSQLVisitor.java
│ │ ├── sql/
│ │ │ ├── ColumnLabel.java
│ │ │ ├── DB2DataExtraction.java
│ │ │ ├── DbMeta.java
│ │ │ ├── JdbcMetaDataProvider.java
│ │ │ ├── JdbcTypeJavaClassMappings.java
│ │ │ ├── MariaDBDataExtraction.java
│ │ │ ├── MetaDataExtraction.java
│ │ │ ├── MetaDataTable.java
│ │ │ ├── MsSQLServerMetaDataExtraction.java
│ │ │ ├── MySQLDataExtraction.java
│ │ │ ├── OracleMetaDataExtraction.java
│ │ │ ├── PostgreSQLDataExclusion.java
│ │ │ ├── SQLiteDataExtraction.java
│ │ │ ├── SqlCreatorTemplate.java
│ │ │ └── SqlTypes.java
│ │ ├── tsid/
│ │ │ └── TSIDProcessor.java
│ │ ├── util/
│ │ │ └── AliasGenerator.java
│ │ └── validator/
│ │ ├── ConstraintValidator.java
│ │ ├── CustomPlaceholderValidators.java
│ │ └── impl/
│ │ ├── IsRequiredValidator.java
│ │ └── IsUUIDValidator.java
│ └── test/
│ └── java/
│ └── com/
│ └── homihq/
│ └── db2rest/
│ └── jdbc/
│ ├── core/
│ │ └── service/
│ │ └── JdbcCreateServiceTest.java
│ ├── dto/
│ │ └── FnUtilTest.java
│ ├── util/
│ │ └── AliasGeneratorTest.java
│ └── validator/
│ ├── CustomPlaceholderValidatorsTest.java
│ └── impl/
│ ├── IsRequiredValidatorTest.java
│ └── IsUUIDValidatorTest.java
├── db2rest-dialects/
│ ├── db2-dialect/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── db2rest/
│ │ │ └── jdbc/
│ │ │ └── dialect/
│ │ │ └── DB2RestDB2Dialect.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── db2rest/
│ │ │ └── jdbc/
│ │ │ └── dialect/
│ │ │ ├── DB2RestDB2DialectTest.java
│ │ │ └── TestConfiguration.java
│ │ └── resources/
│ │ └── application-test.yml
│ ├── mariadb-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ └── MariaDBDialect.java
│ ├── mssql-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ └── MsSQLServerDialect.java
│ ├── mysql-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ └── DB2RestMySQLDialect.java
│ ├── oracle-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ └── OracleDialect.java
│ ├── oracle9i-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ └── OracleDialect.java
│ ├── pg-dialect/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── db2rest/
│ │ └── jdbc/
│ │ └── dialect/
│ │ ├── PostGreSQLDialect.java
│ │ └── driver/
│ │ ├── EnvVarSSLSocketFactory.java
│ │ └── PgSingleCertValidatingFactory.java
│ ├── pom.xml
│ └── sqlite-dialect/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── db2rest/
│ └── jdbc/
│ └── dialect/
│ └── SQLiteDialect.java
├── db2rest-oas3.json
├── design/
│ └── insert.md
├── docker-compose/
│ ├── db2/
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ └── init/
│ │ └── 01-create-schema.sql
│ ├── mariadb/
│ │ ├── api-interaction.sh
│ │ ├── docker-compose.yml
│ │ ├── init/
│ │ │ └── 01-init.sql
│ │ └── run.sh
│ ├── mysql/
│ │ ├── api-interaction.sh
│ │ ├── docker-compose.yml
│ │ ├── init/
│ │ │ └── 01-init.sql
│ │ └── run.sh
│ ├── oracle/
│ │ ├── api-interaction.sh
│ │ ├── docker-compose.yml
│ │ ├── init/
│ │ │ └── 01-init.sql
│ │ └── run.sh
│ ├── postgresql/
│ │ ├── api-interaction.sh
│ │ ├── docker-compose.yml
│ │ ├── init/
│ │ │ └── 01-init.sql
│ │ └── run.sh
│ └── sqlserver/
│ ├── api-interaction.sh
│ ├── docker-compose.yml
│ ├── init/
│ │ └── 01-init.sql
│ └── run.sh
├── fed/
│ └── federation.md
├── funding.json
├── integration-test-guideline.md
├── mvnw
├── mvnw.cmd
└── pom.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
src/test/resources/mysql/mysql-sakila.sql linguist-generated=true
src/test/resources/mysql/mysql-sakila-insert-data.sql linguist-generated=true
src/test/resources/pg/postgres-sakila.sql linguist-generated=true
# Always keep shell files with LF endings to avoid issues with runnning scripts in Windows WSL
# that need them to stay with LF endings and not CRLF. WSL is a Linux environment so needs LF endings.
.sh text eol=lf
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [9tigerio]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/RELEASING.md
================================================
# General
We use [semantic versioning](https://semver.org).
We publish our snapshots on [GitHub Packages](https://github.com/orgs/9tigerio/packages?repo_name=db2rest).
We publish our releases on [Maven Central Portal](https://central.sonatype.com/) (Sonatype) under our namespace [io.9tiger](https://central.sonatype.com/namespace/io.9tiger)
We publish a **snapshot** `-SNAPSHOT` version at any time by using the corresponding GitHub Action.
We publish a **release** version to [Maven Central Portal](https://central.sonatype.com/namespace/io.9tiger) at any time by using the corresponding GitHub Action.
After a release, we can also build and publish a Docker container image to our DockerHub (working account for now: [kdhrubo](https://hub.docker.com/r/kdhrubo/db2rest)) via the corresponding GitHub Action.
# GPG Key signing steps
Follow the guide at [Maven Central Portal distributing your public key](https://central.sonatype.org/publish/requirements/gpg/#distributing-your-public-key)
# Snapshots
Using GitHub workflow `.github/workflows/snapshot.yml`
# Make a New Release
Using GitHub workflow `.github/workflows/maven-central-publish.yml`
# Make a Docker image
Using GitHub workflow `.github/workflows/dockerhub-publish.yml` which will download the Maven Central packaged released version and build a Docker image and publish to DockerHub
================================================
FILE: .github/workflows/build-verify.yml
================================================
name: Build & Verify
on:
pull_request:
branches:
- master
push:
branches:
- 'feature/**'
workflow_dispatch:
env:
VERSION: '1.6.6-SNAPSHOT'
permissions: read-all
jobs:
build:
name: Maven Build & Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'liberica'
cache: 'maven'
- name: Build & Test
run: ./mvnw --quiet -Drevision=$VERSION --no-transfer-progress -B verify --file pom.xml
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
#- name: Update dependency graph
# uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
================================================
FILE: .github/workflows/dockerhub-publish.yml
================================================
# This workflow will download the Maven Central package and
# build Docker image and publish to DockerHub
name: Publish to DockerHub
on:
workflow_dispatch:
inputs:
DB2REST_VERSION:
description: 'DB2REST version that is already published in Maven Central'
required: true
default: '1.3.0'
# release:
# types: [created]
jobs:
build_docker_image:
runs-on: ubuntu-latest
env:
DB2REST_VERSION: ${{ github.event.inputs.DB2REST_VERSION }}
permissions:
contents: read
packages: write
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# In this following step, we use our Dockerfile
# to build the image (which has a `ADD` line to automatically
# download the versioned JAR file from Central Portal and
# adds it into a layer of the image)
- name: Build and push Docker images
uses: docker/build-push-action@v6
with:
# We use default Git context to build the Docker image,
# instead of PATH context `context: .`
push: true
tags: kdhrubo/db2rest:v${{ github.run_number }}, kdhrubo/db2rest:latest
build-args: DB2REST_VERSION=${{ env.DB2REST_VERSION }}
================================================
FILE: .github/workflows/maven-central-publish.yml
================================================
# This workflow will build a package using Maven and then publish it to Central Portal (Sonatype)
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#apache-maven-with-a-settings-path
name: Maven Default Publish
on:
release:
types: [created]
jobs:
build_and_test:
if: "!contains(github.event.head_commit.message, 'skip ci')"
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
name: Checkout code for Tag
with:
ref: ${{ github.event.release.tag_name }}
- name: Echo Tag
run: "echo 'CHECKED OUT TAG: ${{ github.event.release.tag_name }}'"
- name: Set up JDK 21 and maven settings.xml
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'liberica'
cache: 'maven'
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
server-id: central
# TROUBLESHOOTING: We can temporarily skip upload & publishing to Maven Central in here
# by setting the `run: mvn` line's last -DskipPublishing property to true
- name: Build & Publish package DB2Rest to Central
run: mvn --quiet -Drevision=${{ github.event.release.tag_name }} --no-transfer-progress -B deploy -P release -DskipTests -DskipPublishing=false
# below we use env for passing GPG stuff since the signing type is bouncy castle (bc)
# set in parent pom's maven-gpg-plugin configuration and doesn't need gpg agent.
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
MAVEN_GPG_KEY: ${{ secrets.MAVEN_GPG_KEY }}
# we unzip the central-bundle.zip so that we can access
# the db2rest JAR file path easily for Docker image build
- name: Unzip the central-bundle.zip & output JAR_FILE
id: unzip
run: |
mkdir staging
cp target/central-publishing/central-bundle.zip staging
unzip staging/central-bundle.zip -d staging
echo "JAR_FILE=staging/io/9tiger/api-rest/${{ github.event.release.tag_name }}/api-rest-${{ github.event.release.tag_name}}.jar" >> $GITHUB_ENV
- run: ls staging/io/9tiger/db2rest/${{ github.event.release.tag_name }}
- run: ls ${{ env.JAR_FILE }}
- name: Archive central-bundle JAR artifacts
uses: actions/upload-artifact@v4
with:
path: staging/central-bundle.zip
# - name: Build & Publish package Oracle9i to Central
# run: mvn -Drevision=${{ github.event.release.tag_name }} --no-transfer-progress -B deploy -P release --file api-rest/pom-oracle9i.xml -DskipTests
# env:
# MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
# MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
# MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
# MAVEN_GPG_KEY: ${{ secrets.MAVEN_GPG_KEY }}
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: "${{ github.workspace }}"
push: true
tags: kdhrubo/db2rest:v${{ github.event.release.tag_name }}, kdhrubo/db2rest:latest
build-args: |
JAR_FILE=${{ env.JAR_FILE }}
================================================
FILE: .github/workflows/oracle9i-central-publish.yml
================================================
# This workflow will build a package using Maven and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#apache-maven-with-a-settings-path
name: Oracle 9i Publish to Maven
on:
workflow_dispatch:
inputs:
version:
description: 'Version to publish, such as 1.3.0'
required: true
ref:
description: 'The Branch, Tag or SHA to checkout & publish'
required: true
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
name: Checkout code for Tag
with:
ref: ${{ github.event.inputs.ref }}
- name: Echo Tag
run: "echo 'CHECKED OUT TAG: ${{ github.event.inputs.ref }}'"
- name: Set up JDK 21 and maven settings.xml
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'liberica'
cache: 'maven'
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
server-id: central
- name: Publish package Oracle9i
run: mvn -Drevision=${{ github.event.inputs.version }} --no-transfer-progress -B deploy -P release --file api-rest/pom-oracle9i.xml -DskipTests
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
MAVEN_GPG_KEY: ${{ secrets.MAVEN_GPG_KEY }}
================================================
FILE: .github/workflows/snapshot.yml
================================================
name: Publish Snapshot to GitHub
on:
workflow_dispatch:
inputs:
version:
description: 'Version to publish, such as 1.3.0-SNAPSHOT'
required: true
default: '1.3.1-SNAPSHOT'
ref:
description: 'The Branch, Tag or SHA to use to publish Snapshot'
required: false
default: 'master'
permissions:
contents: write
packages: write
jobs:
build_snapshot:
name: Build Snapshot
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref }}
- name: Set up Java 21 and set GitHub for publishing in settings.xml
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: 21
cache: 'maven'
server-id: github
- name: Compile & Deploy to GitHub Packages
run: mvn -Drevision=${{ github.event.inputs.version }} --no-transfer-progress -B deploy -DdeployAtEnd --file pom.xml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update dependency graph
uses: advanced-security/maven-dependency-submission-action@v4.1.1
================================================
FILE: .gitignore
================================================
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.flattened-pom.xml
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.flattened-pom.xml
db2rest.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
## jte ##
/api-rest/jte-classes/**
/jte-classes/**
/env/
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
================================================
FILE: CONTRIBUTING.md
================================================
Thanks for showing interest to contribute to DB2Rest 💖, you rock!
When it comes to open source, there are different ways you can contribute, all
of which are valuable. Here's a few guidelines that should help you as you
prepare your contribution.
## Setup the Project
The following steps will get you up and running to contribute to DB2Rest:
1. Fork the repo (click the <kbd>Fork</kbd> button at the top right of
[this page on our GitHub](https://github.com/9tigerio/db2rest))
2. Clone your fork locally.
Use your IDE's Git features, or a terminal like this:
```sh
git clone https://github.com/<your_github_username>/db2rest.git
cd db2rest
```
1. Setup all the dependencies and packages by running:
```sh
mvnw compile
```
This command will install dependencies using the [maven wrapper](https://maven.apache.org/wrapper/) script.
> If you run into any issues during this step, kindly reach out to the DB2Rest
> team here: [](https://discord.gg/kqeDatPGwU)
## Development
DB2Rest uses a [monorepo](https://en.wikipedia.org/wiki/Monorepo) structure. To improve our development process, we've set up tooling and systems.
DB2Rest uses a [Maven modular project structure](https://maven.apache.org/guides/mini/guide-multiple-modules-4.html) with a parent `pom.xml` file, and child pom's in subfolders.
### Tooling
- [Maven](https://maven.apache.org/) to manage packages and dependencies.
- [Docker](https://docs.docker.com/) We use Docker for spinning up test containers used in testing.
On Linux, ensure docker is installed.
On Windows, [Docker Desktop](https://www.docker.com/products/docker-desktop/) is needed.
- [Spring Test](https://docs.spring.io/spring-framework/reference/testing/integration.html) for integration testing of our Java components.
### Testing
Database test configurations are found under: `\db2rest\api-rest\src\test\java\com\homihq\db2rest`.
### Commands
**`mvnw build`**: builds and compiles all DB2Rest packages into `/target` folders.
**`mvnw test`**: run tests for all DB2Rest packages.
**`mvnw verify`**: builds and then starts integration testing using test containers on docker.
### Release Process
See [.github/RELEASING.md](https://github.com/9tigerio/db2rest/blob/master/.github/RELEASING.md)
## Think you found a bug?
Create a [New GitHub Issue](https://github.com/9tigerio/db2rest/issues/new/choose) and please conform to the issue template and provide a clear path to reproduction
with a code example.
## Proposing new or changed API?
Please provide thoughtful comments and some sample API code. Proposals that
don't line up with our roadmap or don't have a thoughtful explanation will be
closed.
## Making a Pull Request?
Pull requests need only the :+1: of two or more collaborators to be merged; when
the PR author is a collaborator, that counts as one.
### Commit Convention
Before you create a Pull Request, please check whether your commits comply with
the commit conventions used in this repository.
When you create a commit we kindly ask you to follow the convention
`category(scope or module): message` in your commit message while using one of
the following categories:
- `feature`: all changes that introduce completely new code or new
features
- `fix`: changes that fix a bug (ideally you will additionally reference an
issue if present)
- `refactor`: any code related change that is not a fix nor a feature
- `docs`: changing existing or creating new documentation (i.e. README, Javadocs, code
comments, etc.
- `build`: all changes regarding the build of the software, changes to
dependencies or the addition of new dependencies
- `test`: all changes regarding tests (adding new tests or changing existing
ones)
- `ci`: all changes regarding the configuration of continuous integration (i.e.
github actions, ci system)
- `chore`: all changes to the repository that do not fit into any of the above
categories
If you are interested in the detailed specification you can visit
https://www.conventionalcommits.org/ or check out the
[Angular Commit Message Guidelines](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines).
### Steps to PR
1. Fork of the DB2Rest repository and clone your fork
2. Create a new branch out of the `master` branch. We follow the branch name convention
`[type/scope]`. For example `fix/rest-common` or `docs/api-rest`. `type`
can be either `docs`, `fix`, `feat`, `build`, or any other conventional
commit type. `scope` is just a short id that describes the scope of work.
3. Make and commit your changes following the
[commit convention](https://github.com/9tigerio/db2rest/blob/master/CONTRIBUTING.md#commit-convention).
As you develop, you can run `mvnw <module> compile` and
`mvnw <module> test` to make sure everything works as expected. Please
note that you might have to run `mvnw compile` first in order to build all
dependencies for testing.
### Tests
All commits that fix bugs or add features SHOULD add a test.
## Want to write a blog post or tutorial
That would be amazing! Reach out to the core team here:
https://discord.gg/kqeDatPGwU. We would love to support you any way we can.
## Want to help improve the docs?
Our docsite lives in a
[separate repo](https://github.com/9tigerio/db2rest-web). If you're
interested in contributing to the documentation, check out the
[docsite contribution guide](https://github.com/9tigerio/db2rest-web/blob/master/CONTRIBUTING.md).
## License
By contributing your code to the DB2Rest GitHub repository, you agree to
license your contribution under the [Apache-2.0 license](https://github.com/9tigerio/db2rest/blob/master/LICENSE).
================================================
FILE: Dockerfile
================================================
FROM bellsoft/liberica-runtime-container:jre-21-cds-slim-musl
ARG JAR_FILE=db2rest.jar
COPY ${JAR_FILE} /opt/app/db2rest.jar
# cd /opt/app
WORKDIR /opt/app
# uncomment EXPOSE if you wish to automatically expose
# port 8080 (default service port) upon container start
# otherwise you can map the port on docker run with `-p 1234:8080`
# EXPOSE 8080
# java -jar /opt/app/db2rest.jar
ENTRYPOINT ["java","-jar","db2rest.jar"]
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
DB2Rest is a modern low code REST DATA API platform that automatically creates a secure REST API endpoint
for your databases making it easy to build intelligent applications 30x faster. No ORM, no code generation = FAST!
It combines existing/new databases and data-sources with language models (LM/LLMs) and vector stores to rapidly
deliver context-aware, reasoning applications without any vendor lock-in. :bulb:
:star: If you find DB2Rest useful, please consider adding a star on GitHub! Your support motivates us to add new exciting features.

[](https://github.com/kdhrubo/db2rest/issues)
[](https://github.com/kdhrubo/db2rest/stargazers)




[](https://github.com/kdhrubo/db2rest)


[](https://twitter.com/db2rest)
# Website
[https://db2rest.com](https://db2rest.com)
# Latest Release
| Release | Download/Docker Pull |
|----------------------|----------------------------------------------------------------------------------|
| 1.6.8 | [DB2Rest-1.6.8](https://download.db2rest.com/db2rest-1.6.8.jar) |
| 1.6.8 (Docker Image) | ` docker pull kdhrubo/db2rest:v1.6.8 ` or ` docker pull kdhrubo/db2rest:latest ` |
# Last Stable Oracle 9i Release
| Release | Download/Docker Pull |
|--------------------------------------------|-----------------------------------------------------------------------------------|
| Oracle9i - 1.2.3 <b><mark>Final</mark></b> | [DB2Rest-Oracle9i-1.2.3](https://download.db2rest.com/db2rest-oracle9i-1.2.3.jar) |
# Quick start guides
[On premise / On Virtual Machines installation guide](https://db2rest.com/docs/intro).
[Docker based installation guide](https://db2rest.com/docs/run-db2rest-on-docker).
# Use Cases
## Accelerate Application Delivery
DB2Rest provides instant REST API(no code generation) to boost development by 30x. No need to write any code and best practices are built-in saving engineering teams
months of effort and cost.
## Faster innovation with Gen AI
DB2Rest works hand in glove with modern vector databases and LLM implementations to provide consistent Web APIs to deliver smart applications.
## Secure Database Gateway
DB2Rest works as a secure database gateway. This helps enterprises to open up data to internal developers and partners in a safe and agile way which was not possible earlier.
## Simplify Integration, Secure data exchange
Often enterprises export data from databases and share large files using SFTP, S3 etc. This process is slow, complex, error-prone and often very costly.
It requires heavy maintenance cost and it is not possible to share data in realtime.
Using DB2Rest, it is possible to simplify the process and allow secure data exchange with other parts of the organization without
writing a single line of code. There is no direct database based point to point integration and data is available to query anytime.
# Supported Databases
- **PostgreSQL**
- **MySQL**
- **SQLLite**
- **MS SQL Server**
- **Oracle** (Including 9i, 10g)
- **IBM DB2** (11.5.8.0+)
- **DigitalOcean PostgreSQL**
- **DigitalOcean MySQL**
- **AWS RDS Postgres**
- **AWS RDS MySQL**
- **MariaDB**
- **CockroachDB**
- **Neon**
- **Amazon Lightsail PostgreSQL**
- **Amazon Lightsail MySQL**
# Planned Database Support
- **Yugabyte**
- **PlanetScale**
- **CrunchyData**
- **MindsDB**
- DuckDB
# Contributing
Feel like contributing? That's awesome! We have a [contributing guide](https://github.com/9tigerio/db2rest/blob/master/CONTRIBUTING.md) to help guide you.
Our docsite lives in a [separate repo](https://github.com/9tigerio/db2rest-web). If you're interested in contributing to the documentation, check out the docsite contribution guide.
# Building
Use `mvn verify` or `mvn clean package` , etc. from repo root folder, and pass in a value for `revision` to override the current default version in POMs:
`mvn -Drevision="1.5.4-SNAPSHOT" clean package -DskipTests`
# Testing
Running tests simply requires a Docker daemon running, where the build will automatically pull and run testcontainers for the database tests.
# Support
*Connect on Discord*
https://discord.gg/kqeDatPGwU
[](https://discord.gg/kqeDatPGwU)
# Contact
<help@db2rest.com>
# Roadmap
Refer to [open roadmap](https://db2rest.com/roadmap/) items.
# IDE Sponsor

================================================
FILE: db2rest-api/api-rest/pom-oracle9i.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.9tiger</groupId>
<artifactId>db2rest-parent</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
<!-- lookup parent from repository -->
</parent>
<groupId>io.9tiger</groupId>
<artifactId>db2rest-oracle9i</artifactId>
<name>db2rest-oracle9i</name>
<description>db2rest-oracle9i</description>
<packaging>jar</packaging>
<properties>
<java.version>21</java.version>
<spring-restdocs.version>3.0.1</spring-restdocs.version>
</properties>
<dependencies>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>auth</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>rest-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mongo-support</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>rdbms-support</artifactId>
<version>${project.version}</version>
</dependency>
<!--TODO - Remove -->
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>pg-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mysql-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mariadb-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mssql-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>oracle9i-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>oracle-xe</artifactId>
<version>1.19.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mariadb</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mssqlserver</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.hosuaby</groupId>
<artifactId>inject-resources-junit-jupiter</artifactId>
<version>0.3.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-datadog</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>db2rest-oracle9i</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>${spring-restdocs.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: db2rest-api/api-rest/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.9tiger</groupId>
<artifactId>db2rest-api</artifactId>
<version>${revision}</version>
<relativePath>../</relativePath>
</parent>
<artifactId>api-rest</artifactId>
<packaging>jar</packaging>
<name>db2rest</name>
<description>db2rest</description>
<dependencies>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>db2rest-auth</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>db2rest-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>rest-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>rdbms-support</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>pg-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mysql-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mariadb-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>oracle-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>mssql-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.9tiger</groupId>
<artifactId>db2-dialect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.1</version>
</dependency>
<dependency>
<groupId>com.hubspot.jinjava</groupId>
<artifactId>jinjava</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<scope>runtime</scope>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>oracle-xe</artifactId>
<version>1.19.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-db2</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mariadb</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mssqlserver</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.hosuaby</groupId>
<artifactId>inject-resources-junit-jupiter</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-datadog</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>db2rest</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>gg.jte</groupId>
<artifactId>jte-maven-plugin</artifactId>
<version>${jte.version}</version>
<configuration>
<!-- This is the directory where your .jte files are located. -->
<sourceDirectory>${project.basedir}/src/main/resources/sql-templates</sourceDirectory>
<contentType>Plain</contentType>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>${spring-restdocs.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: db2rest-api/api-rest/sample-config/application-db.yml
================================================
app:
databases:
- id: ${DB_NAME:pgdb}
type: POSTGRESQL
url: jdbc:postgresql://localhost:5432/homidb
username: homi2022
password: homi2022
schemas:
- public
- joinplay
connectionProperties:
ssl: false
envProperties: # Not used yet
enableDatetimeFormatting: ${ENABLE_DATETIME_FORMATTING:false}
timeFormat: ${TIME_FORMAT:HH:mm:ss}
dateFormat: ${DATE_FORMAT:yyyy-MM-dd}
dateTimeFormat: ${DATE_TIME_FORMAT:yyyy-MM-dd HH:mm:ss}
defaultFetchLimit : ${DEFAULT_FETCH_LIMIT:100}
================================================
FILE: db2rest-api/api-rest/sample-config/application-local.yml
================================================
app:
databases:
- id: DB1
type: POSTGRESQL
url: jdbc:postgresql://localhost:5432/homidb
username: homi2022
password: homi2022
- id: DB2
type: MYSQL
url: jdbc:mysql://localhost:3306/sakila
username: root
password: "@Kolkata84"
================================================
FILE: db2rest-api/api-rest/sample-config/application-mongo.yml
================================================
app:
databases:
- id: DB1
type: POSTGRESQL
url: jdbc:postgresql://localhost:5432/homidb
username: homi2022
password: homi2022
connectionProperties:
ssl: false
envProperties: # Not used yet
enableDatetimeFormatting: true
timeFormat: 'HH:mm:ss'
dateFormat: 'dd-MM-yyyy'
dateTimeFormat: 'dd-MM-yyyy HH:mm:ss'
defaultFetchLimit : 100
================================================
FILE: db2rest-api/api-rest/sample-config/application-pg15.yml
================================================
app:
databases:
- id: ${DB_NAME:pgdb}
type: POSTGRESQL
url: jdbc:postgresql://localhost:5432/postgres
username: postgres
password:
================================================
FILE: db2rest-api/api-rest/sample-config/application-pg16.yml
================================================
app:
databases:
- id: ${DB_NAME:pgdb}
type: POSTGRESQL
url: jdbc:postgresql://localhost:5432/postgres
username: postgres
password:
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/Db2restApplication.java
================================================
package com.homihq.db2rest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoAutoConfiguration.class})
@ComponentScan(excludeFilters = @ComponentScan.Filter(RestController.class))
public class Db2restApplication {
public static void main(String[] args) {
SpringApplication.run(Db2restApplication.class, args);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/CorsFilterConfiguration.java
================================================
package com.homihq.db2rest.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Configuration
public class CorsFilterConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnProperty(name = "cors.enabled", havingValue = "true")
public CorsFilter corsFilter(CorsConfigProperties properties) {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
for (CorsConfigProperties.CorsMapping mapping : properties.getMappings()) {
CorsConfiguration config = new CorsConfiguration();
// Process allowed origins (trim, remove duplicates)
List<String> allowedOrigins = Arrays.stream(mapping.getAllowedOrigins().split(","))
.map(String::trim)
.distinct()
.collect(Collectors.toList());
config.setAllowedOrigins(allowedOrigins);
// Process allowed headers (trim, remove duplicates)
List<String> allowedHeaders = Arrays.stream(mapping.getAllowedHeaders().split(","))
.map(String::trim)
.distinct()
.collect(Collectors.toList());
config.setAllowedHeaders(allowedHeaders);
// Process allowed methods (trim, remove duplicates)
List<String> allowedMethods = Arrays.stream(mapping.getAllowedMethods().split(","))
.map(String::trim)
.distinct()
.collect(Collectors.toList());
config.setAllowedMethods(allowedMethods);
log.info("CORS Config -> Path: {}, Origins: {} , Headers: {}, Methods: {}" ,
mapping.getMapping() , allowedOrigins, allowedHeaders , allowedMethods);
source.registerCorsConfiguration(mapping.getMapping(), config);
}
return new CorsFilter(source);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/DbServiceConfiguration.java
================================================
package com.homihq.db2rest.config;
import com.db2rest.jdbc.dialect.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.homihq.db2rest.bulk.DataProcessor;
import com.homihq.db2rest.bulk.FileSubject;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.homihq.db2rest.jdbc.JdbcOperationService;
import com.homihq.db2rest.config.jinjava.DisabledExpressionTokenScannerSymbols;
import com.homihq.db2rest.jdbc.core.DbOperationService;
import com.homihq.db2rest.jdbc.core.service.*;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import com.homihq.db2rest.jdbc.processor.*;
import com.homihq.db2rest.jdbc.sql.SqlCreatorTemplate;
import com.homihq.db2rest.jdbc.tsid.TSIDProcessor;
import com.homihq.db2rest.jdbc.validator.CustomPlaceholderValidators;
import com.homihq.db2rest.multidb.DatabaseConnectionDetail;
import com.homihq.db2rest.multidb.DatabaseProperties;
import com.hubspot.jinjava.Jinjava;
import com.hubspot.jinjava.JinjavaConfig;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import gg.jte.CodeResolver;
import gg.jte.ContentType;
import gg.jte.TemplateEngine;
import gg.jte.resolve.ResourceCodeResolver;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Configuration
@RequiredArgsConstructor
public class DbServiceConfiguration {
private final DatabaseProperties databaseProperties;
private final ObjectMapper objectMapper;
@Bean
@ConditionalOnMissingBean(DataSource.class)
public DataSource dataSource() {
final Map<Object, Object> dataSources = this.buildDataSources();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(dataSources);
return routingDataSource;
}
private Map<Object, Object> buildDataSources() {
final Map<Object, Object> result = new HashMap<>();
log.debug("Databases - {}", databaseProperties.getDatabases());
if (!databaseProperties.isRdbmsConfigured()) {
log.info("*** No RDBMS configured.");
return result;
}
for (DatabaseConnectionDetail connectionDetail : databaseProperties.getDatabases()) {
if (connectionDetail.isJdbcPresent())
result.put(connectionDetail.id(), this.buildDataSource(connectionDetail));
}
return result;
}
private DataSource buildDataSource(DatabaseConnectionDetail connectionDetail) {
final HikariConfig config = new HikariConfig();
config.setJdbcUrl(connectionDetail.url());
config.setUsername(connectionDetail.username());
config.setPassword(connectionDetail.password());
config.setMaximumPoolSize(connectionDetail.maxConnections());
config.setAutoCommit(false);
return new HikariDataSource(config);
}
@Bean
public JdbcManager jdbcManager() {
List<Dialect> dialects = List.of(
new PostGreSQLDialect(objectMapper),
new DB2RestMySQLDialect(objectMapper),
new MariaDBDialect(objectMapper),
new OracleDialect(objectMapper),
new MsSQLServerDialect(objectMapper),
new SQLiteDialect(objectMapper),
new DB2RestDB2Dialect(objectMapper)
);
return new JdbcManager(dataSource(), dialects, databaseProperties);
}
@Bean
public JdbcOperationService operationService() {
return new JdbcOperationService();
}
@Bean
public SqlCreatorTemplate sqlCreatorTemplate(TemplateEngine templateEngine, JdbcManager jdbcManager) {
return new SqlCreatorTemplate(templateEngine, jdbcManager);
}
@Bean
public TemplateEngine templateEngine() {
CodeResolver codeResolver =
new ResourceCodeResolver("sql-templates");
return TemplateEngine
.createPrecompiled(ContentType.Plain);
}
@Bean
public Jinjava jinjava() {
JinjavaConfig config = JinjavaConfig
.newBuilder()
.withTokenScannerSymbols(new DisabledExpressionTokenScannerSymbols())
.build();
return new Jinjava(config);
}
//START ::: Processors
@Bean
public TSIDProcessor tsidProcessor() {
return new TSIDProcessor();
}
@Bean
public JoinProcessor joinProcessor(JdbcManager jdbcManager) {
return new JoinProcessor(jdbcManager);
}
@Bean
public OrderByProcessor orderByProcessor() {
return new OrderByProcessor();
}
@Bean
public RootTableFieldProcessor rootTableFieldProcessor() {
return new RootTableFieldProcessor();
}
@Bean
public RootTableProcessor rootTableProcessor(JdbcManager jdbcManager) {
return new RootTableProcessor(jdbcManager);
}
@Bean
public RootWhereProcessor rootWhereProcessor(JdbcManager jdbcManager) {
return new RootWhereProcessor(jdbcManager);
}
//END ::: Processors
//START ::: Validator
@Bean
public CustomPlaceholderValidators customPlaceholderValidators() {
return new CustomPlaceholderValidators();
}
//END ::: Validator
//START ::: Service
//CREATE SERVICE
@Bean
public BulkCreateService bulkCreateService(TSIDProcessor tsidProcessor,
SqlCreatorTemplate sqlCreatorTemplate,
JdbcManager jdbcManager,
DbOperationService dbOperationService,
List<DataProcessor> dataProcessors,
FileSubject fileSubject) {
return new JdbcBulkCreateService(tsidProcessor, sqlCreatorTemplate, jdbcManager, dbOperationService, fileSubject);
}
@Bean
public CreateService createService(TSIDProcessor tsidProcessor,
SqlCreatorTemplate sqlCreatorTemplate,
JdbcManager jdbcManager,
DbOperationService dbOperationService) {
return new JdbcCreateService(tsidProcessor, sqlCreatorTemplate, jdbcManager, dbOperationService);
}
//QUERY SERVICE
@Bean
public CountQueryService countQueryService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
List<ReadProcessor> processorList,
DbOperationService dbOperationService) {
return new JdbcCountQueryService(
jdbcManager,
dbOperationService, processorList, sqlCreatorTemplate);
}
@Bean
public ExistsQueryService existsQueryService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
List<ReadProcessor> processorList,
DbOperationService dbOperationService) {
return new JdbcExistsQueryService(jdbcManager, dbOperationService, processorList, sqlCreatorTemplate);
}
@Bean
public FindOneService findOneService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
List<ReadProcessor> processorList,
DbOperationService dbOperationService) {
return new JdbcFindOneService(jdbcManager, sqlCreatorTemplate, processorList, dbOperationService);
}
@Bean
public ReadService readService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
List<ReadProcessor> processorList,
DbOperationService dbOperationService) {
return new JdbcReadService(jdbcManager, dbOperationService, processorList, sqlCreatorTemplate);
}
//UPDATE SERVICE
@Bean
public UpdateService updateService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
DbOperationService dbOperationService) {
return new JdbcUpdateService(jdbcManager, sqlCreatorTemplate, dbOperationService);
}
//DELETE SERVICE
@Bean
public DeleteService deleteService(
JdbcManager jdbcManager,
SqlCreatorTemplate sqlCreatorTemplate,
DbOperationService dbOperationService) {
return new JdbcDeleteService(jdbcManager, sqlCreatorTemplate, dbOperationService);
}
//RPC
@Bean
public FunctionService functionService(JdbcManager jdbcManager) {
return new JdbcFunctionService(jdbcManager);
}
@Bean
public ProcedureService procedureService(JdbcManager jdbcManager) {
return new JdbcProcedureService(jdbcManager);
}
@Bean
public SQLTemplateExecutorService templateService(
Jinjava jinjava,
Db2RestConfigProperties db2RestConfigProperties,
DbOperationService dbOperationService,
JdbcManager jdbcManager,
CustomPlaceholderValidators customPlaceholderValidators
) {
return new JinJavaTemplateExecutorService(
jinjava,
db2RestConfigProperties,
dbOperationService,
jdbcManager,
customPlaceholderValidators
);
}
//END ::: Services
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/RestApiConfiguration.java
================================================
package com.homihq.db2rest.config;
import com.homihq.db2rest.bulk.DataProcessor;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.homihq.db2rest.jdbc.core.service.*;
import com.homihq.db2rest.rest.admin.AdminController;
import com.homihq.db2rest.rest.create.BulkCreateController;
import com.homihq.db2rest.rest.create.CreateController;
import com.homihq.db2rest.rest.delete.DeleteController;
import com.homihq.db2rest.rest.meta.db.DbInfoController;
import com.homihq.db2rest.rest.meta.schema.SchemaController;
import com.homihq.db2rest.rest.read.CountQueryController;
import com.homihq.db2rest.rest.read.ExistsQueryController;
import com.homihq.db2rest.rest.read.FindOneController;
import com.homihq.db2rest.rest.read.ReadController;
import com.homihq.db2rest.rest.rpc.FunctionController;
import com.homihq.db2rest.rest.rpc.ProcedureController;
import com.homihq.db2rest.rest.sql.SQLTemplateController;
import com.homihq.db2rest.rest.update.UpdateController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@Slf4j
@Configuration
public class RestApiConfiguration {
//START ::: API
//CREATE API
@Bean
@ConditionalOnBean(BulkCreateService.class)
public BulkCreateController bulkCreateController(BulkCreateService bulkCreateService, List<DataProcessor> dataProcessors) {
return new BulkCreateController(bulkCreateService, dataProcessors);
}
@Bean
@ConditionalOnBean(CreateService.class)
public CreateController createController(CreateService createService) {
return new CreateController(createService);
}
//READ API
@Bean
@ConditionalOnBean(CountQueryService.class)
public CountQueryController countQueryController(CountQueryService countQueryService) {
return new CountQueryController(countQueryService);
}
@Bean
@ConditionalOnBean(ExistsQueryService.class)
public ExistsQueryController existsQueryController(ExistsQueryService existsQueryService) {
return new ExistsQueryController(existsQueryService);
}
@Bean
@ConditionalOnBean(FindOneService.class)
public FindOneController findOneController(FindOneService findOneService) {
return new FindOneController(findOneService);
}
@Bean
@ConditionalOnBean(ReadService.class)
public ReadController readController(ReadService readService, Db2RestConfigProperties configProperties) {
return new ReadController(readService, configProperties);
}
//UPDATE API
@Bean
@ConditionalOnBean(UpdateService.class)
public UpdateController updateController(UpdateService updateService) {
return new UpdateController(updateService);
}
//DELETE API
@Bean
@ConditionalOnBean(DeleteService.class)
public DeleteController deleteController(DeleteService deleteService, Db2RestConfigProperties configProperties) {
return new DeleteController(deleteService, configProperties);
}
//RPC
@Bean
@ConditionalOnBean(FunctionService.class)
public FunctionController functionController(FunctionService functionService) {
return new FunctionController(functionService);
}
@Bean
@ConditionalOnBean(ProcedureService.class)
public ProcedureController procedureController(ProcedureService procedureService) {
return new ProcedureController(procedureService);
}
@Bean
@ConditionalOnBean(JdbcManager.class)
public SchemaController schemaController(JdbcManager jdbcManager) {
return new SchemaController(jdbcManager);
}
@Bean
@ConditionalOnBean(SQLTemplateExecutorService.class)
public SQLTemplateController sqlTemplateController(
SQLTemplateExecutorService sqlTemplateExecutorService
) {
return new SQLTemplateController(sqlTemplateExecutorService);
}
@Bean
@ConditionalOnBean(JdbcManager.class)
public DbInfoController dbInfoController(JdbcManager jdbcManager) {
return new DbInfoController(jdbcManager);
}
@Bean
@ConditionalOnBean(JdbcManager.class)
public AdminController adminController(JdbcManager jdbcManager) {
return new AdminController(jdbcManager);
}
//END ::: API
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/WebMvcConfiguration.java
================================================
package com.homihq.db2rest.config;
import com.homihq.db2rest.interceptor.DatabaseContextRequestInterceptor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@RequiredArgsConstructor
@Slf4j
public class WebMvcConfiguration implements WebMvcConfigurer {
private final DatabaseContextRequestInterceptor databaseContextRequestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(databaseContextRequestInterceptor);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/jinjava/DisabledExpressionTokenScannerSymbols.java
================================================
package com.homihq.db2rest.config.jinjava;
import com.hubspot.jinjava.tree.parse.DefaultTokenScannerSymbols;
public class DisabledExpressionTokenScannerSymbols extends DefaultTokenScannerSymbols {
@Override
public int getExprStart() {
return 0;
}
@Override
public int getExprEnd() {
return 0;
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/interceptor/DatabaseContextRequestInterceptor.java
================================================
package com.homihq.db2rest.interceptor;
import com.homihq.db2rest.core.exception.GenericDataAccessException;
import com.homihq.db2rest.multidb.DatabaseContextHolder;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.servlet.AsyncHandlerInterceptor;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@Slf4j
@Component
public class DatabaseContextRequestInterceptor implements AsyncHandlerInterceptor {
private final List<String> whiteList = List.of(
"/error", "/swagger-ui/**", "/v3/api-docs/**", "/actuator/**", "/admin/**",
VERSION + "/$dbs");
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
log.info("Pre handle - {}", request.getRequestURI());
if (!isWhileListed(request.getRequestURI())) {
final Map<String, String> pathVariables = (Map<String, String>) request
.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
log.info("pathVariables - {}", pathVariables);
if (Objects.isNull(pathVariables)) {
throw new GenericDataAccessException("Database ID not found.");
}
String dbId = pathVariables.get("dbId");
log.debug("Db identifier : {}", dbId);
if (StringUtils.isNotBlank(dbId)) {
this.setTenantContext(dbId);
} else {
log.info("DB could not be determined.");
throw new GenericDataAccessException("Database ID not found.");
}
}
return true;
}
private boolean isWhileListed(String uri) {
return whiteList.stream().anyMatch(w -> antPathMatcher.match(w, uri));
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
DatabaseContextHolder.clear();
}
private void setTenantContext(String tenant) {
DatabaseContextHolder.setCurrentDbId(tenant);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/RdbmsRestApi.java
================================================
package com.homihq.db2rest.rest;
public interface RdbmsRestApi {
String VERSION = "/v1/rdbms";
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/admin/AdminController.java
================================================
package com.homihq.db2rest.rest.admin;
import com.homihq.db2rest.jdbc.JdbcManager;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/admin")
@Slf4j
@RequiredArgsConstructor
public class AdminController {
private final JdbcManager jdbcManager;
@PostMapping("/reloadCache")
public void reloadCache(){
log.info("Reload cache request received.");
this.jdbcManager.reload();
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateController.java
================================================
package com.homihq.db2rest.rest.create;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.bulk.DataProcessor;
import com.homihq.db2rest.core.dto.CreateBulkResponse;
import com.homihq.db2rest.core.dto.CreateResponse;
import com.homihq.db2rest.core.exception.GenericDataAccessException;
import com.homihq.db2rest.dtos.BulkContext;
import com.homihq.db2rest.jdbc.core.service.BulkCreateService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@RestController
@Slf4j
@RequiredArgsConstructor
@EnableAsync
public class BulkCreateController implements BulkCreateRestApi {
private final BulkCreateService bulkCreateService;
private final List<DataProcessor> dataProcessors;
public CreateBulkResponse save(
List<RoleDataFilter> roleBasedDataFilters,
String dbId,
String tableName,
String schemaName,
List<String> includeColumns,
List<String> sequences,
boolean tsIdEnabled,
HttpServletRequest request) throws Exception {
DataProcessor dataProcessor = dataProcessors.stream()
.filter(d -> d.handle(request.getContentType()))
.findFirst().orElseThrow(() -> new GenericDataAccessException("Unable to process content type : "
+ request.getContentType()));
List<Map<String, Object>> data = dataProcessor.getData(request.getInputStream());
BulkContext context = new BulkContext(dbId, schemaName, tableName, includeColumns, tsIdEnabled, sequences, 0, roleBasedDataFilters);
return bulkCreateService.saveBulk(context, data);
}
@Override
public CompletableFuture<CreateResponse> saveMultipartFile(
List<RoleDataFilter> roleBasedDataFilters,
String dbId,
String tableName,
String schemaName,
List<String> includeColumns,
List<String> sequences,
boolean tsIdEnabled,
MultipartFile file) {
BulkContext context = new BulkContext(dbId, schemaName, tableName, includeColumns, tsIdEnabled, sequences, 0, roleBasedDataFilters);
return bulkCreateService.saveMultipartFile(context, file);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateRestApi.java
================================================
package com.homihq.db2rest.rest.create;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.core.dto.CreateBulkResponse;
import com.homihq.db2rest.core.dto.CreateResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
public interface BulkCreateRestApi {
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = VERSION + "/{dbId}/{tableName}/bulk", consumes = {"application/json", "text/csv"})
CreateBulkResponse save(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Content-Profile", required = false) String schemaName,
@RequestParam(name = "columns", required = false) List<String> includeColumns,
@RequestParam(name = "sequences", required = false) List<String> sequences,
@RequestParam(name = "tsIdEnabled", required = false, defaultValue = "false") boolean tsIdEnabled,
HttpServletRequest request) throws Exception;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = VERSION + "/{dbId}/{tableName}/upload", consumes = {"multipart/form-data", "application/json"})
CompletableFuture<CreateResponse> saveMultipartFile(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Content-Profile", required = false) String schemaName,
@RequestParam(name = "columns", required = false) List<String> includeColumns,
@RequestParam(name = "sequences", required = false) List<String> sequences,
@RequestParam(name = "tsIdEnabled", required = false, defaultValue = "false") boolean tsIdEnabled,
@RequestParam("file") MultipartFile file) throws Exception;
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateController.java
================================================
package com.homihq.db2rest.rest.create;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.RestController;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.core.dto.CreateResponse;
import com.homihq.db2rest.jdbc.core.service.CreateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@RestController
@Slf4j
@RequiredArgsConstructor
public class CreateController implements CreateRestApi {
private final CreateService createService;
@Override
public CreateResponse save(
List<RoleDataFilter> roleBasedDataFilters,
String dbId, String schemaName,
String tableName,
List<String> includeColumns,
List<String> sequences,
Map<String, Object> data,
boolean tsIdEnabled) {
MultiTenancy.addTenantColumns(data, dbId, tableName, roleBasedDataFilters);
return createService.save(dbId, schemaName, tableName, includeColumns, data, tsIdEnabled, sequences);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateRestApi.java
================================================
package com.homihq.db2rest.rest.create;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import java.util.List;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.core.dto.CreateResponse;
public interface CreateRestApi {
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(VERSION + "/{dbId}/{tableName}")
CreateResponse save(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@RequestHeader(name = "Content-Profile", required = false) String schemaName,
@PathVariable String tableName,
@RequestParam(name = "columns", required = false) List<String> includeColumns,
@RequestParam(name = "sequences", required = false) List<String> sequences,
@RequestBody Map<String, Object> data,
@RequestParam(name = "tsIdEnabled", required = false, defaultValue = "false") boolean tsIdEnabled);
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteController.java
================================================
package com.homihq.db2rest.rest.delete;
import java.util.List;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.Db2RestConfigProperties;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.core.dto.DeleteResponse;
import com.homihq.db2rest.jdbc.core.service.DeleteService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequiredArgsConstructor
public class DeleteController implements DeleteRestApi {
private final DeleteService deleteService;
private final Db2RestConfigProperties db2RestConfigProperties;
@Override
public DeleteResponse delete(
List<RoleDataFilter> roleBasedDataFilters,
String dbId,
String schemaName,
String tableName,
String filter
) {
db2RestConfigProperties.checkDeleteAllowed(filter);
int rows = deleteService.delete(dbId, schemaName, tableName,
MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters));
log.debug("Number of rows deleted - {}", rows);
return DeleteResponse.builder().rows(rows).build();
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteRestApi.java
================================================
package com.homihq.db2rest.rest.delete;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.core.dto.DeleteResponse;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import java.util.List;
public interface DeleteRestApi {
@ResponseStatus(HttpStatus.OK)
@DeleteMapping(VERSION + "/{dbId}/{tableName}")
DeleteResponse delete(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@RequestHeader(name = "Content-Profile", required = false) String schemaName,
@PathVariable String tableName,
@RequestParam(required = false, defaultValue = "") String filter);
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoController.java
================================================
package com.homihq.db2rest.rest.meta.db;
import com.homihq.db2rest.jdbc.JdbcManager;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@Slf4j
@RequiredArgsConstructor
public class DbInfoController implements DbInfoRestApi {
private final JdbcManager jdbcManager;
@Override
public List<DbInfoObject> getObjects() {
List<DbInfoObject> dbInfoObjects = new ArrayList<>();
jdbcManager.getDbMetaMap().forEach(
(k, v) -> dbInfoObjects.add(new DbInfoObject(k, v.productName(), v.majorVersion(), v.driverName(), v.driverVersion()))
);
return dbInfoObjects;
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoObject.java
================================================
package com.homihq.db2rest.rest.meta.db;
public record DbInfoObject(
String dbId,
String productName,
int majorVersion,
String driverName,
String driverVersion
) {}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoRestApi.java
================================================
package com.homihq.db2rest.rest.meta.db;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RequestMapping(VERSION + "/$dbs")
@Tag(name = "DB Info Objects", description = "Details the databases being managed by this instance of DB2Rest")
public interface DbInfoRestApi {
@Operation(summary = "Get all database info details",
description = "Get all database info details",
tags = {"DB Info Objects"}
)
@GetMapping()
List<DbInfoObject> getObjects();
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/ColumnObject.java
================================================
package com.homihq.db2rest.rest.meta.schema;
import com.db2rest.jdbc.dialect.model.DbColumn;
public record ColumnObject(String name, Boolean pk, String dataType) {
public ColumnObject(DbColumn dbColumn) {
this(
dbColumn.name(),
dbColumn.pk(),
dbColumn.columnDataTypeName()
);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaController.java
================================================
package com.homihq.db2rest.rest.meta.schema;
import com.homihq.db2rest.core.exception.GenericDataAccessException;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.db2rest.jdbc.dialect.model.DbTable;
import com.homihq.db2rest.jdbc.sql.DbMeta;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
/**
* provides methods to filter and retrieve schema objects from a database
*/
@RestController
@Slf4j
@RequiredArgsConstructor
public class SchemaController implements SchemaRestApi {
private final JdbcManager jdbcManager;
/**
* @param dbId database id from which to retrieve the schema objects
* @param filter filter conditions to match against a schema, name, or type
* @param columns include the column information for a table
* @return list of schema objects (schema, name, type) that match the filter conditions
*/
@Override
public List<? extends TableObject> getObjects(String dbId, String filter, Boolean columns) {
log.debug("Filter - {}", filter);
DbMeta dbMeta = jdbcManager.getDbMetaByDbId(dbId);
if (Objects.isNull(dbMeta)) {
return List.of();
}
SchemaFilter schemaFilter = getSchemaFilter(filter);
List<DbTable> dbTables = dbMeta.dbTables();
Function<DbTable, ? extends TableObject> tableMapper = columns
? TableWithColumnsObject::new
: TableObject::new;
if (Objects.isNull(schemaFilter)) {
return dbTables.stream().map(tableMapper).toList();
} else {
log.info("schemaFilter - {}", schemaFilter);
return dbTables.stream()
.filter(dbTable -> {
if (StringUtils.equals(schemaFilter.field, "schema")
&& StringUtils.containsIgnoreCase(dbTable.schema(), schemaFilter.value)) {
return true;
} else if (StringUtils.equals(schemaFilter.field, "name")
&& StringUtils.containsIgnoreCase(dbTable.name(), schemaFilter.value)) {
return true;
} else {
return StringUtils.equals(schemaFilter.field, "type")
&& StringUtils.containsIgnoreCase(dbTable.type(), schemaFilter.value);
}
})
.map(tableMapper).toList();
}
}
private SchemaFilter getSchemaFilter(String filter) {
if (StringUtils.isBlank(filter)) {
return null;
}
String[] fragments = filter.split("==");
if (fragments.length != 2) {
throw new GenericDataAccessException("Invalid filter condition. Only == supported for schema filter using a single value only.");
}
return new SchemaFilter(fragments[0], fragments[1]);
}
private record SchemaFilter(String field, String value) {
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaRestApi.java
================================================
package com.homihq.db2rest.rest.meta.schema;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RequestMapping(VERSION + "/{dbId}/$schemas")
@Tag(name = "Schema Objects", description = "Details about schemas and tables")
public interface SchemaRestApi {
@Operation(
summary = "Get all database objects for a given dbId",
description = "Get all database objects from all schemas/catalogs, tables, columns",
tags = {"Schema Objects"}
)
@ApiResponses(value = {
@ApiResponse(
responseCode = "200",
description = "Successful operation",
content = {
@Content(mediaType = "application/json",
schema = @Schema(oneOf = {TableObject.class, TableWithColumnsObject.class}))
}
)
})
@GetMapping()
List<? extends TableObject> getObjects(
@PathVariable String dbId,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter,
@RequestParam(name = "columns", required = false, defaultValue = "false") Boolean columns
);
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableObject.java
================================================
package com.homihq.db2rest.rest.meta.schema;
import com.db2rest.jdbc.dialect.model.DbTable;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@EqualsAndHashCode
@Getter
public class TableObject {
private final String schema;
private final String name;
private final String type;
public TableObject(DbTable dbTable) {
this.schema = dbTable.schema();
this.name = dbTable.name();
this.type = dbTable.type();
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableWithColumnsObject.java
================================================
package com.homihq.db2rest.rest.meta.schema;
import com.db2rest.jdbc.dialect.model.DbTable;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Getter
public class TableWithColumnsObject extends TableObject {
private final List<ColumnObject> columns;
public TableWithColumnsObject(DbTable dbTable) {
super(dbTable);
this.columns = dbTable.dbColumns().stream().map(ColumnObject::new).toList();
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/CountQueryController.java
================================================
package com.homihq.db2rest.rest.read;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.core.dto.CountResponse;
import com.homihq.db2rest.jdbc.core.service.CountQueryService;
import com.homihq.db2rest.jdbc.dto.ReadContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import java.util.List;
@RestController
@Slf4j
@RequiredArgsConstructor
public class CountQueryController {
private final CountQueryService countQueryService;
@GetMapping(VERSION + "/{dbId}/{tableName}/count")
public CountResponse count(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Accept-Profile", required = false) String schemaName,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter) {
log.debug("tableName - {}", tableName);
log.debug("filter - {}", filter);
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.schemaName(schemaName)
.tableName(tableName)
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.build();
return countQueryService.count(readContext);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ExistsQueryController.java
================================================
package com.homihq.db2rest.rest.read;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.core.dto.ExistsResponse;
import com.homihq.db2rest.jdbc.core.service.ExistsQueryService;
import com.homihq.db2rest.jdbc.dto.JoinDetail;
import com.homihq.db2rest.jdbc.dto.ReadContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@Slf4j
@RestController
@RequiredArgsConstructor
public class ExistsQueryController {
private final ExistsQueryService existsQueryService;
@GetMapping(value = VERSION + "/{dbId}/{tableName}/exists", produces = "application/json")
public ExistsResponse exists(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Accept-Profile", required = false) String schemaName,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter) {
log.debug("tableName - {}", tableName);
log.debug("filter - {}", filter);
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.schemaName(schemaName)
.tableName(tableName)
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.build();
return existsQueryService.exists(readContext);
}
@PostMapping(value = VERSION + "/{dbId}/{tableName}/exists/_expand", produces = "application/json")
public ExistsResponse exists(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name="Accept-Profile", required = false) String schemaName,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter,
@RequestBody List<JoinDetail> joins
) {
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.schemaName(schemaName)
.tableName(tableName)
.fields("*")
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.joins(joins)
.build();
return existsQueryService.exists(readContext);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/FindOneController.java
================================================
package com.homihq.db2rest.rest.read;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.jdbc.core.service.FindOneService;
import com.homihq.db2rest.jdbc.dto.ReadContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RestController
@Slf4j
@RequiredArgsConstructor
public class FindOneController {
private final FindOneService findOneService;
@GetMapping(VERSION + "/{dbId}/{tableName}/one")
public Map<String, Object> findOne(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Accept-Profile", required = false) String schemaName,
@RequestParam(name = "fields", required = false, defaultValue = "*") String fields,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter) {
log.debug("tableName - {}", tableName);
log.debug("fields - {}", fields);
log.debug("filter - {}", filter);
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.defaultFetchLimit(100) //todo update with config
.schemaName(schemaName)
.tableName(tableName)
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.fields(fields)
.build();
return this.findOneService.findOne(readContext);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ReadController.java
================================================
package com.homihq.db2rest.rest.read;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.Db2RestConfigProperties;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.jdbc.core.service.ReadService;
import com.homihq.db2rest.jdbc.dto.JoinDetail;
import com.homihq.db2rest.jdbc.dto.ReadContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RestController
@Slf4j
@RequiredArgsConstructor
public class ReadController {
private final ReadService readService;
private final Db2RestConfigProperties db2RestConfigProperties;
@GetMapping(value = VERSION + "/{dbId}/{tableName}", produces = "application/json")
public Object findAll(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Accept-Profile", required = false) String schemaName,
@RequestParam(required = false, defaultValue = "*") String fields,
@RequestParam(required = false, defaultValue = "") String filter,
@RequestParam(name = "sort", required = false, defaultValue = "") List<String> sorts,
@RequestParam(required = false, defaultValue = "-1") int limit,
@RequestParam(required = false, defaultValue = "-1") long offset) {
log.debug("filter - {}", filter);
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.schemaName(schemaName)
.tableName(tableName)
.fields(fields)
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.sorts(sorts)
.limit(limit)
.defaultFetchLimit(db2RestConfigProperties.getDefaultFetchLimit())
.offset(offset)
.build();
return readService.findAll(readContext);
}
@PostMapping(value = VERSION + "/{dbId}/{tableName}/_expand", produces = "application/json")
public Object find(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Accept-Profile", required = false) String schemaName,
@RequestParam(required = false, defaultValue = "*") String fields,
@RequestParam(required = false, defaultValue = "") String filter,
@RequestParam(name = "sort", required = false, defaultValue = "") List<String> sorts,
@RequestParam(required = false, defaultValue = "-1") int limit,
@RequestParam(required = false, defaultValue = "-1") long offset,
@RequestBody List<JoinDetail> joins
) {
ReadContext readContext = ReadContext.builder()
.dbId(dbId)
.schemaName(schemaName)
.tableName(tableName)
.fields(fields)
.filter(MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters))
.sorts(sorts)
.limit(limit)
.defaultFetchLimit(db2RestConfigProperties.getDefaultFetchLimit())
.offset(offset)
.joins(joins)
.build();
return readService.findAll(readContext);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/FunctionController.java
================================================
package com.homihq.db2rest.rest.rpc;
import com.homihq.db2rest.jdbc.core.service.FunctionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RestController
@RequestMapping(VERSION + "/{dbId}/function")
@Slf4j
@RequiredArgsConstructor
public class FunctionController {
private final FunctionService functionService;
@PostMapping("/{funcName}")
public ResponseEntity<Map<String, Object>> execute(
@PathVariable String dbId,
@PathVariable String funcName,
@RequestBody Map<String, Object> inParams) {
log.debug("Execute function {} with IN params {}", funcName, inParams.entrySet());
return ResponseEntity.ok(functionService.execute(dbId, funcName, inParams));
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/ProcedureController.java
================================================
package com.homihq.db2rest.rest.rpc;
import com.homihq.db2rest.jdbc.core.service.ProcedureService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RestController
@RequestMapping(VERSION + "/{dbId}/procedure")
@Slf4j
@RequiredArgsConstructor
public class ProcedureController {
private final ProcedureService procedureService;
@PostMapping("/{procName}")
public ResponseEntity<Map<String, Object>> execute(
@PathVariable String dbId,
@PathVariable String procName,
@RequestBody Map<String, Object> inParams,
@RequestParam(name = "resultSetKeys", required = false) List<String> resultSetKeys) {
log.debug("Execute stored procedure {} with IN params {}", procName, inParams.entrySet());
log.info("ResultSetKeys: {}", resultSetKeys);
return ResponseEntity.ok(procedureService.execute(dbId, procName, inParams,resultSetKeys));
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/sql/SQLTemplateController.java
================================================
package com.homihq.db2rest.rest.sql;
import com.homihq.db2rest.core.exception.PathVariableNamesMissingException;
import com.homihq.db2rest.core.exception.PathVariableValuesMissingException;
import com.homihq.db2rest.jdbc.core.service.SQLTemplateExecutorService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@Slf4j
@RestController
@RequestMapping(VERSION + "/{dbId}/sql")
@RequiredArgsConstructor
@Tag(name = "Parameterized SQL Template ", description = "Details about schemas and tables")
public class SQLTemplateController {
private final SQLTemplateExecutorService sqlTemplateExecutorService;
@GetMapping("/{fileName}/{*userPathVariable}")
public Object sqlTemplate(@PathVariable String dbId,
@PathVariable String fileName,
@PathVariable(name = "userPathVariable") String userPathVariable,
@RequestParam Map<String, String> requestParams,
@RequestHeader Map<String, String> requestHeaders,
@MatrixVariable Map<String, String> matrixVariables
) {
final Map<String, Object> context = createContext(requestParams, requestHeaders, matrixVariables);
Map<String, Object> paths = createPaths(userPathVariable, requestHeaders);
context.put("paths", paths);
log.debug("context - {}", context);
return sqlTemplateExecutorService.execute(dbId, fileName, context);
}
@PostMapping("/{fileName}")
public Object sqlTemplate(@PathVariable String dbId,
@PathVariable String fileName,
@RequestBody Map<String, Object> content,
@RequestParam Map<String, String> requestParams,
@RequestHeader Map<String, String> requestHeaders,
@MatrixVariable Map<String, String> matrixVariables) {
final Map<String, Object> context = createContext(requestParams, requestHeaders, matrixVariables);
context.put("content", content);
log.debug("context - {}", context);
return sqlTemplateExecutorService.execute(dbId, fileName, context);
}
private Map<String, Object> createContext(
Map<String, String> requestParams,
Map<String, String> requestHeaders,
Map<String, String> matrixVariables
) {
final Map<String, Object> context = new HashMap<>();
context.put("params", requestParams);
context.put("headers", requestHeaders);
context.put("matrix", matrixVariables);
return context;
}
private static Map<String, Object> createPaths(String userPathVariable, Map<String, String> requestHeaders) {
final List<String> userPathVariables = Arrays.stream(userPathVariable.split("/"))
.filter(StringUtils::isNotEmpty)
.toList();
final String headerPaths = requestHeaders.get("paths");
if (!userPathVariables.isEmpty() && StringUtils.isBlank(headerPaths)) {
throw new PathVariableNamesMissingException();
}
Map<String, Object> pathVariables = new HashMap<>();
if (StringUtils.isNotBlank(headerPaths)) {
String[] pathKeys = headerPaths.split(",");
if (pathKeys.length != userPathVariables.size()) {
throw new PathVariableValuesMissingException();
}
for (int i = 0; i < pathKeys.length; i++) {
final String key = pathKeys[i];
final String pathValue = userPathVariables.get(i);
if (StringUtils.isBlank(pathValue)) {
throw new PathVariableValuesMissingException(key);
}
pathVariables.put(key, pathValue);
}
}
return pathVariables;
}
}
================================================
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/update/UpdateController.java
================================================
package com.homihq.db2rest.rest.update;
import com.homihq.db2rest.auth.data.RoleDataFilter;
import com.homihq.db2rest.config.MultiTenancy;
import com.homihq.db2rest.core.dto.UpdateResponse;
import com.homihq.db2rest.jdbc.core.service.UpdateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
@RestController
@Slf4j
@RequiredArgsConstructor
public class UpdateController {
private final UpdateService updateService;
@PatchMapping(VERSION + "/{dbId}/{tableName}")
public UpdateResponse save(
@RequestAttribute(name = ROLEBASEDDATAFILTERS, required = false) List<RoleDataFilter> roleBasedDataFilters,
@PathVariable String dbId,
@PathVariable String tableName,
@RequestHeader(name = "Content-Profile", required = false) String schemaName,
@RequestBody Map<String, Object> data,
@RequestParam(name = "filter", required = false, defaultValue = "") String filter) {
MultiTenancy.addTenantColumns(data, dbId, tableName, roleBasedDataFilters);
int rows = updateService.patch(dbId, schemaName, tableName, data,
MultiTenancy.joinFilters(filter, dbId, tableName, roleBasedDataFilters));
return new UpdateResponse(rows);
}
}
================================================
FILE: db2rest-api/api-rest/src/main/resources/application.yml
================================================
app:
version: @project.version@
name: @project.name@
databases:
- id: ${DB_ID:db}
url: ${DB_URL:}
username: ${DB_USER}
password: ${DB_PASSWORD}
schemas: ${INCLUDED_SCHEMAS:}
maxConnections: ${MAX_POOL_SIZE:5}
server:
port: ${SERVER_PORT:8080}
forward-headers-strategy: framework
compression:
enabled: ${GZIP_ENABLED:false}
mime-types: application/json
min-response-size: ${GZIP_MIN_RESPONSE_SIZE:1024}
# excluded-user-agents: MSIE 6.0,UCBrowser
spring:
threads:
virtual:
enabled: true
banner:
location: classpath:banner.txt
servlet:
multipart:
enabled: true
max-file-size: 5MB
max-request-size: 5MB
cors:
enabled: ${ENABLE_CORS:false}
mappings: ${CORS_MAPPING:[{}]}
db2rest:
auth:
enabled: ${ENABLE_AUTH:false}
provider: ${AUTH_PROVIDER:basic}
data:
source: ${AUTH_DATA_SOURCE}
dateTime:
enableDataTimeFormatting: ${ENABLE_DATETIME_FORMATTING:false}
timeFormat: ${TIME_FORMAT:HH:mm:ss}
dateFormat: ${DATE_FORMAT:yyyy-MM-dd}
dateTimeFormat: ${DATE_TIME_FORMAT:yyyy-MM-dd HH:mm:ss}
defaultFetchLimit: ${DEFAULT_FETCH_LIMIT:100}
allowSafeDelete : ${ALLOW_SAFE_DELETE:true}
templates: ${SQL_TEMPLATE_PATH}
logging:
level:
com:
homihq:
db2rest:
rest: INFO
jdbc:
core:
service: INFO
org:
springframework:
web: INFO
beans: INFO
jdbc: DEBUG
management:
endpoints:
web:
exposure:
include: "health,info,httpexchanges,prometheus,metrics"
datadog:
metrics:
export:
enabled: ${DATADOG_EXPORT_ENABLED:false}
api-key: ${DATADOG_API_KEY}
application-key: ${DATADOG_APPLICATION_KEY}
uri: ${DATADOG_EXPORT_URI}
step: ${DATADOG_EXPORT_INTERVAL:30s}
prometheus:
metrics:
export:
enabled: ${PROMETHEUS_EXPORT_ENABLED:false}
================================================
FILE: db2rest-api/api-rest/src/main/resources/banner.txt
================================================
${AnsiColor.RED} ____ ____ ____ ____ ____ _____ ____ _____ ____
${AnsiColor.BLUE} / / / | _ \| __ )___ \| _ \| ____/ ___|_ _| \ \ \
${AnsiColor.YELLOW} | | | | | | | _ \ __) | |_) | _| \___ \ | | | | |
${AnsiColor.GREEN} < < < | |_| | |_) / __/| _ <| |___ ___) || | > > >
${AnsiColor.MAGENTA} | | | |____/|____/_____|_| \_\_____|____/ |_| | | |
${AnsiColor.BRIGHT_GREEN} \_\_\ ========================================= /_/_/
${AnsiColor.DEFAULT}+---------------------------------------------------+
|${AnsiColor.GREEN}:: ${app.name} version :: ${AnsiColor.DEFAULT}v${app.version} |
|${AnsiColor.GREEN}:: Spring-Boot version :: ${AnsiColor.DEFAULT}v${spring-boot.version} |
|${AnsiColor.GREEN}:: Visit ${app.name} website :: ${AnsiColor.DEFAULT}[https://db2rest.com/] |
${AnsiColor.DEFAULT}+---------------------------------------------------+
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/count.jte
================================================
@param String rootTable
@param String rootWhere
SELECT
COUNT(*)
FROM
${rootTable}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/delete-mssql.jte
================================================
@param String rootTable
@param String rootWhere
@param String rootTableAlias
DELETE FROM ${rootTableAlias}
FROM ${rootTable}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/delete.jte
================================================
@param String rootTable
@param String rootWhere
DELETE FROM
${rootTable}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/exists-mssql.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param String rootTable
@param String rootWhere
@param List<DbJoin> joins
SELECT TOP 1 1
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/exists.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param String rootTable
@param String rootWhere
@param List<DbJoin> joins
SELECT
1
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
LIMIT 1
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/find-one.jte
================================================
@param String rootTable
@param String rootWhere
@param String columns
SELECT
${columns}
FROM
${rootTable}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/insert.jte
================================================
@param String columns
@param String table
@param String parameters
INSERT INTO ${table}
(${columns})
VALUES
(${parameters})
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/read-mssql.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param List<DbJoin> joins
@param String rootTable
@param String columns
@param String rootWhere
@param String sorts
@param Integer limit
@param Long offset
@if(sorts != null)
SELECT
${columns}
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
ORDER BY ${sorts}
@if(limit != null)
OFFSET ${(offset == null ? 0 : offset)} ROWS FETCH NEXT ${limit} ROWS ONLY
@endif
@elseif(limit != null)
@if(offset != null)
SELECT T.* FROM
(
SELECT
${columns},
ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rowIndex
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
) AS T
WHERE rowIndex > ${offset} AND rowIndex <= ${offset + limit}
@else
SELECT TOP ${limit} ${columns}
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@endif
@else
SELECT
${columns}
FROM ${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/read-ora-12.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param List<DbJoin> joins
@param String rootTable
@param String columns
@param String rootWhere
@param String sorts
@param Integer limit
@param Long offset
SELECT
${columns}
FROM
${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@if(sorts != null)
ORDER BY ${sorts}
@endif
@if(limit != null)
@if(offset != null)
OFFSET ${offset} ROWS
FETCH NEXT ${limit} ROWS ONLY
@else
FETCH FIRST ${limit} ROWS ONLY
@endif
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/read-ora-9.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param List<DbJoin> joins
@param String rootTable
@param String columns
@param String rootWhere
@param String sorts
@param Integer limit
@param Long offset
@if(limit != null)
@if(offset != null)
SELECT T.* FROM
(
SELECT T.*, rownum as rowIndex FROM
(
SELECT
${columns}
FROM
${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@if(sorts != null)
ORDER BY ${sorts}
@endif
) T
) T
WHERE rowIndex > ${offset} AND rowIndex <= ${offset + limit}
@else
SELECT * FROM (
SELECT
${columns}
FROM
${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@if(sorts != null)
ORDER BY ${sorts}
@endif
)
WHERE ROWNUM <= ${limit}
@endif
@else
SELECT
${columns}
FROM
${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@if(sorts != null)
ORDER BY ${sorts}
@endif
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/read.jte
================================================
@import com.db2rest.jdbc.dialect.model.DbJoin
@import java.util.List
@param List<DbJoin> joins
@param String rootTable
@param String columns
@param String rootWhere
@param String sorts
@param Integer limit
@param Long offset
SELECT
${columns}
FROM
${rootTable}
@if(joins != null)
@for(DbJoin join : joins)
${join.render()}
@endfor
@endif
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
@if(sorts != null)
ORDER BY ${sorts}
@endif
@if(limit != null)
LIMIT ${limit}
@if(offset != null)
OFFSET ${offset}
@endif
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/update-mssql.jte
================================================
@param String rootTable
@param String rootWhere
@param String columnSets
@param String rootTableAlias
UPDATE ${rootTableAlias}
SET ${columnSets}
FROM ${rootTable}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/main/resources/sql-templates/update.jte
================================================
@param String rootTable
@param String rootWhere
@param String columnSets
UPDATE ${rootTable}
SET ${columnSets}
@if(rootWhere != null)
WHERE ${rootWhere}
@endif
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/BaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.provider.Arguments;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.restdocs.RestDocumentationContextProvider;
import org.springframework.restdocs.RestDocumentationExtension;
import org.springframework.restdocs.templates.TemplateFormats;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.homihq.db2rest.config.Db2RestConfigProperties;
import lombok.extern.slf4j.Slf4j;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@ExtendWith({RestDocumentationExtension.class})
@Slf4j
public abstract class BaseIntegrationTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
protected ApplicationContext applicationContext;
@Autowired
protected Db2RestConfigProperties db2RestConfigProperties;
@BeforeEach
void setUp(WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) {
createMockMvc(webApplicationContext, restDocumentation);
setupEnv();
}
protected void createMockMvc(WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) {
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.apply(documentationConfiguration(restDocumentation).snippets().withTemplateFormat(TemplateFormats.markdown()))
.build();
}
void setupEnv() {
var templatesLocation = db2RestConfigProperties.getTemplates();
if (templatesLocation.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX)) {
try {
Resource resource = applicationContext.getResource(templatesLocation);
var resolvedTemplatesLocation = String.valueOf(Paths.get(resource.getFile().getAbsolutePath()));
db2RestConfigProperties.setTemplates(resolvedTemplatesLocation);
} catch (IOException ioe) {
log.debug("Error while resolve _sql templates location for testing", ioe);
}
}
}
static List<Arguments> isoDateTimeFormats() {
return List.of(Arguments.of("2011-12-03T10:15:30"),
Arguments.of("2011-12-03T10:15:30.123"),
Arguments.of("2011-12-03T10:15:30+01:00"),
Arguments.of("2011-12-03T10:15:30-05:00"),
Arguments.of("2011-12-03T10:15:30Z"),
Arguments.of("2011-12-03T10:15:30.123Z"),
Arguments.of("2011-12-03T10:15:30.123+05:30"),
Arguments.of("2011-12-03T10:15:30+01:00[Europe/Paris]"),
Arguments.of("2011-12-03T10:15:30.123+01:00[Europe/Paris]"));
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2BaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(DB2ContainerConfiguration.class)
@ActiveProfiles("it-db2")
public class DB2BaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2ContainerConfiguration.java
================================================
package com.homihq.db2rest;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.db2.Db2Container;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-db2")
public class DB2ContainerConfiguration {
private static final List<String> db2Scripts = List.of("db2/db2-sakila.sql"
, "db2/db2-sakila-data.sql");
private static final Db2Container db2 = new Db2Container("icr.io/db2_community/db2:11.5.8.0").acceptLicense()
.withDatabaseName("BLUDB")
.withUsername("db2inst1")
.withPassword("password")
.withReuse(true);
static {
db2.start();
var containerDelegate = new JdbcDatabaseDelegate(db2, "");
db2Scripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.ibm.db2.jcc.DB2Driver");
dataSourceBuilder.url(db2.getJdbcUrl());
dataSourceBuilder.username(db2.getUsername());
dataSourceBuilder.password(db2.getPassword());
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("db2b", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBBaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(MariaDBContainerConfiguration.class)
@ActiveProfiles("it-mariadb")
public class MariaDBBaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.containers.MariaDBContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-mariadb")
public class MariaDBContainerConfiguration {
private static final List<String> mariaDbScripts = List.of("mariadb/mariadb-sakila.sql",
"mariadb/mariadb-sakila-data.sql");
private static final MariaDBContainer mariaDbContainer =
(MariaDBContainer) new MariaDBContainer("mariadb:11.0")
.withDatabaseName("sakila")
.withUsername("maria")
.withPassword("test")
.withReuse(true);
static {
mariaDbContainer.start();
var containerDelegate = new JdbcDatabaseDelegate(mariaDbContainer, "");
mariaDbScripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.mariadb.jdbc.Driver");
dataSourceBuilder.url(mariaDbContainer.getJdbcUrl());
dataSourceBuilder.username(mariaDbContainer.getUsername());
dataSourceBuilder.password(mariaDbContainer.getPassword());
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("mariadb", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MsSQLServerContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.containers.MSSQLServerContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-mssql")
public class MsSQLServerContainerConfiguration {
private static final MSSQLServerContainer<?> MSSQL_SERVER_CONTAINER =
new MSSQLServerContainer<>("mcr.microsoft.com/mssql/server:2022-latest")
.acceptLicense();
private static final List<String> SCRIPTS = List.of(
"mssql/mssql-sakila.sql",
"mssql/mssql-sakila-data.sql"
);
static {
MSSQL_SERVER_CONTAINER.start();
var containerDelegate = new JdbcDatabaseDelegate(MSSQL_SERVER_CONTAINER, "");
SCRIPTS.forEach(script -> ScriptUtils.runInitScript(containerDelegate, script));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.url(MSSQL_SERVER_CONTAINER.getJdbcUrl());
dataSourceBuilder.username(MSSQL_SERVER_CONTAINER.getUsername());
dataSourceBuilder.password(MSSQL_SERVER_CONTAINER.getPassword());
DataSource dataSource = dataSourceBuilder.build();
var routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("mssql", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLBaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(MySQLContainerConfiguration.class)
@ActiveProfiles("it-mysql")
public class MySQLBaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-mysql")
public class MySQLContainerConfiguration {
private static final List<String> mySqlScripts = List.of("mysql/mysql-sakila.sql",
"mysql/mysql-sakila-data.sql", "mysql/mysql-wakila-all.sql");
private static final MySQLContainer mySQLContainer =
(MySQLContainer) new MySQLContainer("mysql:8.2")
.withDatabaseName("sakila")
.withUsername("root")
//.withPassword("mysql")
.withReuse(true);
static {
mySQLContainer.start();
var containerDelegate = new JdbcDatabaseDelegate(mySQLContainer, "");
mySqlScripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.mysql.cj.jdbc.Driver");
dataSourceBuilder.url(mySQLContainer.getJdbcUrl());
dataSourceBuilder.username(mySQLContainer.getUsername());
dataSourceBuilder.password(mySQLContainer.getPassword());
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("mysqldb", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleBaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(OracleContainerConfiguration.class)
@ActiveProfiles("it-oracle")
public class OracleBaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.containers.OracleContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-oracle")
public class OracleContainerConfiguration {
private static final List<String> oracleScripts = List.of("oracle/oracle-sakila.sql"
, "oracle/oracle-sakila-data.sql");
private static final OracleContainer testOracle10g =
new OracleContainer("gvenzl/oracle-xe:21-slim-faststart")
.withDatabaseName("testDB")
.withUsername("testUser")
.withPassword("testPassword")
.withReuse(true);
static {
testOracle10g.start();
var containerDelegate = new JdbcDatabaseDelegate(testOracle10g, "");
oracleScripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("oracle.jdbc.OracleDriver");
dataSourceBuilder.url(testOracle10g.getJdbcUrl());
dataSourceBuilder.username(testOracle10g.getUsername());
dataSourceBuilder.password(testOracle10g.getPassword());
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("oradb", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLBaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(PostgreSQLContainerConfiguration.class)
@ActiveProfiles("it-pg")
public class PostgreSQLBaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-pg")
public class PostgreSQLContainerConfiguration {
private static final List<String> postgresScripts = List.of("pg/postgres-sakila.sql",
"pg/postgres-sakila-data.sql", "pg/pg-sakila-functions.sql");
private static final PostgreSQLContainer testPostgres =
(PostgreSQLContainer) new PostgreSQLContainer("postgres:15.2-alpine")
.withDatabaseName("postgres")
.withUsername("postgres")
.withPassword("postgres")
.withReuse(true);
static {
testPostgres.start();
var containerDelegate = new JdbcDatabaseDelegate(testPostgres, "");
postgresScripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.postgresql.Driver");
dataSourceBuilder.url(testPostgres.getJdbcUrl() + "&escapeSyntaxCallMode=callIfNoReturn");
dataSourceBuilder.username(testPostgres.getUsername());
dataSourceBuilder.password(testPostgres.getPassword());
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("pgsqldb", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteBaseIntegrationTest.java
================================================
package com.homihq.db2rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
@Import(SQLiteContainerConfiguration.class)
@ActiveProfiles("it-sqlite")
public class SQLiteBaseIntegrationTest extends BaseIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
protected boolean deleteRow(String table, String column, int id) {
var query = "DELETE FROM " + table + " WHERE " + column + " = ?";
return jdbcTemplate.update(query, id) == 1;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteContainerConfiguration.java
================================================
package com.homihq.db2rest;
import com.homihq.db2rest.jdbc.multidb.RoutingDataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@TestConfiguration(proxyBeanMethods = false)
@Profile("it-sqlite")
public class SQLiteContainerConfiguration {
private static final List<String> sqliteScripts = List.of("sqlite/sqlite-sakila.sql",
"sqlite/sqlite-sakila-data.sql");
private static final String SQLITE_DB_FILE;
static {
try {
File tempFile = Files.createTempFile("sqlite-test", ".db").toFile();
tempFile.deleteOnExit();
SQLITE_DB_FILE = tempFile.getAbsolutePath();
// Initialize database with scripts
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.sqlite.JDBC");
dataSourceBuilder.url("jdbc:sqlite:" + SQLITE_DB_FILE);
DataSource initDataSource = dataSourceBuilder.build();
try (Connection connection = initDataSource.getConnection()) {
for (String script : sqliteScripts) {
ScriptUtils.executeSqlScript(connection, new ClassPathResource(script));
}
}
} catch (IOException | SQLException e) {
throw new RuntimeException("Failed to initialize SQLite test database", e);
}
}
@Bean
public DataSource dataSource() {
var dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.sqlite.JDBC");
dataSourceBuilder.url("jdbc:sqlite:" + SQLITE_DB_FILE);
DataSource dataSource = dataSourceBuilder.build();
final RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(Map.of("sqlitedb", dataSource));
routingDataSource.setDefaultTargetDataSource(dataSource);
return routingDataSource;
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerIntegrationTest.java
================================================
package com.homihq.db2rest.jdbc.rest.meta.db;
import com.homihq.db2rest.BaseIntegrationTest;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.db2rest.jdbc.dialect.model.DbColumn;
import com.db2rest.jdbc.dialect.model.DbTable;
import com.homihq.db2rest.jdbc.sql.DbMeta;
import com.homihq.db2rest.rest.meta.db.DbInfoController;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.springframework.boot.test.mock.mockito.MockBean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import static org.mockito.Mockito.when;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@Disabled
class DbInfoControllerIntegrationTest extends BaseIntegrationTest {
Map<String, DbMeta> metadataMap;
@MockBean
JdbcManager jdbcManager;
DbInfoController dbInfoController;
@BeforeEach
void setUp() {
List<DbTable> dbTableList = new ArrayList<>();
List<DbColumn> dbColumns = new ArrayList<>();
dbColumns.add(new DbColumn("tableName", "name", "alias",
"tableAlias", true, "columnDataType", false, false,
null, "coverChar", "jsonParts"));
dbTableList.add(new DbTable("schema", "name", "fullName",
"alias", dbColumns, "type", "coverChar"));
metadataMap = new HashMap<>();
metadataMap.put("1", new DbMeta("productName", 2, "driverName",
"driverVersion", dbTableList));
dbInfoController = new DbInfoController(jdbcManager);
when(jdbcManager.getDbMetaMap()).thenReturn(metadataMap);
}
//@Test
void getObjects() throws Exception {
mockMvc.perform(get(VERSION + "/$dbs")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$").isArray())
.andExpect(jsonPath("$[0].dbId").value("1")) // Validate dbId field of the first object
.andExpect(jsonPath("$[0].productName").value("productName")) // Validate productName field
.andExpect(jsonPath("$[0].majorVersion").value(2)) // Validate majorVersion field
.andExpect(jsonPath("$[0].driverName").value("driverName")) // Validate driverName field
.andExpect(jsonPath("$[0].driverVersion").value("driverVersion"));
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerTest.java
================================================
package com.homihq.db2rest.jdbc.rest.meta.db;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.db2rest.jdbc.dialect.model.DbColumn;
import com.db2rest.jdbc.dialect.model.DbTable;
import com.homihq.db2rest.jdbc.sql.DbMeta;
import com.homihq.db2rest.rest.meta.db.DbInfoController;
import com.homihq.db2rest.rest.meta.db.DbInfoObject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
class DbInfoControllerTest {
Map<String, DbMeta> metadataMap;
@BeforeEach
void setUp() {
List<DbTable> dbTableList = new ArrayList<>();
List<DbColumn> dbColumns = new ArrayList<>();
dbColumns.add(new DbColumn("tableName", "name", "alias",
"tableAlias", true, "columnDataType", false, false,
null, "coverChar", "jsonParts"));
dbTableList.add(new DbTable("schema", "name", "fullName",
"alias", dbColumns, "type", "coverChar"));
metadataMap = new HashMap<>();
metadataMap.put("key", new DbMeta("productName", 2, "driverName",
"driverVersion", dbTableList));
}
@Test
void testGetObjects() {
JdbcManager jdbcManagerMock = Mockito.mock(JdbcManager.class);
when(jdbcManagerMock.getDbMetaMap()).thenReturn(metadataMap);
DbInfoController dbInfoController = new DbInfoController(jdbcManagerMock);
List<DbInfoObject> actualDbInfoList = dbInfoController.getObjects();
List<DbInfoObject> expectedDbInfoList = new ArrayList<>();
metadataMap.forEach(
(k, v) -> expectedDbInfoList.add(new DbInfoObject(k, v.productName(), v.majorVersion(), v.driverName(), v.driverVersion()))
);
assertEquals(expectedDbInfoList, actualDbInfoList);
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerIntegrationTest.java
================================================
package com.homihq.db2rest.jdbc.rest.meta.schema;
import com.homihq.db2rest.BaseIntegrationTest;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.db2rest.jdbc.dialect.model.DbColumn;
import com.db2rest.jdbc.dialect.model.DbTable;
import com.homihq.db2rest.jdbc.sql.DbMeta;
import com.homihq.db2rest.rest.meta.schema.SchemaController;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.core.AnyOf.anyOf;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
class SchemaControllerIntegrationTest extends BaseIntegrationTest {
Map<String, DbMeta> metadataMap;
@MockBean
JdbcManager jdbcManager;
SchemaController schemaController;
@BeforeEach
void setUp() {
List<DbTable> dbTableList = new ArrayList<>();
List<DbColumn> dbColumns = new ArrayList<>();
dbColumns.add(new DbColumn("tableName", "name", "alias",
"tableAlias", true, "columnDataType", false, false,
null, "coverChar", "jsonParts"));
dbTableList.add(new DbTable("schema", "name", "fullName",
"alias", dbColumns, "type", "coverChar"));
metadataMap = new HashMap<>();
metadataMap.put("key", new DbMeta("productName", 2, "driverName",
"driverVersion", dbTableList));
schemaController = new SchemaController(jdbcManager);
when(jdbcManager.getDbMetaByDbId(anyString())).thenReturn(metadataMap.get("key"));
}
/**
* This test tests the use case where we request for all schemas without
* providing any filter.
*
* @throws Exception
*/
@Test
void testGetObjects() throws Exception {
mockMvc.perform(get(VERSION + "/1/$schemas")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.*").isArray())
//.andExpect(jsonPath("$.*", hasSize(4)))
.andExpect(jsonPath("$.*", anyOf(hasSize(1))))
.andExpect(jsonPath("$[0].*", hasSize(3)))
.andDo(document("schema-no-filter"));
}
/**
* This test tests the use case where we request for schema's columns
*
* @throws Exception
*/
@Test
void testGetColumnObjects() throws Exception {
mockMvc.perform(get(VERSION + "/1/$schemas")
.param("columns", "true")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.*").isArray())
//.andExpect(jsonPath("$.*", hasSize(4)))
.andExpect(jsonPath("$.*", anyOf(hasSize(1))))
.andExpect(jsonPath("$[0].*", hasSize(4)))
.andExpect(jsonPath("$[0].columns.*", hasSize(1)))
.andExpect(jsonPath("$[0].columns[0].*", hasSize(3)))
.andExpect(jsonPath("$[0].columns[0].name").value("name"))
.andExpect(jsonPath("$[0].columns[0].pk").value(true))
.andExpect(jsonPath("$[0].columns[0].dataType").value("columnDataType"))
.andDo(document("schema-no-filter"));
}
/**
* This test tests the use case where we are sending an invalid filter
* i.e, we are sending a filter which is not valid.
*
* @throws Exception
*/
@Test
void testGetObjectsInvalidFilter() throws Exception {
mockMvc.perform(get(VERSION + "/1/$schemas")
.param("filter", "name=employee")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON))
.andDo(print())
.andExpect(jsonPath("$.type").value("https://db2rest.com/error/generic-error"))
.andExpect(jsonPath("$.title").value("Generic Data Access Error"))
.andExpect(jsonPath("$.status").value(400))
.andExpect(jsonPath("$.detail").value("Invalid filter condition. Only == supported for schema filter using a single value only."))
.andExpect(jsonPath("$.instance").value("/v1/rdbms/1/$schemas"))
.andExpect(jsonPath("$.errorCategory").value("Data-access-error"))
.andExpect(jsonPath("$.timestamp").exists())
.andDo(document("schema-invalid-filter"));
}
/**
* Tests response if there is a filter, and it is a valid filter.
* Valid filters include
* 1. == sign in between filter field and filter value
* 2. A string to the left of == and a string value to the right of it.
*
* @throws Exception
*/
@Test
void testGetObjectsValidFilter() throws Exception {
mockMvc.perform(get(VERSION + "/1/$schemas")
.param("filter", "schema==schema")
.contentType("application/json"))
.andExpect(status().isOk()) // Expect 200 OK
.andExpect(jsonPath("$").isArray()) // Ensure it's an array
.andExpect(jsonPath("$[0].schema").value("schema")) // Validate the first object's schema field
.andExpect(jsonPath("$[0].name").value("name")) // Validate the name field
.andExpect(jsonPath("$[0].type").value("type"))
.andDo(document("schema-valid-filter"));
}
/**
* This test checks for the use case where we send a request to /$schemas,
* but we do not have a valid filter field.
* NOTE: In this use case, the filter in itself is valid because it contains ==.
* Currently, we have filters based on schema, type and name.
* This test checks the response and ensures it is empty if the filter argument
* is not in (schema,type, name)
*
* @throws Exception
*/
@Test
void testGetObjectsInvalidFilterField() throws Exception {
mockMvc.perform(get(VERSION + "/1/$schemas")
.param("filter", "someUnknownFilter==schema")
.contentType("application/json"))
.andExpect(status().isOk()) // Expect 200 OK
.andExpect(jsonPath("$").isArray()) // Ensure it's an array
.andExpect(jsonPath("$").isEmpty()) //Ensure it is empty
.andDo(document("schema-unknown-filter"));
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerTest.java
================================================
package com.homihq.db2rest.jdbc.rest.meta.schema;
import com.homihq.db2rest.core.exception.GenericDataAccessException;
import com.homihq.db2rest.jdbc.JdbcManager;
import com.db2rest.jdbc.dialect.model.DbColumn;
import com.db2rest.jdbc.dialect.model.DbTable;
import com.homihq.db2rest.jdbc.sql.DbMeta;
import com.homihq.db2rest.rest.meta.schema.SchemaController;
import com.homihq.db2rest.rest.meta.schema.TableObject;
import com.homihq.db2rest.rest.meta.schema.TableWithColumnsObject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
class SchemaControllerTest {
Map<String, DbMeta> metadataMap;
JdbcManager jdbcManager;
SchemaController schemaController;
@BeforeEach
void setUp() {
List<DbTable> dbTableList = new ArrayList<>();
List<DbColumn> dbColumns = new ArrayList<>();
dbColumns.add(new DbColumn("tableName", "name", "alias",
"tableAlias", true, "columnDataType", false, false,
null, "coverChar", "jsonParts"));
dbTableList.add(new DbTable("schema", "name", "fullName",
"alias", dbColumns, "type", "coverChar"));
metadataMap = new HashMap<>();
metadataMap.put("key", new DbMeta("productName", 2, "driverName",
"driverVersion", dbTableList));
jdbcManager = Mockito.mock(JdbcManager.class);
schemaController = new SchemaController(jdbcManager);
}
private List<TableObject> getActualTableObject(String filter) {
List<TableObject> actualTableObject = (List<TableObject>) schemaController.getObjects("key", filter, Boolean.FALSE);
return actualTableObject;
}
private void testFilter(String goodFilter, String badFilter) {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(metadataMap.get("key"));
List<TableObject> expectedTableObject = metadataMap.get("key").dbTables().stream().map(TableObject::new).toList();
List<TableObject> actualTableObject = getActualTableObject(goodFilter);
assertEquals(expectedTableObject, actualTableObject);
actualTableObject = getActualTableObject(badFilter);
assertEquals(0, actualTableObject.size());
}
@Test
void getObjectsNoFilter() {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(metadataMap.get("key"));
List<TableObject> actualTableObject = getActualTableObject(null);
List<TableObject> expectedTableObject = metadataMap.get("key").dbTables().stream().map(TableObject::new).toList();
assertEquals(expectedTableObject, actualTableObject);
}
@Test
void testGetObjectsFilterInvalid() {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(metadataMap.get("key"));
Throwable exception = assertThrows(GenericDataAccessException.class, () -> schemaController.getObjects("key", "invalidFilter", Boolean.FALSE));
assertEquals("Invalid filter condition. Only == supported for schema filter using a single value only.", exception.getMessage());
}
@Test
void testGetObjectsValidFilter_schema() {
testFilter("schema==schema", "schema==notPresentInList");
}
@Test
void testGetObjectsValidFilter_name() {
testFilter("name==name", "name==notPresentInList");
}
@Test
void testGetObjectsValidFilter_type() {
testFilter("type==type", "type==notPresentInList");
}
@Test
void testGetObjectsValidFilter_invalidFieldFilter() {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(metadataMap.get("key"));
List<TableObject> actualTableObject = getActualTableObject("invalidFilterField==notPresentInList");
assertEquals(0, actualTableObject.size());
}
@Test
void testGetObjectsDbIDInvalid() {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(null);
assertEquals(0, schemaController.getObjects("key", "filter", Boolean.FALSE).size());
}
@Test
void testGetObjectsWithColumns() {
when(jdbcManager.getDbMetaByDbId("key")).thenReturn(metadataMap.get("key"));
List<TableWithColumnsObject> expectedTableObject = metadataMap.get("key").dbTables().stream().map(TableWithColumnsObject::new).toList();
List<TableWithColumnsObject> actualTableObject = (List<TableWithColumnsObject>) schemaController.getObjects("key", null, Boolean.TRUE);
assertEquals(expectedTableObject, actualTableObject);
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/DateTimeUtil.java
================================================
package com.homihq.db2rest.rest;
import com.jayway.jsonpath.JsonPath;
import org.springframework.test.web.servlet.MvcResult;
import java.io.UnsupportedEncodingException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class DateTimeUtil {
// Convert UTC time to LocalDateTime string
public static String utcToLocalTimestampString(MvcResult result) throws UnsupportedEncodingException {
String lastUpdateStr = result.getResponse().getContentAsString();
String lastUpdateValue = JsonPath.read(lastUpdateStr, "$[0].last_update");
OffsetDateTime offsetDateTime = OffsetDateTime.parse(lastUpdateValue);
// Convert OffsetDateTime to LocalDateTime in the system's default time zone
LocalDateTime localDateTime = offsetDateTime.toInstant()
.atZone(ZoneId.systemDefault()).toLocalDateTime();
// Format the LocalDateTime into the expected format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
return formatter.format(localDateTime);
}
// Convert UTC To LocalDateTime Format, Oracle jsonPath format
public static String utcToLocalTimestampStringOracle(MvcResult result) throws UnsupportedEncodingException {
String lastUpdateStr = result.getResponse().getContentAsString();
String lastUpdateValue = JsonPath.read(lastUpdateStr, "$[0].LAST_UPDATE");
OffsetDateTime offsetDateTime = OffsetDateTime.parse(lastUpdateValue);
LocalDateTime localDateTime = offsetDateTime.toInstant()
.atZone(ZoneId.systemDefault()).toLocalDateTime();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
return formatter.format(localDateTime);
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/cors/CorsTest.java
================================================
package com.homihq.db2rest.rest.cors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Profile;
import org.springframework.restdocs.RestDocumentationExtension;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.ext.ScriptUtils;
import org.testcontainers.jdbc.JdbcDatabaseDelegate;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.List;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.options;
import com.homihq.db2rest.config.Db2RestConfigProperties;
import lombok.extern.slf4j.Slf4j;
@SpringBootTest
@AutoConfigureMockMvc
@ExtendWith(RestDocumentationExtension.class)
@Slf4j
public class CorsTest {
@Autowired
private MockMvc mockMvc;
@Autowired
protected WebApplicationContext context;
@Autowired
protected ApplicationContext applicationContext;
@Autowired
protected Db2RestConfigProperties db2RestConfigProperties;
private static final List<String> postgresScripts = List.of("pg/postgres-sakila.sql",
"pg/postgres-sakila-data.sql", "pg/pg-sakila-functions.sql");
private static final PostgreSQLContainer testPostgres =
(PostgreSQLContainer) new PostgreSQLContainer("postgres:15.2-alpine")
.withDatabaseName("postgres")
.withUsername("postgres")
.withPassword("postgres")
.withReuse(true);
static {
testPostgres.start();
var containerDelegate = new JdbcDatabaseDelegate(testPostgres, "");
postgresScripts.forEach(initScript -> ScriptUtils.runInitScript(containerDelegate, initScript));
}
// private final String testOrigin = "http://example.com";
@DynamicPropertySource
static void setProperties(DynamicPropertyRegistry registry) {
registry.add("DB_URL", () -> testPostgres.getJdbcUrl());
registry.add("DB_USER", () -> testPostgres.getUsername());
registry.add("DB_PASSWORD", () -> testPostgres.getPassword());
registry.add("ENABLE_CORS", () -> "true");
/*
- mapping: "/actor/**"
allowedOrigin: "http://localhost:3000"
allowedHeader: "*"
allowedMethod: "*"
- mapping: "/v1/rdbms/db/**"
allowedOrigin: "http://localhost:4200, http://localhost:3000"
allowedHeader: "*"
allowedMethod: "GET,POST"
*/
registry.add("cors.mappings[0].mapping", () -> "/actor/**");
registry.add("cors.mappings[0].allowedOrigins", () -> "http://localhost:3000");
registry.add("cors.mappings[0].allowedHeaders", () -> "*");
registry.add("cors.mappings[0].allowedMethods", () -> "*");
registry.add("cors.mappings[1].mapping", () -> "/v1/rdbms/db/**");
registry.add("cors.mappings[1].allowedOrigins", () -> "http://localhost:4200, http://localhost:3000");
registry.add("cors.mappings[1].allowedHeaders", () -> "*");
registry.add("cors.mappings[1].allowedMethods", () -> "GET,POST");
}
@BeforeEach
void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void shouldBeSuccessfullForCorrectCORSOrigin() throws Exception {
mockMvc.perform(options("/v2/rdbms/db/employee")
.header("Origin", "http://localhost:4200")
.header("Access-Control-Request-Method", "GET"))
.andExpect(status().isForbidden());
}
@Test
public void shouldBeFaliureForWrongCORSOrigin() throws Exception {
mockMvc.perform(options("/v1/rdbms/db/employee")
.header("Origin", "http://example.com/aws")
.header("Access-Control-Request-Method", "GET"))
.andExpect(status().isForbidden());
}
@Test
public void shouldBeFaliureForWrongCORSMethod() throws Exception {
mockMvc.perform(options("/v1/rdbms/db/employee")
.header("Origin", "http://example.com/aws")
.header("Access-Control-Request-Method", "PATCH"))
.andExpect(status().isForbidden());
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2BulkCreateControllerTest.java
================================================
package com.homihq.db2rest.rest.db2;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.homihq.db2rest.DB2BaseIntegrationTest;
import io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;
import io.hosuaby.inject.resources.junit.jupiter.GivenTextResource;
import io.hosuaby.inject.resources.junit.jupiter.TestWithResources;
import io.hosuaby.inject.resources.junit.jupiter.WithJacksonMapper;
import org.junit.jupiter.api.ClassOrderer;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestClassOrder;
import java.util.List;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@TestClassOrder(ClassOrderer.OrderAnnotation.class)
@Order(281)
@TestWithResources
class Db2BulkCreateControllerTest extends DB2BaseIntegrationTest {
@WithJacksonMapper
ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule());
@GivenJsonResource("/testdata/BULK_CREATE_FILM_REQUEST.json")
List<Map<String, Object>> BULK_CREATE_FILM_REQUEST;
@GivenJsonResource("/testdata/BULK_CREATE_FILM_BAD_REQUEST.json")
List<Map<String, Object>> BULK_CREATE_FILM_BAD_REQUEST;
@GivenTextResource("/testdata/CREATE_FILM_REQUEST_CSV.csv")
String CREATE_FILM_REQUEST_CSV;
@GivenTextResource("/testdata/CREATE_FILM_BAD_REQUEST_CSV.csv")
String CREATE_FILM_BAD_REQUEST_CSV;
@GivenJsonResource("/testdata/BULK_CREATE_DIRECTOR_REQUEST.json")
List<Map<String, Object>> BULK_CREATE_DIRECTOR_REQUEST;
@GivenJsonResource("/testdata/BULK_CREATE_DIRECTOR_BAD_REQUEST.json")
List<Map<String, Object>> BULK_CREATE_DIRECTOR_BAD_REQUEST;
@GivenJsonResource("/testdata/BULK_CREATE_REVIEW_REQUEST.json")
List<Map<String, Object>> BULK_CREATE_REVIEW_REQUEST;
@Test
@DisplayName("Create many films.")
void create() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM/bulk")
.queryParam("sequences", "film_id:film_sequence")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.content(objectMapper.writeValueAsString(BULK_CREATE_FILM_REQUEST))
)
.andExpect(status().isCreated())
.andExpect(jsonPath("$.rows").isArray())
.andExpect(jsonPath("$.rows", hasSize(2)))
.andExpect(jsonPath("$.rows", hasItem(1)))
.andExpect(jsonPath("$.rows", hasItem(1)))
//.andExpect(jsonPath("$.generated_keys").isArray()) //TODO - push TSID columns
//.andExpect(jsonPath("$.generated_keys", hasSize(2)))
//.andExpect(jsonPath("$.generated_keys", allOf(notNullValue())))
//.andDo(print())
.andDo(document("db2-bulk-create-films"));
}
@Test
@DisplayName("Create many films with CSV type.")
void createCSV() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM/bulk")
.queryParam("sequences", "film_id:film_sequence")
.contentType("text/csv").accept(APPLICATION_JSON)
.content(CREATE_FILM_REQUEST_CSV))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.rows", hasSize(2)))
.andExpect(jsonPath("$.rows", hasItem(1)))
//.andExpect(jsonPath("$.generated_keys", hasSize(2)))
//.andExpect(jsonPath("$.generated_keys", allOf(notNullValue())))
//.andDo(print())
.andDo(document("db2-bulk-create-films-csv"));
}
@Test
@DisplayName("Create many films with CSV type resulting error.")
void createCSVWithError() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM/bulk")
.queryParam("sequences", "film_id:film_sequence")
.contentType("text/csv")
.accept(APPLICATION_JSON)
.content(CREATE_FILM_BAD_REQUEST_CSV))
.andExpect(status().isBadRequest())
//.andDo(print())
.andDo(document("db2-bulk-create-films-csv-error"));
}
@Test
@DisplayName("Create many films with failure.")
void createError() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM/bulk")
.queryParam("sequences", "film_id:film_sequence")
.contentType(APPLICATION_JSON)
.accept(APPLICATION_JSON)
.content(objectMapper.writeValueAsString(BULK_CREATE_FILM_BAD_REQUEST)))
.andExpect(status().isBadRequest())
// .andDo(print())
.andDo(document("db2-bulk-create-films-error"));
}
@Test
@DisplayName("Create many directors.")
@Disabled
void createDirector() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/DIRECTOR/bulk")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.param("tsIdEnabled", "true")
.content(objectMapper.writeValueAsString(BULK_CREATE_DIRECTOR_REQUEST))
)
.andExpect(status().isCreated())
//.andDo(print())
.andDo(document("db2-bulk-create-directors"));
}
@Test
@DisplayName("Create many directors with wrong tsid type.")
void createDirectorWithWrongTsidType() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/DIRECTOR/bulk")
.characterEncoding(UTF_8)
.contentType(APPLICATION_JSON)
.accept(APPLICATION_JSON)
.param("tsid", "director_id")
.param("tsidType", "string")
.header("Content-Profile", "sakila")
.content(objectMapper.writeValueAsString(BULK_CREATE_DIRECTOR_BAD_REQUEST))
)
.andExpect(status().isBadRequest())
//.andDo(print())
.andDo(document("db2-bulk-create-directors-with-wrong-tsid-type"));
}
@Test
@DisplayName("Create reviews with default tsid type.")
@Disabled
void createReviewWithDefaultTsidType() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/REVIEW/bulk")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.param("tsIdEnabled", "true")
.content(objectMapper.writeValueAsString(BULK_CREATE_REVIEW_REQUEST))
)
.andExpect(status().isCreated())
//.andDo(print())
.andDo(document("db2-bulk-create-reviews-with-default-tsid-type"));
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CountControllerTest.java
================================================
package com.homihq.db2rest.rest.db2;
import com.homihq.db2rest.DB2BaseIntegrationTest;
import org.junit.jupiter.api.ClassOrderer;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestClassOrder;
import org.springframework.http.MediaType;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@TestClassOrder(ClassOrderer.OrderAnnotation.class)
@Order(202)
class Db2CountControllerTest extends DB2BaseIntegrationTest {
@Test
@DisplayName("Get count")
void findFilmCount() throws Exception {
mockMvc.perform(get(VERSION + "/db2b/FILM/count")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
//.andDo(print())
.andDo(document("db2-get-film-count"));
}
}
================================================
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CreateControllerTest.java
================================================
package com.homihq.db2rest.rest.db2;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.homihq.db2rest.DB2BaseIntegrationTest;
import com.jayway.jsonpath.JsonPath;
import io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;
import io.hosuaby.inject.resources.junit.jupiter.TestWithResources;
import io.hosuaby.inject.resources.junit.jupiter.WithJacksonMapper;
import org.junit.jupiter.api.ClassOrderer;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestClassOrder;
import java.util.Map;
import static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@TestClassOrder(ClassOrderer.OrderAnnotation.class)
@Order(280)
@TestWithResources
class Db2CreateControllerTest extends DB2BaseIntegrationTest {
@WithJacksonMapper
ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule());
@GivenJsonResource("/testdata/CREATE_FILM_REQUEST.json")
Map<String, Object> CREATE_FILM_REQUEST;
@GivenJsonResource("/testdata/CREATE_FILM_REQUEST_ERROR.json")
Map<String, Object> CREATE_FILM_REQUEST_ERROR;
@GivenJsonResource("/testdata/CREATE_VANITY_VAN_REQUEST.json")
Map<String, Object> CREATE_VANITY_VAN_REQUEST;
@GivenJsonResource("/testdata/CREATE_DIRECTOR_REQUEST.json")
Map<String, Object> CREATE_DIRECTOR_REQUEST;
@GivenJsonResource("/testdata/CREATE_FILM_REQUEST_MISSING_PAYLOAD.json")
Map<String, Object> CREATE_FILM_REQUEST_MISSING_PAYLOAD;
@Test
@DisplayName("Create a film.")
void create() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM")
.queryParam("sequences", "film_id:film_sequence")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.content(objectMapper.writeValueAsString(CREATE_FILM_REQUEST))
)
//.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("$.row", equalTo(1)))
//.andExpect(jsonPath("$.keys.GENERATED_KEY").exists())
//.andExpect(jsonPath("$.keys.GENERATED_KEY", equalTo(5)))
.andDo(document("db2-create-a-film"));
}
@Test
@DisplayName("Test Create a film with error.")
void createError() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILM")
.queryParam("sequences", "film_id:film_sequence")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.content(objectMapper.writeValueAsString(CREATE_FILM_REQUEST_ERROR)))
//.andDo(print())
.andExpect(status().isBadRequest())
.andDo(document("db2-create-a-film-error"));
}
@Test
@DisplayName("Test create a film - non existent table.")
void createNonExistentTable() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/FILMS")
.queryParam("sequences", "film_id:film_sequence")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.content(objectMapper.writeValueAsString(CREATE_FILM_REQUEST)))
.andExpect(status().isNotFound())
//.andDo(print())
.andDo(document("db2-create-a-film-no-table"));
}
@Test
@DisplayName("Test Create a director - TSID enabled")
@Disabled
void createDirectorWithTSIDEnabled() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/DIRECTOR")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.param("tsIdEnabled", "true")
.content(objectMapper.writeValueAsString(CREATE_DIRECTOR_REQUEST)))
.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("$.row", equalTo(1)))
//.andExpect(jsonPath("$.keys.director_id").exists())
// .andExpect(jsonPath("$.keys.director_id").isNumber())
.andDo(document("db2-create-a-director-tsid-enabled"));
}
@Test
@DisplayName("Create a director - with TSID explicitly OFF")
void createDirectorWithTSIDOff() throws Exception {
mockMvc.perform(post(VERSION + "/db2b/DIRECTOR")
.contentType(APPLICATION_JSON).accept(APPLICATION_JSON)
.param("tsIdEnabled", "false")
.content(objectMapper.writeValueAsString(CREATE_DIRECTOR_REQUEST)))
.andExpect(status().isBadRequest())
//.andDo(print())
.andDo(document("db2-create-a-director-with-tsid-O
gitextract_rp34tsh_/ ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── RELEASING.md │ └── workflows/ │ ├── build-verify.yml │ ├── dockerhub-publish.yml │ ├── maven-central-publish.yml │ ├── oracle9i-central-publish.yml │ └── snapshot.yml ├── .gitignore ├── .mvn/ │ └── wrapper/ │ └── maven-wrapper.properties ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── db2rest-api/ │ ├── api-rest/ │ │ ├── pom-oracle9i.xml │ │ ├── pom.xml │ │ ├── sample-config/ │ │ │ ├── application-db.yml │ │ │ ├── application-local.yml │ │ │ ├── application-mongo.yml │ │ │ ├── application-pg15.yml │ │ │ └── application-pg16.yml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── homihq/ │ │ │ │ └── db2rest/ │ │ │ │ ├── Db2restApplication.java │ │ │ │ ├── config/ │ │ │ │ │ ├── CorsFilterConfiguration.java │ │ │ │ │ ├── DbServiceConfiguration.java │ │ │ │ │ ├── RestApiConfiguration.java │ │ │ │ │ ├── WebMvcConfiguration.java │ │ │ │ │ └── jinjava/ │ │ │ │ │ └── DisabledExpressionTokenScannerSymbols.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── DatabaseContextRequestInterceptor.java │ │ │ │ └── rest/ │ │ │ │ ├── RdbmsRestApi.java │ │ │ │ ├── admin/ │ │ │ │ │ └── AdminController.java │ │ │ │ ├── create/ │ │ │ │ │ ├── BulkCreateController.java │ │ │ │ │ ├── BulkCreateRestApi.java │ │ │ │ │ ├── CreateController.java │ │ │ │ │ └── CreateRestApi.java │ │ │ │ ├── delete/ │ │ │ │ │ ├── DeleteController.java │ │ │ │ │ └── DeleteRestApi.java │ │ │ │ ├── meta/ │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── DbInfoController.java │ │ │ │ │ │ ├── DbInfoObject.java │ │ │ │ │ │ └── DbInfoRestApi.java │ │ │ │ │ └── schema/ │ │ │ │ │ ├── ColumnObject.java │ │ │ │ │ ├── SchemaController.java │ │ │ │ │ ├── SchemaRestApi.java │ │ │ │ │ ├── TableObject.java │ │ │ │ │ └── TableWithColumnsObject.java │ │ │ │ ├── read/ │ │ │ │ │ ├── CountQueryController.java │ │ │ │ │ ├── ExistsQueryController.java │ │ │ │ │ ├── FindOneController.java │ │ │ │ │ └── ReadController.java │ │ │ │ ├── rpc/ │ │ │ │ │ ├── FunctionController.java │ │ │ │ │ └── ProcedureController.java │ │ │ │ ├── sql/ │ │ │ │ │ └── SQLTemplateController.java │ │ │ │ └── update/ │ │ │ │ └── UpdateController.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── banner.txt │ │ │ └── sql-templates/ │ │ │ ├── count.jte │ │ │ ├── delete-mssql.jte │ │ │ ├── delete.jte │ │ │ ├── exists-mssql.jte │ │ │ ├── exists.jte │ │ │ ├── find-one.jte │ │ │ ├── insert.jte │ │ │ ├── read-mssql.jte │ │ │ ├── read-ora-12.jte │ │ │ ├── read-ora-9.jte │ │ │ ├── read.jte │ │ │ ├── update-mssql.jte │ │ │ └── update.jte │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── homihq/ │ │ │ └── db2rest/ │ │ │ ├── BaseIntegrationTest.java │ │ │ ├── DB2BaseIntegrationTest.java │ │ │ ├── DB2ContainerConfiguration.java │ │ │ ├── MariaDBBaseIntegrationTest.java │ │ │ ├── MariaDBContainerConfiguration.java │ │ │ ├── MsSQLServerContainerConfiguration.java │ │ │ ├── MySQLBaseIntegrationTest.java │ │ │ ├── MySQLContainerConfiguration.java │ │ │ ├── OracleBaseIntegrationTest.java │ │ │ ├── OracleContainerConfiguration.java │ │ │ ├── PostgreSQLBaseIntegrationTest.java │ │ │ ├── PostgreSQLContainerConfiguration.java │ │ │ ├── SQLiteBaseIntegrationTest.java │ │ │ ├── SQLiteContainerConfiguration.java │ │ │ ├── jdbc/ │ │ │ │ └── rest/ │ │ │ │ └── meta/ │ │ │ │ ├── db/ │ │ │ │ │ ├── DbInfoControllerIntegrationTest.java │ │ │ │ │ └── DbInfoControllerTest.java │ │ │ │ └── schema/ │ │ │ │ ├── SchemaControllerIntegrationTest.java │ │ │ │ └── SchemaControllerTest.java │ │ │ └── rest/ │ │ │ ├── DateTimeUtil.java │ │ │ ├── cors/ │ │ │ │ └── CorsTest.java │ │ │ ├── db2/ │ │ │ │ ├── Db2BulkCreateControllerTest.java │ │ │ │ ├── Db2CountControllerTest.java │ │ │ │ ├── Db2CreateControllerTest.java │ │ │ │ ├── Db2DeleteAllTest.java │ │ │ │ ├── Db2DeleteControllerTest.java │ │ │ │ ├── Db2JsonFileCreateControllerTest.java │ │ │ │ ├── Db2ProcedureControllerTest.java │ │ │ │ ├── Db2RSqlOperatorReadControllerTest.java │ │ │ │ ├── Db2ReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── Db2ReadControllerTest.java │ │ │ │ ├── Db2TemplateControllerTest.java │ │ │ │ └── Db2UpdateControllerTest.java │ │ │ ├── docsSwagger/ │ │ │ │ ├── OpenApiSpecificationNoSecurityTest.java │ │ │ │ └── OpenApiSpecificationWithSecurityTest.java │ │ │ ├── mariadb/ │ │ │ │ ├── MariaDBBasicJoinControllerTest.java │ │ │ │ ├── MariaDBBulkCreateControllerTest.java │ │ │ │ ├── MariaDBCountControllerTest.java │ │ │ │ ├── MariaDBCreateControllerTest.java │ │ │ │ ├── MariaDBCrossJoinControllerTest.java │ │ │ │ ├── MariaDBDeleteAllTest.java │ │ │ │ ├── MariaDBDeleteControllerTest.java │ │ │ │ ├── MariaDBFunctionControllerTest.java │ │ │ │ ├── MariaDBInnerJoinControllerTest.java │ │ │ │ ├── MariaDBInnerJoinMultiTableControllerTest.java │ │ │ │ ├── MariaDBInnerSelfJoinControllerTest.java │ │ │ │ ├── MariaDBJsonFileCreateControllerTest.java │ │ │ │ ├── MariaDBProcedureControllerTest.java │ │ │ │ ├── MariaDBRSqlOperatorReadControllerTest.java │ │ │ │ ├── MariaDBReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── MariaDBReadControllerTest.java │ │ │ │ ├── MariaDBTemplateControllerTest.java │ │ │ │ ├── MariaDBUpdateControllerTest.java │ │ │ │ └── MariadbDateTimeAllTest.java │ │ │ ├── mssql/ │ │ │ │ ├── MsSQLBaseIntegrationTest.java │ │ │ │ ├── MsSQLBasicJoinControllerTest.java │ │ │ │ ├── MsSQLBulkCreateControllerTest.java │ │ │ │ ├── MsSQLCountControllerTest.java │ │ │ │ ├── MsSQLCreateControllerTest.java │ │ │ │ ├── MsSQLCrossJoinControllerTest.java │ │ │ │ ├── MsSQLDateTimeAllTest.java │ │ │ │ ├── MsSQLDeleteControllerTest.java │ │ │ │ ├── MsSQLDeleteWithNotAllowedSafeDeleteControllerTest.java │ │ │ │ ├── MsSQLExistsControllerTest.java │ │ │ │ ├── MsSQLFindOneControllerTest.java │ │ │ │ ├── MsSQLFunctionControllerTest.java │ │ │ │ ├── MsSQLInnerJoinControllerTest.java │ │ │ │ ├── MsSQLInnerJoinMultiTableControllerTest.java │ │ │ │ ├── MsSQLInnerSelfJoinControllerTest.java │ │ │ │ ├── MsSQLJsonFileCreateControllerTest.java │ │ │ │ ├── MsSQLProcedureControllerTest.java │ │ │ │ ├── MsSQLRSqlOperatorReadControllerTest.java │ │ │ │ ├── MsSQLReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── MsSQLReadControllerTest.java │ │ │ │ └── MsSQLUpdateControllerTest.java │ │ │ ├── mysql/ │ │ │ │ ├── CountTwoTablesSameNameDiffSchemaTest.java │ │ │ │ ├── CreateTwoTablesSameNameDiffSchemaTest.java │ │ │ │ ├── DeleteTwoTablesSameNameDiffSchemaTest.java │ │ │ │ ├── MySQLBasicJoinControllerTest.java │ │ │ │ ├── MySQLBulkCreateControllerTest.java │ │ │ │ ├── MySQLCountControllerTest.java │ │ │ │ ├── MySQLCreateControllerTest.java │ │ │ │ ├── MySQLCrossJoinControllerTest.java │ │ │ │ ├── MySQLDateTimeAllTest.java │ │ │ │ ├── MySQLDeleteAllTest.java │ │ │ │ ├── MySQLDeleteControllerTest.java │ │ │ │ ├── MySQLFunctionControllerTest.java │ │ │ │ ├── MySQLInnerJoinControllerTest.java │ │ │ │ ├── MySQLInnerJoinMultiTableControllerTest.java │ │ │ │ ├── MySQLInnerSelfJoinControllerTest.java │ │ │ │ ├── MySQLJsonFileCreateControllerTest.java │ │ │ │ ├── MySQLProcedureControllerTest.java │ │ │ │ ├── MySQLRSqlOperatorReadControllerTest.java │ │ │ │ ├── MySQLReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── MySQLReadControllerTest.java │ │ │ │ ├── MySQLTemplateControllerTest.java │ │ │ │ ├── MySQLUpdateControllerTest.java │ │ │ │ ├── ReadTwoTablesSameNameDiffSchemaTest.java │ │ │ │ └── UpdateTwoTablesSameNameDiffSchemaTest.java │ │ │ ├── oracle/ │ │ │ │ ├── OracleBasicJoinControllerTest.java │ │ │ │ ├── OracleBulkCreateControllerTest.java │ │ │ │ ├── OracleCountControllerTest.java │ │ │ │ ├── OracleCreateControllerTest.java │ │ │ │ ├── OracleCrossJoinControllerTest.java │ │ │ │ ├── OracleDateTimeAllTest.java │ │ │ │ ├── OracleDeleteAllTest.java │ │ │ │ ├── OracleDeleteControllerTest.java │ │ │ │ ├── OracleInnerJoinControllerTest.java │ │ │ │ ├── OracleInnerJoinMultiTableControllerTest.java │ │ │ │ ├── OracleInnerSelfJoinControllerTest.java │ │ │ │ ├── OracleJsonFileCreateControllerTest.java │ │ │ │ ├── OracleProcedureControllerTest.java │ │ │ │ ├── OracleRSqlOperatorReadControllerTest.java │ │ │ │ ├── OracleReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── OracleReadControllerTest.java │ │ │ │ ├── OracleTemplateControllerTest.java │ │ │ │ └── OracleUpdateControllerTest.java │ │ │ ├── pg/ │ │ │ │ ├── PGDateTimeAllTest.java │ │ │ │ ├── PgBasicJoinControllerTest.java │ │ │ │ ├── PgBulkCreateControllerTest.java │ │ │ │ ├── PgCountControllerTest.java │ │ │ │ ├── PgCreateControllerTest.java │ │ │ │ ├── PgCrossJoinControllerTest.java │ │ │ │ ├── PgDeleteAllTest.java │ │ │ │ ├── PgDeleteControllerTest.java │ │ │ │ ├── PgExtraFunctionControllerTest.java │ │ │ │ ├── PgFunctionControllerTest.java │ │ │ │ ├── PgInnerJoinControllerTest.java │ │ │ │ ├── PgInnerJoinMultiTableControllerTest.java │ │ │ │ ├── PgInnerSelfJoinControllerTest.java │ │ │ │ ├── PgJsonFileCreateControllerTest.java │ │ │ │ ├── PgMultiTenancyTest.java │ │ │ │ ├── PgProcedureControllerTest.java │ │ │ │ ├── PgRSqlOperatorReadControllerTest.java │ │ │ │ ├── PgReadControllerDefaultFetchLimitTest.java │ │ │ │ ├── PgReadControllerTest.java │ │ │ │ ├── PgTemplateControllerTest.java │ │ │ │ └── PgUpdateControllerTest.java │ │ │ └── sqlite/ │ │ │ ├── SQLiteBulkCreateControllerTest.java │ │ │ ├── SQLiteCountControllerTest.java │ │ │ ├── SQLiteCreateControllerTest.java │ │ │ ├── SQLiteCrossJoinControllerTest.java │ │ │ ├── SQLiteDateTimeAllTest.java │ │ │ ├── SQLiteDeleteControllerTest.java │ │ │ ├── SQLiteInnerJoinControllerTest.java │ │ │ ├── SQLiteJsonFileCreateControllerTest.java │ │ │ ├── SQLiteRSqlOperatorReadControllerTest.java │ │ │ ├── SQLiteReadControllerTest.java │ │ │ ├── SQLiteTemplateControllerTest.java │ │ │ └── SQLiteUpdateControllerTest.java │ │ └── resources/ │ │ ├── application-it-db2.yaml │ │ ├── application-it-mariadb.yaml │ │ ├── application-it-mssql.yaml │ │ ├── application-it-mysql.yaml │ │ ├── application-it-oracle.yaml │ │ ├── application-it-pg-mutlitenancy.yaml │ │ ├── application-it-pg.yaml │ │ ├── application-it-sqlite.yaml │ │ ├── auth-apiKey-test.yaml │ │ ├── auth-basic.yaml │ │ ├── db2/ │ │ │ ├── db2-sakila-data.sql │ │ │ └── db2-sakila.sql │ │ ├── junit-platform.properties │ │ ├── mariadb/ │ │ │ ├── mariadb-sakila-data.sql │ │ │ └── mariadb-sakila.sql │ │ ├── mssql/ │ │ │ ├── mssql-sakila-data.sql │ │ │ └── mssql-sakila.sql │ │ ├── mysql/ │ │ │ ├── mysql-sakila-data.sql │ │ │ ├── mysql-sakila.sql │ │ │ └── mysql-wakila-all.sql │ │ ├── oracle/ │ │ │ ├── oracle-sakila-data.sql │ │ │ └── oracle-sakila.sql │ │ ├── pg/ │ │ │ ├── pg-sakila-functions.sql │ │ │ ├── postgres-sakila-data.sql │ │ │ └── postgres-sakila.sql │ │ ├── sqlite/ │ │ │ ├── sqlite-sakila-data.sql │ │ │ └── sqlite-sakila.sql │ │ └── testdata/ │ │ ├── BULK_CREATE_ACTOR_REQUEST.json │ │ ├── BULK_CREATE_DIRECTOR_BAD_REQUEST.json │ │ ├── BULK_CREATE_DIRECTOR_REQUEST.json │ │ ├── BULK_CREATE_FILM_BAD_REQUEST.json │ │ ├── BULK_CREATE_FILM_REQUEST.json │ │ ├── BULK_CREATE_REVIEW_REQUEST.json │ │ ├── BULK_RESULT_ACTOR_QUERY.json │ │ ├── CREATE_ACTOR_REQUEST.json │ │ ├── CREATE_DIRECTOR_REQUEST.json │ │ ├── CREATE_EMP_REQUEST.json │ │ ├── CREATE_FILM_BAD_REQUEST_CSV.csv │ │ ├── CREATE_FILM_REQUEST.json │ │ ├── CREATE_FILM_REQUEST_CSV.csv │ │ ├── CREATE_FILM_REQUEST_ERROR.json │ │ ├── CREATE_FILM_REQUEST_MISSING_PAYLOAD.json │ │ ├── CREATE_USER_REQUEST.json │ │ ├── CREATE_VANITY_VAN_REQUEST.json │ │ ├── CROSS_JOIN_TOPS.json │ │ ├── CROSS_JOIN_TOPS_MSSQL.json │ │ ├── CROSS_JOIN_TOPS_ORACLE.json │ │ ├── CROSS_JOIN_TOPS_PG.json │ │ ├── CROSS_JOIN_USERS.json │ │ ├── CROSS_JOIN_USERS_MSSQL.json │ │ ├── CROSS_JOIN_USERS_ORACLE.json │ │ ├── CROSS_JOIN_USERS_PG.json │ │ ├── EMPTY_ACTOR_QUERY.json │ │ ├── INNER_JOIN.json │ │ ├── INNER_JOIN_MULTI_TABLE.json │ │ ├── INNER_JOIN_MULTI_TABLE_ORACLE.json │ │ ├── INNER_JOIN_ORACLE.json │ │ ├── INNER_SELF_JOIN.json │ │ ├── INNER_SELF_JOIN_ORACLE.json │ │ ├── LEFT_JOIN.json │ │ ├── LEFT_JOIN_ORACLE.json │ │ ├── RIGHT_JOIN.json │ │ ├── RIGHT_JOIN_ORACLE.json │ │ ├── SINGLE_RESULT_ACTOR_QUERY.json │ │ ├── UPDATE_ACTOR_REQUEST.json │ │ ├── UPDATE_EMPLOYEE_REQUEST.json │ │ ├── UPDATE_FILMS_REQUEST.json │ │ ├── UPDATE_FILM_REQUEST.json │ │ ├── UPDATE_NON_EXISTING_FILM_REQUEST.json │ │ ├── UPDATE_NON_EXISTING_TABLE.json │ │ ├── actor.json │ │ ├── actor5mb.json │ │ ├── director.json │ │ ├── sql-db2/ │ │ │ ├── conditional_render_and_op.sql │ │ │ ├── conditional_render_join.sql │ │ │ ├── select_all.sql │ │ │ ├── select_by_id.sql │ │ │ └── select_by_id_is_required.sql │ │ ├── sql-mariadb/ │ │ │ ├── conditional_render_and_op.sql │ │ │ ├── conditional_render_join.sql │ │ │ ├── select_all.sql │ │ │ ├── select_by_id.sql │ │ │ └── select_by_id_is_required.sql │ │ ├── sql-mysql/ │ │ │ ├── conditional_render_and_op.sql │ │ │ ├── conditional_render_join.sql │ │ │ ├── select_all.sql │ │ │ ├── select_by_id.sql │ │ │ └── select_by_id_is_required.sql │ │ ├── sql-oracle/ │ │ │ ├── conditional_render_and_op.sql │ │ │ ├── conditional_render_join.sql │ │ │ ├── select_all.sql │ │ │ ├── select_by_id.sql │ │ │ └── select_by_id_is_required.sql │ │ ├── sql-pg/ │ │ │ ├── conditional_render_and_op.sql │ │ │ ├── conditional_render_join.sql │ │ │ ├── delete_from_content.sql │ │ │ ├── insert_from_content.sql │ │ │ ├── select_all.sql │ │ │ ├── select_by_id.sql │ │ │ ├── select_by_id_from_content.sql │ │ │ ├── select_by_id_is_required.sql │ │ │ └── update_by_id_from_content.sql │ │ └── sql-sqlite/ │ │ ├── conditional_render_and_op.sql │ │ ├── conditional_render_join.sql │ │ ├── select_all.sql │ │ └── select_by_id.sql │ ├── pom.xml │ └── rest-common/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── homihq/ │ └── db2rest/ │ ├── bulk/ │ │ ├── CSVDataProcessor.java │ │ ├── DataProcessor.java │ │ ├── FileStreamObserver.java │ │ ├── FileSubject.java │ │ ├── JSONDataProcessor.java │ │ └── JsonFileDataProcessor.java │ ├── config/ │ │ ├── CorsConfigProperties.java │ │ ├── DateTimeConfigProperties.java │ │ ├── DateTimeConfiguration.java │ │ ├── Db2RestConfigProperties.java │ │ ├── MultiTenancy.java │ │ └── OpenAPIConfiguration.java │ ├── dtos/ │ │ └── BulkContext.java │ ├── exception/ │ │ └── GlobalExceptionHandler.java │ └── multidb/ │ ├── DatabaseConnectionDetail.java │ ├── DatabaseProperties.java │ └── EnvironmentProperties.java ├── db2rest-auth/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── homihq/ │ │ └── db2rest/ │ │ └── auth/ │ │ ├── AuthConfiguration.java │ │ ├── AuthFilter.java │ │ ├── data/ │ │ │ ├── ApiExcludedResource.java │ │ │ ├── ApiKey.java │ │ │ ├── ApiResource.java │ │ │ ├── AuthData.java │ │ │ ├── ResourceRole.java │ │ │ ├── RoleDataFilter.java │ │ │ ├── User.java │ │ │ └── UserDetail.java │ │ ├── datalookup/ │ │ │ ├── ApiAuthDataLookup.java │ │ │ ├── AuthDataLookup.java │ │ │ ├── AuthDataProperties.java │ │ │ ├── FileAuthDataLookup.java │ │ │ └── NoAuthdataLookup.java │ │ ├── exception/ │ │ │ └── AuthException.java │ │ ├── provider/ │ │ │ ├── AbstractAuthProvider.java │ │ │ ├── apikey/ │ │ │ │ └── ApiKeyAuthProvider.java │ │ │ ├── basic/ │ │ │ │ └── BasicAuthProvider.java │ │ │ └── jwt/ │ │ │ ├── JwtAuthProvider.java │ │ │ └── JwtProperties.java │ │ └── unkey/ │ │ ├── UnKeyAuthConfiguration.java │ │ ├── UnKeyAuthFilter.java │ │ ├── service/ │ │ │ └── UnKeyAuthService.java │ │ └── to/ │ │ ├── UnKeyVerifyRequest.java │ │ └── UnKeyVerifyResponse.java │ └── resources/ │ ├── auth-sample-api-key.yml │ ├── auth-sample.json │ └── auth-sample.yml ├── db2rest-core/ │ ├── db2rest-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── homihq/ │ │ └── db2rest/ │ │ ├── core/ │ │ │ ├── dto/ │ │ │ │ ├── CountResponse.java │ │ │ │ ├── CreateBulkResponse.java │ │ │ │ ├── CreateResponse.java │ │ │ │ ├── DeleteResponse.java │ │ │ │ ├── ExistsResponse.java │ │ │ │ └── UpdateResponse.java │ │ │ └── exception/ │ │ │ ├── AuthenticationFailedException.java │ │ │ ├── DeleteOpNotAllowedException.java │ │ │ ├── GenericDataAccessException.java │ │ │ ├── InvalidColumnException.java │ │ │ ├── InvalidOperatorException.java │ │ │ ├── InvalidTableException.java │ │ │ ├── PathVariableNamesMissingException.java │ │ │ ├── PathVariableValuesMissingException.java │ │ │ ├── PlaceholderConstraintException.java │ │ │ ├── RpcException.java │ │ │ ├── SqlTemplateNotFoundException.java │ │ │ ├── SqlTemplateReadException.java │ │ │ └── UnsupportedConstraintException.java │ │ └── multidb/ │ │ └── DatabaseContextHolder.java │ ├── pom.xml │ ├── rdbms-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ ├── Dialect.java │ │ └── model/ │ │ ├── ArrayTypeValueHolder.java │ │ ├── Database.java │ │ ├── DbAlias.java │ │ ├── DbColumn.java │ │ ├── DbJoin.java │ │ ├── DbSort.java │ │ ├── DbTable.java │ │ └── DbWhere.java │ └── rdbms-support/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com/ │ │ └── homihq/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ ├── JdbcManager.java │ │ ├── JdbcOperationService.java │ │ ├── core/ │ │ │ ├── DbOperationService.java │ │ │ ├── SimpleRowMapper.java │ │ │ └── service/ │ │ │ ├── BulkCreateService.java │ │ │ ├── CountQueryService.java │ │ │ ├── CreateService.java │ │ │ ├── DeleteService.java │ │ │ ├── ExistsQueryService.java │ │ │ ├── FindOneService.java │ │ │ ├── FunctionService.java │ │ │ ├── JdbcBulkCreateService.java │ │ │ ├── JdbcCountQueryService.java │ │ │ ├── JdbcCreateService.java │ │ │ ├── JdbcDeleteService.java │ │ │ ├── JdbcExistsQueryService.java │ │ │ ├── JdbcFindOneService.java │ │ │ ├── JdbcFunctionService.java │ │ │ ├── JdbcProcedureService.java │ │ │ ├── JdbcReadService.java │ │ │ ├── JdbcUpdateService.java │ │ │ ├── JinJavaTemplateExecutorService.java │ │ │ ├── ProcedureService.java │ │ │ ├── ReadService.java │ │ │ ├── SQLTemplateExecutorService.java │ │ │ ├── SubRoutine.java │ │ │ └── UpdateService.java │ │ ├── dto/ │ │ │ ├── BindVariable.java │ │ │ ├── CreateContext.java │ │ │ ├── DeleteContext.java │ │ │ ├── FnUtil.java │ │ │ ├── InsertableColumn.java │ │ │ ├── JoinDetail.java │ │ │ ├── Placeholder.java │ │ │ ├── QueryRequest.java │ │ │ ├── ReadContext.java │ │ │ └── UpdateContext.java │ │ ├── multidb/ │ │ │ ├── DbDetailHolder.java │ │ │ └── RoutingDataSource.java │ │ ├── processor/ │ │ │ ├── JoinProcessor.java │ │ │ ├── OrderByProcessor.java │ │ │ ├── ReadProcessor.java │ │ │ ├── RootTableFieldProcessor.java │ │ │ ├── RootTableProcessor.java │ │ │ └── RootWhereProcessor.java │ │ ├── rsql/ │ │ │ ├── operator/ │ │ │ │ ├── CustomRSQLOperators.java │ │ │ │ ├── OperatorHandler.java │ │ │ │ ├── OperatorMap.java │ │ │ │ ├── RSQLOperatorHandlers.java │ │ │ │ └── handler/ │ │ │ │ ├── EndWithOperatorHandler.java │ │ │ │ ├── EqualToOperatorHandler.java │ │ │ │ ├── GreaterThanEqualToOperatorHandler.java │ │ │ │ ├── GreaterThanOperatorHandler.java │ │ │ │ ├── InOperatorHandler.java │ │ │ │ ├── IsNotNullOperatorHandler.java │ │ │ │ ├── IsNullOperatorHandler.java │ │ │ │ ├── JsonContainInArrayOperatorHandler.java │ │ │ │ ├── JsonContainOperatorHandler.java │ │ │ │ ├── JsonbContainOperatorHandler.java │ │ │ │ ├── JsonbEqualToOperatorHandler.java │ │ │ │ ├── JsonbKeyExistsOperatorHandler.java │ │ │ │ ├── LessThanEqualToOperatorHandler.java │ │ │ │ ├── LessThanOperatorHandler.java │ │ │ │ ├── LikeOperatorHandler.java │ │ │ │ ├── NotEqualToOperatorHandler.java │ │ │ │ ├── NotInOperatorHandler.java │ │ │ │ ├── NotLikeOperatorHandler.java │ │ │ │ └── StartWithOperatorHandler.java │ │ │ ├── parser/ │ │ │ │ └── RSQLParserBuilder.java │ │ │ ├── resolver/ │ │ │ │ └── CrossTableColumnResolver.java │ │ │ └── visitor/ │ │ │ └── BaseRSQLVisitor.java │ │ ├── sql/ │ │ │ ├── ColumnLabel.java │ │ │ ├── DB2DataExtraction.java │ │ │ ├── DbMeta.java │ │ │ ├── JdbcMetaDataProvider.java │ │ │ ├── JdbcTypeJavaClassMappings.java │ │ │ ├── MariaDBDataExtraction.java │ │ │ ├── MetaDataExtraction.java │ │ │ ├── MetaDataTable.java │ │ │ ├── MsSQLServerMetaDataExtraction.java │ │ │ ├── MySQLDataExtraction.java │ │ │ ├── OracleMetaDataExtraction.java │ │ │ ├── PostgreSQLDataExclusion.java │ │ │ ├── SQLiteDataExtraction.java │ │ │ ├── SqlCreatorTemplate.java │ │ │ └── SqlTypes.java │ │ ├── tsid/ │ │ │ └── TSIDProcessor.java │ │ ├── util/ │ │ │ └── AliasGenerator.java │ │ └── validator/ │ │ ├── ConstraintValidator.java │ │ ├── CustomPlaceholderValidators.java │ │ └── impl/ │ │ ├── IsRequiredValidator.java │ │ └── IsUUIDValidator.java │ └── test/ │ └── java/ │ └── com/ │ └── homihq/ │ └── db2rest/ │ └── jdbc/ │ ├── core/ │ │ └── service/ │ │ └── JdbcCreateServiceTest.java │ ├── dto/ │ │ └── FnUtilTest.java │ ├── util/ │ │ └── AliasGeneratorTest.java │ └── validator/ │ ├── CustomPlaceholderValidatorsTest.java │ └── impl/ │ ├── IsRequiredValidatorTest.java │ └── IsUUIDValidatorTest.java ├── db2rest-dialects/ │ ├── db2-dialect/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── db2rest/ │ │ │ └── jdbc/ │ │ │ └── dialect/ │ │ │ └── DB2RestDB2Dialect.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── db2rest/ │ │ │ └── jdbc/ │ │ │ └── dialect/ │ │ │ ├── DB2RestDB2DialectTest.java │ │ │ └── TestConfiguration.java │ │ └── resources/ │ │ └── application-test.yml │ ├── mariadb-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ └── MariaDBDialect.java │ ├── mssql-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ └── MsSQLServerDialect.java │ ├── mysql-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ └── DB2RestMySQLDialect.java │ ├── oracle-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ └── OracleDialect.java │ ├── oracle9i-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ └── OracleDialect.java │ ├── pg-dialect/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── db2rest/ │ │ └── jdbc/ │ │ └── dialect/ │ │ ├── PostGreSQLDialect.java │ │ └── driver/ │ │ ├── EnvVarSSLSocketFactory.java │ │ └── PgSingleCertValidatingFactory.java │ ├── pom.xml │ └── sqlite-dialect/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── db2rest/ │ └── jdbc/ │ └── dialect/ │ └── SQLiteDialect.java ├── db2rest-oas3.json ├── design/ │ └── insert.md ├── docker-compose/ │ ├── db2/ │ │ ├── README.md │ │ ├── docker-compose.yml │ │ └── init/ │ │ └── 01-create-schema.sql │ ├── mariadb/ │ │ ├── api-interaction.sh │ │ ├── docker-compose.yml │ │ ├── init/ │ │ │ └── 01-init.sql │ │ └── run.sh │ ├── mysql/ │ │ ├── api-interaction.sh │ │ ├── docker-compose.yml │ │ ├── init/ │ │ │ └── 01-init.sql │ │ └── run.sh │ ├── oracle/ │ │ ├── api-interaction.sh │ │ ├── docker-compose.yml │ │ ├── init/ │ │ │ └── 01-init.sql │ │ └── run.sh │ ├── postgresql/ │ │ ├── api-interaction.sh │ │ ├── docker-compose.yml │ │ ├── init/ │ │ │ └── 01-init.sql │ │ └── run.sh │ └── sqlserver/ │ ├── api-interaction.sh │ ├── docker-compose.yml │ ├── init/ │ │ └── 01-init.sql │ └── run.sh ├── fed/ │ └── federation.md ├── funding.json ├── integration-test-guideline.md ├── mvnw ├── mvnw.cmd └── pom.xml
SYMBOL INDEX (1823 symbols across 353 files)
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/Db2restApplication.java
class Db2restApplication (line 10) | @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, Mon...
method main (line 14) | public static void main(String[] args) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/CorsFilterConfiguration.java
class CorsFilterConfiguration (line 17) | @Slf4j
method corsFilter (line 21) | @Bean
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/DbServiceConfiguration.java
class DbServiceConfiguration (line 38) | @Slf4j
method dataSource (line 46) | @Bean
method buildDataSources (line 58) | private Map<Object, Object> buildDataSources() {
method buildDataSource (line 79) | private DataSource buildDataSource(DatabaseConnectionDetail connection...
method jdbcManager (line 91) | @Bean
method operationService (line 107) | @Bean
method sqlCreatorTemplate (line 113) | @Bean
method templateEngine (line 118) | @Bean
method jinjava (line 126) | @Bean
method tsidProcessor (line 137) | @Bean
method joinProcessor (line 142) | @Bean
method orderByProcessor (line 147) | @Bean
method rootTableFieldProcessor (line 152) | @Bean
method rootTableProcessor (line 157) | @Bean
method rootWhereProcessor (line 162) | @Bean
method customPlaceholderValidators (line 170) | @Bean
method bulkCreateService (line 180) | @Bean
method createService (line 190) | @Bean
method countQueryService (line 199) | @Bean
method existsQueryService (line 210) | @Bean
method findOneService (line 219) | @Bean
method readService (line 228) | @Bean
method updateService (line 238) | @Bean
method deleteService (line 248) | @Bean
method functionService (line 257) | @Bean
method procedureService (line 262) | @Bean
method templateService (line 267) | @Bean
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/RestApiConfiguration.java
class RestApiConfiguration (line 29) | @Slf4j
method bulkCreateController (line 39) | @Bean
method createController (line 46) | @Bean
method countQueryController (line 53) | @Bean
method existsQueryController (line 59) | @Bean
method findOneController (line 65) | @Bean
method readController (line 71) | @Bean
method updateController (line 79) | @Bean
method deleteController (line 86) | @Bean
method functionController (line 93) | @Bean
method procedureController (line 99) | @Bean
method schemaController (line 105) | @Bean
method sqlTemplateController (line 111) | @Bean
method dbInfoController (line 119) | @Bean
method adminController (line 126) | @Bean
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/WebMvcConfiguration.java
class WebMvcConfiguration (line 13) | @Configuration
method addInterceptors (line 21) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/jinjava/DisabledExpressionTokenScannerSymbols.java
class DisabledExpressionTokenScannerSymbols (line 5) | public class DisabledExpressionTokenScannerSymbols extends DefaultTokenS...
method getExprStart (line 6) | @Override
method getExprEnd (line 11) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/interceptor/DatabaseContextRequestInterceptor.java
class DatabaseContextRequestInterceptor (line 21) | @Slf4j
method preHandle (line 31) | @Override
method isWhileListed (line 62) | private boolean isWhileListed(String uri) {
method postHandle (line 66) | @Override
method setTenantContext (line 71) | private void setTenantContext(String tenant) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/RdbmsRestApi.java
type RdbmsRestApi (line 3) | public interface RdbmsRestApi {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/admin/AdminController.java
class AdminController (line 10) | @RestController
method reloadCache (line 19) | @PostMapping("/reloadCache")
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateController.java
class BulkCreateController (line 21) | @RestController
method save (line 29) | public CreateBulkResponse save(
method saveMultipartFile (line 50) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateRestApi.java
type BulkCreateRestApi (line 22) | public interface BulkCreateRestApi {
method save (line 23) | @ResponseStatus(HttpStatus.CREATED)
method saveMultipartFile (line 36) | @ResponseStatus(HttpStatus.CREATED)
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateController.java
class CreateController (line 16) | @RestController
method save (line 23) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateRestApi.java
type CreateRestApi (line 20) | public interface CreateRestApi {
method save (line 21) | @ResponseStatus(HttpStatus.CREATED)
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteController.java
class DeleteController (line 14) | @RestController
method delete (line 22) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteRestApi.java
type DeleteRestApi (line 18) | public interface DeleteRestApi {
method delete (line 19) | @ResponseStatus(HttpStatus.OK)
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoController.java
class DbInfoController (line 13) | @RestController
method getObjects (line 20) | @Override
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoRestApi.java
type DbInfoRestApi (line 12) | @RequestMapping(VERSION + "/$dbs")
method getObjects (line 17) | @Operation(summary = "Get all database info details",
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/ColumnObject.java
method ColumnObject (line 6) | public ColumnObject(DbColumn dbColumn) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaController.java
class SchemaController (line 19) | @RestController
method getObjects (line 32) | @Override
method getSchemaFilter (line 75) | private SchemaFilter getSchemaFilter(String filter) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaRestApi.java
type SchemaRestApi (line 18) | @RequestMapping(VERSION + "/{dbId}/$schemas")
method getObjects (line 21) | @Operation(
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableObject.java
class TableObject (line 7) | @EqualsAndHashCode
method TableObject (line 14) | public TableObject(DbTable dbTable) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableWithColumnsObject.java
class TableWithColumnsObject (line 9) | @EqualsAndHashCode(callSuper = true)
method TableWithColumnsObject (line 14) | public TableWithColumnsObject(DbTable dbTable) {
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/CountQueryController.java
class CountQueryController (line 22) | @RestController
method count (line 29) | @GetMapping(VERSION + "/{dbId}/{tableName}/count")
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ExistsQueryController.java
class ExistsQueryController (line 25) | @Slf4j
method exists (line 32) | @GetMapping(value = VERSION + "/{dbId}/{tableName}/exists", produces =...
method exists (line 53) | @PostMapping(value = VERSION + "/{dbId}/{tableName}/exists/_expand", p...
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/FindOneController.java
class FindOneController (line 22) | @RestController
method findOne (line 29) | @GetMapping(VERSION + "/{dbId}/{tableName}/one")
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ReadController.java
class ReadController (line 25) | @RestController
method findAll (line 33) | @GetMapping(value = VERSION + "/{dbId}/{tableName}", produces = "appli...
method find (line 63) | @PostMapping(value = VERSION + "/{dbId}/{tableName}/_expand", produces...
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/FunctionController.java
class FunctionController (line 17) | @RestController
method execute (line 25) | @PostMapping("/{funcName}")
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/ProcedureController.java
class ProcedureController (line 14) | @RestController
method execute (line 22) | @PostMapping("/{procName}")
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/sql/SQLTemplateController.java
class SQLTemplateController (line 19) | @Slf4j
method sqlTemplate (line 27) | @GetMapping("/{fileName}/{*userPathVariable}")
method sqlTemplate (line 44) | @PostMapping("/{fileName}")
method createContext (line 60) | private Map<String, Object> createContext(
method createPaths (line 72) | private static Map<String, Object> createPaths(String userPathVariable...
FILE: db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/update/UpdateController.java
class UpdateController (line 23) | @RestController
method save (line 30) | @PatchMapping(VERSION + "/{dbId}/{tableName}")
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/BaseIntegrationTest.java
class BaseIntegrationTest (line 29) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
method setUp (line 44) | @BeforeEach
method createMockMvc (line 50) | protected void createMockMvc(WebApplicationContext webApplicationConte...
method setupEnv (line 57) | void setupEnv() {
method isoDateTimeFormats (line 70) | static List<Arguments> isoDateTimeFormats() {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2BaseIntegrationTest.java
class DB2BaseIntegrationTest (line 8) | @Import(DB2ContainerConfiguration.class)
method deleteRow (line 14) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2ContainerConfiguration.java
class DB2ContainerConfiguration (line 18) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 37) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBBaseIntegrationTest.java
class MariaDBBaseIntegrationTest (line 8) | @Import(MariaDBContainerConfiguration.class)
method deleteRow (line 15) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBContainerConfiguration.java
class MariaDBContainerConfiguration (line 17) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 38) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MsSQLServerContainerConfiguration.java
class MsSQLServerContainerConfiguration (line 16) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 35) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLBaseIntegrationTest.java
class MySQLBaseIntegrationTest (line 8) | @Import(MySQLContainerConfiguration.class)
method deleteRow (line 15) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLContainerConfiguration.java
class MySQLContainerConfiguration (line 16) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 37) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleBaseIntegrationTest.java
class OracleBaseIntegrationTest (line 8) | @Import(OracleContainerConfiguration.class)
method deleteRow (line 15) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleContainerConfiguration.java
class OracleContainerConfiguration (line 16) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 36) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLBaseIntegrationTest.java
class PostgreSQLBaseIntegrationTest (line 8) | @Import(PostgreSQLContainerConfiguration.class)
method deleteRow (line 15) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLContainerConfiguration.java
class PostgreSQLContainerConfiguration (line 17) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 37) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteBaseIntegrationTest.java
class SQLiteBaseIntegrationTest (line 8) | @Import(SQLiteContainerConfiguration.class)
method deleteRow (line 15) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteContainerConfiguration.java
class SQLiteContainerConfiguration (line 20) | @TestConfiguration(proxyBeanMethods = false)
method dataSource (line 51) | @Bean
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerIntegrationTest.java
class DbInfoControllerIntegrationTest (line 26) | @Disabled
method setUp (line 35) | @BeforeEach
method getObjects (line 55) | void getObjects() throws Exception {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerTest.java
class DbInfoControllerTest (line 21) | class DbInfoControllerTest {
method setUp (line 25) | @BeforeEach
method testGetObjects (line 41) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerIntegrationTest.java
class SchemaControllerIntegrationTest (line 30) | class SchemaControllerIntegrationTest extends BaseIntegrationTest {
method setUp (line 37) | @BeforeEach
method testGetObjects (line 61) | @Test
method testGetColumnObjects (line 79) | @Test
method testGetObjectsInvalidFilter (line 104) | @Test
method testGetObjectsValidFilter (line 128) | @Test
method testGetObjectsInvalidFilterField (line 151) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerTest.java
class SchemaControllerTest (line 24) | class SchemaControllerTest {
method setUp (line 29) | @BeforeEach
method getActualTableObject (line 47) | private List<TableObject> getActualTableObject(String filter) {
method testFilter (line 52) | private void testFilter(String goodFilter, String badFilter) {
method getObjectsNoFilter (line 62) | @Test
method testGetObjectsFilterInvalid (line 70) | @Test
method testGetObjectsValidFilter_schema (line 77) | @Test
method testGetObjectsValidFilter_name (line 82) | @Test
method testGetObjectsValidFilter_type (line 87) | @Test
method testGetObjectsValidFilter_invalidFieldFilter (line 92) | @Test
method testGetObjectsDbIDInvalid (line 99) | @Test
method testGetObjectsWithColumns (line 105) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/DateTimeUtil.java
class DateTimeUtil (line 13) | public class DateTimeUtil {
method utcToLocalTimestampString (line 16) | public static String utcToLocalTimestampString(MvcResult result) throw...
method utcToLocalTimestampStringOracle (line 32) | public static String utcToLocalTimestampStringOracle(MvcResult result)...
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/cors/CorsTest.java
class CorsTest (line 33) | @SpringBootTest
method setProperties (line 69) | @DynamicPropertySource
method setup (line 101) | @BeforeEach
method shouldBeSuccessfullForCorrectCORSOrigin (line 106) | @Test
method shouldBeFaliureForWrongCORSOrigin (line 113) | @Test
method shouldBeFaliureForWrongCORSMethod (line 120) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2BulkCreateControllerTest.java
class Db2BulkCreateControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 61) | @Test
method createCSV (line 81) | @Test
method createCSVWithError (line 99) | @Test
method createError (line 114) | @Test
method createDirector (line 129) | @Test
method createDirectorWithWrongTsidType (line 145) | @Test
method createReviewWithDefaultTsidType (line 163) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CountControllerTest.java
class Db2CountControllerTest (line 16) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findFilmCount (line 20) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CreateControllerTest.java
class Db2CreateControllerTest (line 32) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 55) | @Test
method createError (line 73) | @Test
method createNonExistentTable (line 86) | @Test
method createDirectorWithTSIDEnabled (line 99) | @Test
method createDirectorWithTSIDOff (line 116) | @Test
method createVanityVanWithVarcharTsIdType (line 130) | @Test
method createFilmWithSubsetOfColumns (line 146) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 178) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 211) | @Test
method column_violates_not_null_constraint (line 224) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2DeleteAllTest.java
class Db2DeleteAllTest (line 21) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteAllWithAllowSafeDeleteFalse (line 26) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2DeleteControllerTest.java
class Db2DeleteControllerTest (line 22) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method delete_single_record (line 26) | @Test
method delete_all_records_with_allow_safe_delete_true (line 39) | @Test
method column_does_not_exist (line 51) | @Test
method foreign_key_constraint_violation (line 64) | @Disabled
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2JsonFileCreateControllerTest.java
class Db2JsonFileCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 39) | @Test
method uploadActorFileNonJsonArray (line 59) | @Test
method createDirectorViaUpload (line 74) | @Test
method createFilmsViaUpload (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ProcedureControllerTest.java
class Db2ProcedureControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 28) | @DisplayName("Execute stored procedure on db2 db")
method executeUpdateUserProc (line 50) | @DisplayName("Execute stored procedure UpdateUserProc on db2 db ")
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2RSqlOperatorReadControllerTest.java
class Db2RSqlOperatorReadControllerTest (line 25) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 30) | @Test
method findWithNotEqualsOperator (line 48) | @Test
method findWithGreaterThanOperator (line 66) | @Test
method findWithGreaterThanEqualsOperator (line 83) | @Test
method findWithLessThanOperator (line 101) | @Test
method findWithLessThanEqualsOperator (line 116) | @Test
method findWithInOperator (line 132) | @Test
method findWithNotInOperator (line 148) | @Test
method findWithNotInOperatorExt (line 164) | @Test
method findWithLikeOperator (line 180) | @Test
method findWithStartsWithOperator (line 195) | @Test
method findWithEndsWithOperator (line 210) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 225) | @Test
method findWithNotLikeOperator (line 238) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 258) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 276) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 292) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 308) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 330) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 343) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEqualsCombinationalOperator (line 366) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 382) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 395) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 411) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ReadControllerDefaultFetchLimitTest.java
class Db2ReadControllerDefaultFetchLimitTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllPersonsWithDefaultFetchLimit5 (line 24) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ReadControllerTest.java
class Db2ReadControllerTest (line 22) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 25) | @Test
method findAllFilmsWithThreeCols (line 40) | @Test
method findAllFilmsWithColumnAlias (line 55) | @Test
method findOneFilm (line 73) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2TemplateControllerTest.java
class Db2TemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 27) | @Test
method findFilmByID (line 39) | @Test
method findFilmByIDWithHeader (line 52) | @Test
method findFilmByIDWithPath (line 65) | @Test
method findFilmByIDWithRequiredConstraint (line 78) | @Test
method selectWithConditionalRenderNoRequestParams (line 87) | @Test
method selectWithConditionalRenderWithID (line 99) | @Test
method selectWithConditionalRenderWithField (line 113) | @Test
method selectWithConditionalRenderJoinWithoutInput (line 131) | @Test
method selectWithConditionalRenderJoin (line 145) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2UpdateControllerTest.java
class Db2UpdateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateExistingFilm (line 48) | @Test
method updateNonExistingFilm (line 63) | @Test
method updateNonExistingTable (line 78) | @Test
method updateMultipleColumns (line 92) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/docsSwagger/OpenApiSpecificationNoSecurityTest.java
class OpenApiSpecificationNoSecurityTest (line 33) | @SpringBootTest
method setProperties (line 69) | @DynamicPropertySource
method setup (line 78) | @BeforeEach
method shouldBeSuccessfullForOpeningDocs (line 83) | @Test
method shouldBeSuccessfullForDocsJsonData (line 88) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/docsSwagger/OpenApiSpecificationWithSecurityTest.java
class OpenApiSpecificationWithSecurityTest (line 33) | @SpringBootTest
method setProperties (line 69) | @DynamicPropertySource
method setup (line 106) | @BeforeEach
method shouldBeSuccessfullForOpeningDocs (line 111) | @Test
method shouldBeSuccessfullForDocsJsonData (line 116) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBBasicJoinControllerTest.java
class MariaDBBasicJoinControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testLeftJoin (line 38) | @Test
method testRightJoin (line 60) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBBulkCreateControllerTest.java
class MariaDBBulkCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 56) | @Test
method createCSV (line 76) | @Test
method createCSVWithError (line 91) | @Test
method createError (line 104) | @Test
method createDirector (line 117) | @Test
method createDirectorWithWrongTsidType (line 130) | @Test
method createReviewWithDefaultTsidType (line 147) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCountControllerTest.java
class MariaDBCountControllerTest (line 16) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testFilmCount (line 19) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCreateControllerTest.java
class MariaDBCreateControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 54) | @Test
method createError (line 69) | @Test
method createNonExistentTable (line 81) | @Test
method createDirectorWithTSIDEnabled (line 92) | @Test
method createDirectorWithTSIDOff (line 108) | @Test
method createVanityVanWithVarcharTsIdType (line 121) | @Test
method createFilmWithSubsetOfColumns (line 137) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 168) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 200) | @Test
method column_violates_not_null_constraint (line 215) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCrossJoinControllerTest.java
class MariaDBCrossJoinControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testCrossJoin (line 39) | @Test
method testCrossJoinTops (line 62) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBDeleteAllTest.java
class MariaDBDeleteAllTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteAllWithAllowSafeDeleteFalse (line 25) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBDeleteControllerTest.java
class MariaDBDeleteControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method delete_single_record (line 24) | @Test
method delete_all_records_with_allow_safe_delete_true (line 36) | @Test
method column_does_not_exist (line 49) | @Test
method foreign_key_constraint_violation (line 62) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBFunctionControllerTest.java
class MariaDBFunctionControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 27) | @Test
method updateUser (line 49) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerJoinControllerTest.java
class MariaDBInnerJoinControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerJoin (line 35) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerJoinMultiTableControllerTest.java
class MariaDBInnerJoinMultiTableControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerMultiTable (line 35) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerSelfJoinControllerTest.java
class MariaDBInnerSelfJoinControllerTest (line 22) | @TestWithResources
method testInnerSelfJoin (line 34) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBJsonFileCreateControllerTest.java
class MariaDBJsonFileCreateControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 35) | @Test
method uploadActorFileNonJsonArray (line 55) | @Test
method createDirectorViaUpload (line 70) | @Test
method createFilmsViaUpload (line 90) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBProcedureControllerTest.java
class MariaDBProcedureControllerTest (line 18) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 22) | @Test
method updateUser (line 44) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBRSqlOperatorReadControllerTest.java
class MariaDBRSqlOperatorReadControllerTest (line 26) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 31) | @Test
method findWithNotEqualsOperator (line 49) | @Test
method findWithGreaterThanOperator (line 67) | @Test
method findWithGreaterThanEqualsOperator (line 84) | @Test
method findWithLessThanOperator (line 102) | @Test
method findWithLessThanEqualsOperator (line 117) | @Test
method findWithInOperator (line 133) | @Test
method findWithNotInOperator (line 149) | @Test
method findWithNotInOperatorExt (line 165) | @Test
method findWithLikeOperator (line 181) | @Test
method findWithStartsWithOperator (line 196) | @Test
method findWithEndsWithOperator (line 211) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 228) | @Test
method findWithNotLikeOperator (line 242) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 262) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 280) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 296) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 312) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 334) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 347) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEualsCombinationalOperator (line 370) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 386) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 399) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 415) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBReadControllerDefaultFetchLimitTest.java
class MariaDBReadControllerDefaultFetchLimitTest (line 17) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllPersonsWithDefaultFetchLimit5 (line 23) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBReadControllerTest.java
class MariaDBReadControllerTest (line 21) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 24) | @Test
method findAllFilmsWithThreeCols (line 39) | @Test
method findAllFilmsWithColumnAlias (line 54) | @Test
method findOneFilm (line 72) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBTemplateControllerTest.java
class MariaDBTemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 27) | @Test
method findFilmByID (line 39) | @Test
method findFilmByIDWithHeader (line 52) | @Test
method findFilmByIDWithPath (line 65) | @Test
method findFilmByIDWithRequiredConstraint (line 78) | @Test
method selectWithConditionalRenderNoRequestParams (line 87) | @Test
method selectWithConditionalRenderWithID (line 99) | @Test
method selectWithConditionalRenderWithField (line 113) | @Test
method selectWithConditionalRenderJoinWithoutInput (line 131) | @Test
method selectWithConditionalRenderJoin (line 145) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBUpdateControllerTest.java
class MariaDBUpdateControllerTest (line 26) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateExistingFilm (line 47) | @Test
method updateNonExistingFilm (line 61) | @Test
method updateNonExistingTable (line 75) | @Test
method updateMultipleColumns (line 88) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariadbDateTimeAllTest.java
class MariadbDateTimeAllTest (line 37) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithDateTimeFields (line 47) | @Test
method createActorWithErrorDateTimeField (line 67) | @Test
method updateActorWithDateTimeField (line 85) | @Test
method getActorWithDateTimeFields (line 104) | @Test
method getActorFilterByTimeStamp (line 120) | @Test
method deleteActorByTimeStamp (line 136) | @Test
method createActorWithIsoDateTimeFormats (line 151) | @ParameterizedTest
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBaseIntegrationTest.java
class MsSQLBaseIntegrationTest (line 16) | @Import(MsSQLServerContainerConfiguration.class)
method getPrefixApiUrl (line 29) | protected String getPrefixApiUrl() {
method deleteRow (line 33) | protected boolean deleteRow(String table, String column, int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBasicJoinControllerTest.java
class MsSQLBasicJoinControllerTest (line 23) | @Order(501)
method leftJoin (line 33) | @Test
method rightJoin (line 59) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBulkCreateControllerTest.java
class MsSQLBulkCreateControllerTest (line 24) | @Order(503)
method bulkCreateFilmsWithJsonType (line 49) | @Test
method bulkCreateFilmsWithCsvType (line 64) | @Test
method bulkCreateFilmsWithCsvTypeError (line 78) | @Test
method bulkCreateFilmsWithJsonTypeError (line 90) | @Test
method bulkCreateDirectors (line 103) | @Test
method bulkCreateDirectorWithWrongTsidType (line 116) | @Test
method bulkCreateReviewWithDefaultTsidType (line 131) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCountControllerTest.java
class MsSQLCountControllerTest (line 15) | @Order(501)
method employeesCount (line 18) | @Test
method filmsCount (line 29) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCreateControllerTest.java
class MsSQLCreateControllerTest (line 26) | @Order(502)
method createFilm (line 48) | @Test
method createFilmError (line 64) | @Test
method createItemNonExistentTable (line 75) | @Test
method createDirectorWithTSIDEnabled (line 87) | @Test
method createDirectorWithTSIDOff (line 101) | @Test
method createVanityVanWithVarcharTsIdType (line 114) | @Test
method createFilmWithSubsetOfColumns (line 128) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 158) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 188) | @Test
method columnViolatesNotNullConstraint (line 202) | @Test
method deleteRow (line 217) | private boolean deleteRow(int id) {
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCrossJoinControllerTest.java
class MsSQLCrossJoinControllerTest (line 22) | @Order(501)
method crossJoinUsers (line 32) | @Test
method crossJoinTops (line 56) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDateTimeAllTest.java
class MsSQLDateTimeAllTest (line 25) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithIsoDateTimeFormats (line 30) | @ParameterizedTest
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDeleteControllerTest.java
class MsSQLDeleteControllerTest (line 16) | @Order(505)
method deleteSingleRecord (line 19) | @Test
method failedDeleteAllRecordsWithAllowSafeDeleteTrue (line 31) | @Test
method failedDeleteWithInvalidColumnName (line 43) | @Test
method failedDeleteWithForeignKeyConstraintViolation (line 56) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDeleteWithNotAllowedSafeDeleteControllerTest.java
class MsSQLDeleteWithNotAllowedSafeDeleteControllerTest (line 16) | @Order(505)
method deleteAllWithAllowSafeDeleteFalse (line 20) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLExistsControllerTest.java
class MsSQLExistsControllerTest (line 22) | @Order(501)
method existsActorByFirstName (line 29) | @Test
method existsByUnknownName (line 42) | @Test
method existsInnerJoin (line 54) | @Test
method existsInnerJoinWithFilter (line 68) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLFindOneControllerTest.java
class MsSQLFindOneControllerTest (line 17) | @Order(501)
method findOneFilm (line 21) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLFunctionControllerTest.java
class MsSQLFunctionControllerTest (line 20) | @Order(501)
method execute (line 23) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerJoinControllerTest.java
class MsSQLInnerJoinControllerTest (line 22) | @Order(501)
method testInnerJoin (line 29) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerJoinMultiTableControllerTest.java
class MsSQLInnerJoinMultiTableControllerTest (line 22) | @Order(501)
method innerMultiTable (line 29) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerSelfJoinControllerTest.java
class MsSQLInnerSelfJoinControllerTest (line 22) | @Order(501)
method innerSelfJoin (line 29) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLJsonFileCreateControllerTest.java
class MsSQLJsonFileCreateControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 43) | @Test
method uploadActorFileNonJsonArray (line 67) | @Test
method createDirectorViaUpload (line 82) | @Test
method createFilmsViaUpload (line 102) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLProcedureControllerTest.java
class MsSQLProcedureControllerTest (line 19) | @Order(501)
method execute (line 22) | @Test
method executeGetActorByIdProc (line 43) | @Test
method executeGetActorByIdProcWithResultSetKeys (line 64) | @Test
method executeGetActorsAndFilmsProcWithoutResultSetKeys (line 85) | @Test
method executeGetActorsAndFilmsProcWithResultSetKeys (line 100) | @Test
method updateUser (line 115) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLRSqlOperatorReadControllerTest.java
class MsSQLRSqlOperatorReadControllerTest (line 23) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 28) | @Test
method findWithNotEqualsOperator (line 46) | @Test
method findWithGreaterThanOperator (line 64) | @Test
method findWithGreaterThanEqualsOperator (line 81) | @Test
method findWithLessThanOperator (line 99) | @Test
method findWithLessThanEqualsOperator (line 114) | @Test
method findWithInOperator (line 130) | @Test
method findWithNotInOperator (line 146) | @Test
method findWithNotInOperatorExt (line 162) | @Test
method findWithLikeOperator (line 178) | @Test
method findWithStartsWithOperator (line 194) | @Test
method findWithEndsWithOperator (line 209) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 224) | @Test
method findWithNotLikeOperator (line 236) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 256) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 274) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 290) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 306) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 328) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 341) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEualsCombinationalOperator (line 364) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 380) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 393) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 409) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLReadControllerDefaultFetchLimitTest.java
class MsSQLReadControllerDefaultFetchLimitTest (line 17) | @Order(306)
method findAllPersonsWithDefaultFetchLimit5 (line 21) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLReadControllerTest.java
class MsSQLReadControllerTest (line 18) | @Order(501)
method findAllFilmsWithAllColumns (line 21) | @Test
method findAllFilmsWithThreeCols (line 34) | @Test
method findAllFilmsWithColumnAlias (line 50) | @Test
method findAllFilmsWithSorting (line 68) | @Test
method findAllFilmsWithSortingAndPagination (line 87) | @Test
method findAllFilmsWithPagination (line 107) | @Test
method findAllFilmsByFilter (line 126) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLUpdateControllerTest.java
class MsSQLUpdateControllerTest (line 19) | @Order(503)
method updateExistingFilm (line 35) | @Test
method updateNonExistingFilm (line 49) | @Test
method updateNonExistingTable (line 64) | @Test
method updateMultipleColumns (line 77) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/CountTwoTablesSameNameDiffSchemaTest.java
class MySQLCountTwoTablesSameNameDiffSchemaTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method empCount (line 24) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/CreateTwoTablesSameNameDiffSchemaTest.java
class MySQLCreateTwoTablesSameNameDiffSchemaTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 38) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/DeleteTwoTablesSameNameDiffSchemaTest.java
class MySQLDeleteTwoTablesSameNameDiffSchemaTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteFromTableWithSameNameDifferentSchema (line 23) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLBasicJoinControllerTest.java
class MySQLBasicJoinControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testLeftJoin (line 46) | @Disabled
method testRightJoin (line 71) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLBulkCreateControllerTest.java
class MySQLBulkCreateControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 60) | @Test
method createCSV (line 81) | @Test
method createCSVWithError (line 97) | @Test
method createError (line 110) | @Test
method createDirector (line 124) | @Test
method createDirectorWithWrongTsidType (line 137) | @Test
method createReviewWithDefaultTsidType (line 154) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCountControllerTest.java
class MySQLCountControllerTest (line 16) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findFilmCount (line 20) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCreateControllerTest.java
class MySQLCreateControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 55) | @Test
method createError (line 72) | @Test
method createNonExistentTable (line 85) | @Test
method createDirectorWithTSIDEnabled (line 98) | @Test
method createDirectorWithTSIDOff (line 114) | @Test
method createVanityVanWithVarcharTsIdType (line 126) | @Test
method createFilmWithSubsetOfColumns (line 142) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 173) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 205) | @Test
method column_violates_not_null_constraint (line 218) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCrossJoinControllerTest.java
class MySQLCrossJoinControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testCrossJoin (line 43) | @Test
method testCrossJoinTops (line 66) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDateTimeAllTest.java
class MySQLDateTimeAllTest (line 37) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithDateTimeFields (line 47) | @Test
method createActorWithErrorDateTimeField (line 66) | @Test
method updateActorWithDateTimeField (line 84) | @Test
method getActorWithDateTimeFields (line 103) | @Test
method getActorFilterByTimeStamp (line 118) | @Test
method deleteActorByTimeStamp (line 134) | @Test
method createActorWithIsoDateTimeFormats (line 149) | @ParameterizedTest
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDeleteAllTest.java
class MySQLDeleteAllTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteAllWithAllowSafeDeleteFalse (line 25) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDeleteControllerTest.java
class MySQLDeleteControllerTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method delete_single_record (line 23) | @Test
method delete_all_records_with_allow_safe_delete_true (line 35) | @Test
method column_does_not_exist (line 47) | @Test
method foreign_key_constraint_violation (line 60) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLFunctionControllerTest.java
class MySQLFunctionControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 28) | @Test
method updateUser (line 50) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerJoinControllerTest.java
class MySQLInnerJoinControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerJoin (line 40) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerJoinMultiTableControllerTest.java
class MySQLInnerJoinMultiTableControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerMultiTable (line 40) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerSelfJoinControllerTest.java
class MySQLInnerSelfJoinControllerTest (line 26) | @TestWithResources
method testInnerSelfJoin (line 38) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLJsonFileCreateControllerTest.java
class MySQLJsonFileCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 39) | @Test
method uploadActorFileNonJsonArray (line 59) | @Test
method createDirectorViaUpload (line 74) | @Test
method createFilmsViaUpload (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLProcedureControllerTest.java
class MySQLProcedureControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 28) | @Test
method updateUser (line 50) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLRSqlOperatorReadControllerTest.java
class MySQLRSqlOperatorReadControllerTest (line 25) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 30) | @Test
method findWithNotEqualsOperator (line 48) | @Test
method findWithGreaterThanOperator (line 66) | @Test
method findWithGreaterThanEqualsOperator (line 83) | @Test
method findWithLessThanOperator (line 101) | @Test
method findWithLessThanEqualsOperator (line 116) | @Test
method findWithInOperator (line 132) | @Test
method findWithNotInOperator (line 148) | @Test
method findWithNotInOperatorExt (line 164) | @Test
method findWithLikeOperator (line 180) | @Test
method findWithStartsWithOperator (line 195) | @Test
method findWithEndsWithOperator (line 210) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 225) | @Test
method findWithNotLikeOperator (line 237) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 257) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 275) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 291) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 307) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 329) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 342) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEualsCombinationalOperator (line 365) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 381) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 394) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 410) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLReadControllerDefaultFetchLimitTest.java
class MySQLReadControllerDefaultFetchLimitTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllPersonsWithDefaultFetchLimit5 (line 25) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLReadControllerTest.java
class MySQLReadControllerTest (line 22) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 25) | @Test
method findAllFilmsWithThreeCols (line 40) | @Test
method findAllFilmsWithColumnAlias (line 55) | @Test
method findOneFilm (line 73) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLTemplateControllerTest.java
class MySQLTemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 27) | @Test
method findFilmByID (line 39) | @Test
method findFilmByIDWithHeader (line 52) | @Test
method findFilmByIDWithPath (line 65) | @Test
method findFilmByIDWithRequiredConstraint (line 78) | @Test
method selectWithConditionalRenderNoRequestParams (line 87) | @Test
method selectWithConditionalRenderWithID (line 99) | @Test
method selectWithConditionalRenderWithField (line 113) | @Test
method selectWithConditionalRenderJoinWithoutInput (line 131) | @Test
method selectWithConditionalRenderJoin (line 145) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLUpdateControllerTest.java
class MySQLUpdateControllerTest (line 26) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateExistingFilm (line 47) | @Test
method updateNonExistingFilm (line 61) | @Test
method updateNonExistingTable (line 75) | @Test
method updateMultipleColumns (line 88) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/ReadTwoTablesSameNameDiffSchemaTest.java
class MySQLReadTwoTablesSameNameDiffSchemaTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findUsersInTwoSchemas (line 23) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/UpdateTwoTablesSameNameDiffSchemaTest.java
class MySQLUpdateTwoTablesSameNameDiffSchemaTest (line 26) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateEmployee (line 39) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleBasicJoinControllerTest.java
class OracleBasicJoinControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testLeftJoin (line 47) | @Test
method testRightJoin (line 69) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleBulkCreateControllerTest.java
class OracleBulkCreateControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 60) | @Test
method createCSV (line 80) | @Test
method createCSVWithError (line 98) | @Test
method createError (line 113) | @Test
method createDirector (line 128) | @Test
method createDirectorWithWrongTsidType (line 143) | @Test
method createReviewWithDefaultTsidType (line 161) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCountControllerTest.java
class OracleCountControllerTest (line 16) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findFilmCount (line 20) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCreateControllerTest.java
class OracleCreateControllerTest (line 31) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 54) | @Test
method createError (line 72) | @Test
method createNonExistentTable (line 85) | @Test
method createDirectorWithTSIDEnabled (line 98) | @Test
method createDirectorWithTSIDOff (line 114) | @Test
method createVanityVanWithVarcharTsIdType (line 128) | @Test
method createFilmWithSubsetOfColumns (line 144) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 176) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 209) | @Test
method column_violates_not_null_constraint (line 222) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCrossJoinControllerTest.java
class OracleCrossJoinControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testCrossJoin (line 47) | @Test
method testCrossJoinTops (line 71) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDateTimeAllTest.java
class OracleDateTimeAllTest (line 37) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithDateTimeFields (line 47) | @Test
method createActorWithErrorDateTimeField (line 67) | @Test
method updateActorWithDateTimeField (line 86) | @Test
method getActorWithDateTimeFields (line 105) | @Test
method getActorFilterByTimeStamp (line 122) | @Order(3)
method deleteActorByTimeStamp (line 139) | @Order(4)
method createActorWithIsoDateTimeFormats (line 153) | @ParameterizedTest
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDeleteAllTest.java
class OracleDeleteAllTest (line 21) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteAllWithAllowSafeDeleteFalse (line 26) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDeleteControllerTest.java
class OracleDeleteControllerTest (line 22) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method delete_single_record (line 26) | @Test
method delete_all_records_with_allow_safe_delete_true (line 38) | @Test
method column_does_not_exist (line 50) | @Test
method foreign_key_constraint_violation (line 63) | @Disabled
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerJoinControllerTest.java
class OracleInnerJoinControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerJoin (line 43) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerJoinMultiTableControllerTest.java
class OracleInnerJoinMultiTableControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerMultiTable (line 43) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerSelfJoinControllerTest.java
class OracleInnerSelfJoinControllerTest (line 28) | @TestWithResources
method testInnerSelfJoin (line 41) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleJsonFileCreateControllerTest.java
class OracleJsonFileCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 39) | @Test
method uploadActorFileNonJsonArray (line 59) | @Test
method createDirectorViaUpload (line 74) | @Test
method createFilmsViaUpload (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleProcedureControllerTest.java
class OracleProcedureControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 29) | @DisplayName("Execute stored procedure on oracle db")
method executeUpdateUserProc (line 51) | @DisplayName("Execute stored procedure UpdateUserProc on oracle db ")
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleRSqlOperatorReadControllerTest.java
class OracleRSqlOperatorReadControllerTest (line 25) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 30) | @Test
method findWithNotEqualsOperator (line 48) | @Test
method findWithGreaterThanOperator (line 66) | @Test
method findWithGreaterThanEqualsOperator (line 83) | @Test
method findWithLessThanOperator (line 101) | @Test
method findWithLessThanEqualsOperator (line 116) | @Test
method findWithInOperator (line 132) | @Test
method findWithNotInOperator (line 148) | @Test
method findWithNotInOperatorExt (line 164) | @Test
method findWithLikeOperator (line 180) | @Test
method findWithStartsWithOperator (line 195) | @Test
method findWithEndsWithOperator (line 210) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 225) | @Test
method findWithNotLikeOperator (line 238) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 258) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 276) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 292) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 308) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 330) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 343) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEqualsCombinationalOperator (line 366) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 382) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 395) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 411) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleReadControllerDefaultFetchLimitTest.java
class OracleReadControllerDefaultFetchLimitTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllPersonsWithDefaultFetchLimit5 (line 24) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleReadControllerTest.java
class OracleReadControllerTest (line 22) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 25) | @Test
method findAllFilmsWithThreeCols (line 40) | @Test
method findAllFilmsWithColumnAlias (line 55) | @Test
method findOneFilm (line 73) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleTemplateControllerTest.java
class OracleTemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 27) | @Test
method findFilmByID (line 39) | @Test
method findFilmByIDWithHeader (line 52) | @Test
method findFilmByIDWithPath (line 65) | @Test
method findFilmByIDWithRequiredConstraint (line 78) | @Test
method selectWithConditionalRenderNoRequestParams (line 87) | @Test
method selectWithConditionalRenderWithID (line 99) | @Test
method selectWithConditionalRenderWithField (line 113) | @Test
method selectWithConditionalRenderJoinWithoutInput (line 131) | @Test
method selectWithConditionalRenderJoin (line 145) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleUpdateControllerTest.java
class OracleUpdateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateExistingFilm (line 48) | @Test
method updateNonExistingFilm (line 63) | @Test
method updateNonExistingTable (line 78) | @Test
method updateMultipleColumns (line 92) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PGDateTimeAllTest.java
class PGDateTimeAllTest (line 37) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithDateTimeFields (line 47) | @Test
method createActorWithErrorDateTimeField (line 67) | @Test
method updateActorWithDateTimeField (line 85) | @Test
method getActorWithDateTimeFields (line 104) | @Test
method getActorFilterByTimeStamp (line 118) | @Test
method deleteActorByTimeStamp (line 133) | @Test
method createActorWithIsoDateTimeFormats (line 147) | @ParameterizedTest
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgBasicJoinControllerTest.java
class PgBasicJoinControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testLeftJoin (line 45) | @Test
method testRightJoin (line 67) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgBulkCreateControllerTest.java
class PgBulkCreateControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 60) | @Test
method createCSV (line 80) | @Test
method createCSVWithError (line 96) | @Test
method createError (line 109) | @Test
method createDirector (line 123) | @Test
method createDirectorWithIntTsIdType (line 136) | @Test
method createReviewWithDefaultTsIdType (line 149) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCountControllerTest.java
class PgCountControllerTest (line 18) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method countAll (line 23) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCreateControllerTest.java
class PgCreateControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method create (line 54) | @Test
method createError (line 70) | @Test
method createNonExistentTable (line 81) | @Test
method createDirectorWithTSIDEnabled (line 92) | @Test
method createDirectorWithTSIDOff (line 107) | @Test
method createVanityVanWithVarcharTsIdType (line 119) | @Test
method createFilmWithSubsetOfColumns (line 134) | @Test
method shouldIgnoreWhenColumnsQueryParamIsEmpty (line 165) | @Test
method columnIsPresentInColumnsQueryParamButNotInPayload (line 195) | @Test
method column_violates_not_null_constraint (line 208) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCrossJoinControllerTest.java
class PgCrossJoinControllerTest (line 29) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testCrossJoinUsers (line 44) | @Test
method testCrossJoinTops (line 67) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgDeleteAllTest.java
class PgDeleteAllTest (line 21) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteAllWithAllowSafeDeleteFalse (line 26) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgDeleteControllerTest.java
class PgDeleteControllerTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method delete_single_record (line 23) | @Test
method delete_all_records_with_allow_safe_delete_true (line 35) | @Test
method column_does_not_exist (line 47) | @Test
method foreign_key_constraint_violation (line 60) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgExtraFunctionControllerTest.java
class PgExtraFunctionControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 24) | @Test
method execute_table_output (line 48) | @Disabled
method execute_update (line 71) | @Test
method execute_io (line 93) | @Disabled
method execute_multiply_numbers (line 114) | @Disabled
method execute_multiply_numbers_no_default (line 134) | @Test
method execute_fn_out_params (line 156) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgFunctionControllerTest.java
class PgFunctionControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 28) | @Test
method executeUpdateUserFunc (line 50) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerJoinControllerTest.java
class PgInnerJoinControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerJoin (line 40) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerJoinMultiTableControllerTest.java
class PgInnerJoinMultiTableControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testInnerMultiTable (line 40) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerSelfJoinControllerTest.java
class PgInnerSelfJoinControllerTest (line 26) | @TestWithResources
method testInnerSelfJoin (line 38) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgJsonFileCreateControllerTest.java
class PgJsonFileCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method uploadActorsFile (line 39) | @Test
method uploadActorFileNonJsonArray (line 59) | @Test
method createDirectorViaUpload (line 74) | @Test
method createFilmsViaUpload (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgMultiTenancyTest.java
class PgMultiTenancyTest (line 38) | @Order(200)
method createMockMvc (line 52) | protected void createMockMvc(WebApplicationContext webApplicationConte...
method create (line 60) | @Test
method findAllUsers (line 76) | @Test
method countAllUsers (line 93) | @Test
method updateUsers (line 109) | @Test
method deleteAllUsersFromTenant (line 140) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgProcedureControllerTest.java
class PgProcedureControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method execute (line 28) | @Test
method executeUpdateUserProc (line 50) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgRSqlOperatorReadControllerTest.java
class PgRSqlOperatorReadControllerTest (line 24) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findWithEqualsOperator (line 29) | @Test
method findWithNotEqualsOperator (line 47) | @Test
method findWithGreaterThanOperator (line 65) | @Test
method findWithGreaterThanEqualsOperator (line 82) | @Test
method findWithLessThanOperator (line 100) | @Test
method findWithLessThanEqualsOperator (line 115) | @Test
method findWithInOperator (line 131) | @Test
method findWithNotInOperator (line 147) | @Test
method findWithNotInOperatorExt (line 163) | @Test
method findWithLikeOperator (line 179) | @Test
method findWithStartsWithOperator (line 195) | @Test
method findWithEndsWithOperator (line 210) | @Test
method findWithEqualsOperator_givenInvalidColumn_shouldReturn4xx (line 225) | @Test
method findWithNotLikeOperator (line 237) | @Test
method findWithEqualsAndStartWithCombinationalOperator (line 257) | @Test
method findWithEqualsAndLikeCombinationalOperator (line 275) | @Test
method findWithEqualsAndLikeAndInCombinationalOperator (line 291) | @Test
method findWithEqualsOrLikeOrInCombinationalOperator (line 307) | @Test
method findWithEqualsAndLikeAndNotInCombinationalOperator (line 329) | @Test
method findWithEqualsOrLikeOrNotInCombinationalOperator (line 342) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanEualsCombinationalOperator (line 365) | @Test
method findWithEqualsAndLikeAndInAbdGreaterThanCombinationalOperator (line 381) | @Test
method findWithEqualsAndLikeAndInAndLessThanEqualsCombinationalOperator (line 394) | @Test
method findWithEqualsAndLikeAndInAndLessThanCombinationalOperator (line 410) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgReadControllerDefaultFetchLimitTest.java
class PgReadControllerDefaultFetchLimitTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllPersonsWithDefaultFetchLimit5 (line 25) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgReadControllerTest.java
class PgReadControllerTest (line 29) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 47) | @Test
method findAllFilmsWithThreeCols (line 62) | @Test
method findAllFilmsWithColumnAlias (line 77) | @Test
method findOneFilm (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgTemplateControllerTest.java
class PgTemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method findAllFilms (line 27) | @Test
method findFilmByID (line 39) | @Test
method findFilmByIDWithHeader (line 52) | @Test
method findFilmByIDWithPath (line 65) | @Test
method findFilmByIDFromContent (line 78) | @Test
method updateFilmByIDFromContent (line 93) | @Test
method insertAndDeleteCategoryFromContent (line 108) | @Test
method findFilmByIDWithRequiredConstraint (line 133) | @Test
method selectWithConditionalRenderNoRequestParams (line 142) | @Test
method selectWithConditionalRenderWithID (line 154) | @Test
method selectWithConditionalRenderWithField (line 168) | @Test
method selectWithConditionalRenderJoinWithoutInput (line 186) | @Test
method selectWithConditionalRenderJoin (line 200) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgUpdateControllerTest.java
class PgUpdateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateExistingFilm (line 48) | @Test
method updateNonExistingFilm (line 64) | @Test
method updateNonExistingTable (line 80) | @Test
method updateMultipleColumns (line 94) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteBulkCreateControllerTest.java
class SQLiteBulkCreateControllerTest (line 29) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method bulkCreateActors (line 44) | @Test
method bulkCreateDirectorsWithTSID (line 68) | @Test
method bulkCreateWithSubsetOfColumns (line 94) | @Test
method bulkCreateWithInvalidPayload (line 124) | @Test
method bulkCreateEmptyList (line 141) | @Test
method bulkCreateToNonExistentTable (line 155) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteCountControllerTest.java
class SQLiteCountControllerTest (line 19) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method countAllFilms (line 23) | @Test
method countAllActors (line 35) | @Test
method countAllEmployees (line 47) | @Test
method countFilmsWithFilter (line 59) | @Test
method countActorsWithFilter (line 72) | @Test
method countEmployeesWithBooleanFilter (line 85) | @Test
method countWithMultipleFilters (line 98) | @Test
method countWithNonExistentFilter (line 111) | @Test
method countFromNonExistentTable (line 124) | @Test
method countWithInvalidFilter (line 135) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteCreateControllerTest.java
class SQLiteCreateControllerTest (line 30) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createFilm (line 51) | @Test
method createFilmWithSubsetOfColumns (line 77) | @Test
method createFilmInvalidPayload (line 92) | @Test
method createVanityVanWithTSID (line 105) | @Test
method createDirectorWithTSID (line 119) | @Test
method createActor (line 133) | @Test
method createEmployee (line 152) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteCrossJoinControllerTest.java
class SQLiteCrossJoinControllerTest (line 28) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method crossJoinTopsWithBottoms (line 40) | @DisplayName("Cross join tops with bottoms")
method crossJoinUsersWithUserProfile (line 56) | @DisplayName("Cross join users with userprofile")
method crossJoinWithFilter (line 72) | @DisplayName("Cross join with filter")
method crossJoinWithSorting (line 88) | @DisplayName("Cross join with sorting")
method crossJoinWithPagination (line 105) | @DisplayName("Cross join with pagination")
method crossJoinWithColorMatching (line 121) | @DisplayName("Cross join with color matching")
method crossJoinWithSizeFilter (line 149) | @DisplayName("Cross join with size filter")
method crossJoinWithNonExistentTable (line 174) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteDateTimeAllTest.java
class SQLiteDateTimeAllTest (line 29) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorWithTimestamp (line 36) | @Test
method readActorWithTimestamp (line 59) | @Test
method updateActorWithTimestamp (line 74) | @Test
method createEmployeeWithCreateDate (line 106) | @Test
method filterByDatetime (line 130) | @Test
method sortByDatetime (line 163) | @Test
method createFilmWithReleaseYear (line 178) | @DisplayName("Create film with release_year")
method filterByYearRange (line 212) | @Test
method bulkCreateWithTimestamps (line 226) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteDeleteControllerTest.java
class SQLiteDeleteControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method deleteFilmById (line 24) | @Test
method deleteActorById (line 45) | @Test
method deleteWithFilter (line 67) | @Test
method deleteNonExistentRecord (line 89) | @Test
method deleteFromNonExistentTable (line 102) | @Test
method deleteWithInvalidFilter (line 114) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteInnerJoinControllerTest.java
class SQLiteInnerJoinControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method innerJoinFilmWithActor (line 35) | @Test
method innerJoinFilmWithCategory (line 69) | @Test
method innerJoinWithFilter (line 103) | @Test
method innerJoinWithSorting (line 137) | @Test
method innerJoinWithPagination (line 171) | @Test
method innerJoinWithLanguage (line 204) | @Test
method innerJoinWithMultipleTables (line 232) | @Test
method innerJoinWithNonExistentTable (line 267) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteJsonFileCreateControllerTest.java
class SQLiteJsonFileCreateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method createActorsFromJsonFile (line 31) | @Test
method createDirectorsFromJsonFile (line 60) | @Test
method createWithCsvFile (line 89) | @DisplayName("Create with CSV file")
method uploadInvalidJsonFile (line 115) | @Test
method uploadEmptyFile (line 133) | @Test
method uploadFileWithInvalidContentType (line 151) | @Test
method uploadToNonExistentTable (line 169) | @Test
method uploadFileWithConstraintViolation (line 187) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteRSqlOperatorReadControllerTest.java
class SQLiteRSqlOperatorReadControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method testEqualOperator (line 24) | @Test
method testNotEqualOperator (line 39) | @Test
method testGreaterThanOperator (line 53) | @Test
method testLessThanOperator (line 67) | @Test
method testGreaterThanOrEqualOperator (line 81) | @Test
method testLessThanOrEqualOperator (line 95) | @Test
method testInOperator (line 109) | @Test
method testNotInOperator (line 123) | @Test
method testNotInOperatorExt (line 137) | @Test
method testLikeOperator (line 151) | @Test
method testAndOperator (line 166) | @Test
method testOrOperator (line 180) | @Test
method testComplexQueryWithParentheses (line 194) | @Test
method testBooleanFieldQuery (line 208) | @Test
method testStringFieldWithWildcards (line 222) | @Test
method testNullValueQuery (line 237) | @Test
method testInvalidSyntax (line 251) | @Test
method testNonExistentField (line 263) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteReadControllerTest.java
class SQLiteReadControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method getAllFilms (line 24) | @Test
method getFilmById (line 39) | @DisplayName("Get film by ID")
method getFilmsWithFieldSelection (line 52) | @Test
method getFilmsWithPagination (line 69) | @Test
method getFilmsWithSorting (line 85) | @Test
method getFilmsWithFilter (line 100) | @Test
method getAllActors (line 115) | @Test
method getActorById (line 130) | @DisplayName("Get actor by ID")
method getAllEmployees (line 143) | @Test
method getEmployeesWithBooleanFilter (line 157) | @Test
method getNonExistentTable (line 171) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteTemplateControllerTest.java
class SQLiteTemplateControllerTest (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method executeSelectAllTemplate (line 25) | @DisplayName("Execute SQL template - select all")
method executeSelectByIdTemplate (line 38) | @DisplayName("Execute SQL template - select by id")
method executeConditionalRenderAndOpTemplate (line 53) | @DisplayName("Execute SQL template - conditional render with AND opera...
method executeConditionalRenderWithTitleFilter (line 69) | @DisplayName("Execute SQL template - conditional render with title fil...
method executeConditionalRenderJoinTemplate (line 83) | @DisplayName("Execute SQL template - conditional render with join")
method executeConditionalRenderMultipleFilters (line 97) | @DisplayName("Execute SQL template - conditional render with multiple ...
method executeTemplateWithoutParameters (line 113) | @DisplayName("Execute SQL template - no parameters")
method executeTemplateWithHeaderParameters (line 125) | @DisplayName("Execute SQL template - with header parameters")
method executeNonExistentTemplate (line 140) | @DisplayName("Execute non-existent template")
method executeTemplateWithInvalidSyntax (line 150) | @Test
FILE: db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/sqlite/SQLiteUpdateControllerTest.java
class SQLiteUpdateControllerTest (line 27) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
method updateFilm (line 45) | @Test
method updateActor (line 68) | @Test
method updateEmployee (line 90) | @Test
method updateWithSubsetOfColumns (line 113) | @Test
method updateWithFilter (line 141) | @Test
method updateNonExistentRecord (line 169) | @Test
method updateWithInvalidPayload (line 183) | @Test
FILE: db2rest-api/api-rest/src/test/resources/db2/db2-sakila.sql
type tops (line 4) | CREATE TABLE tops (
type bottoms (line 13) | CREATE TABLE bottoms (
type users (line 22) | CREATE TABLE users (
type userprofile (line 34) | CREATE TABLE userprofile (
type actor (line 47) | CREATE TABLE actor (
type idx_actor_last_name (line 55) | CREATE INDEX idx_actor_last_name ON actor(last_name)
type country (line 64) | CREATE TABLE country (
FILE: db2rest-api/api-rest/src/test/resources/mariadb/mariadb-sakila.sql
type tops (line 28) | CREATE TABLE tops (
type bottoms (line 38) | CREATE TABLE bottoms (
type users (line 50) | CREATE TABLE users (
type userprofile (line 62) | CREATE TABLE userprofile (
type actor (line 76) | CREATE TABLE actor (
type director (line 90) | CREATE TABLE director (
type vanity_van (line 104) | CREATE TABLE vanity_van (
type review (line 116) | CREATE TABLE review (
type category (line 129) | CREATE TABLE category (
type film (line 140) | CREATE TABLE film (
type film_actor (line 168) | CREATE TABLE film_actor (
type film_category (line 182) | CREATE TABLE film_category (
type language (line 196) | CREATE TABLE language (
type country (line 207) | CREATE TABLE country (
type person (line 218) | CREATE TABLE person (
function GetMovieRentalRateFunc (line 245) | CREATE FUNCTION GetMovieRentalRateFunc(movieTitle varchar(100))
function UpdateUserFunc (line 255) | CREATE FUNCTION UpdateUserFunc(user_id INT)
type user (line 268) | CREATE TABLE user (
FILE: db2rest-api/api-rest/src/test/resources/mssql/mssql-sakila.sql
type employee (line 1) | CREATE TABLE employee
type tops (line 10) | CREATE TABLE tops
type bottoms (line 17) | CREATE TABLE bottoms
type users (line 24) | CREATE TABLE users
type userprofile (line 33) | CREATE TABLE userprofile
type user_test (line 42) | CREATE TABLE user_test
type actor (line 53) | CREATE TABLE actor
type director (line 62) | CREATE TABLE director
type vanity_van (line 71) | CREATE TABLE vanity_van
type category (line 79) | CREATE TABLE category
type language (line 86) | CREATE TABLE language
type film (line 93) | CREATE TABLE film
type review (line 118) | CREATE TABLE review
type film_actor (line 127) | CREATE TABLE film_actor
type film_category (line 137) | CREATE TABLE film_category
type country (line 149) | CREATE TABLE country
type person (line 156) | CREATE TABLE person
function GetMovieRentalRateFunc (line 164) | CREATE FUNCTION GetMovieRentalRateFunc(@movieTitle VARCHAR(100))
FILE: db2rest-api/api-rest/src/test/resources/mysql/mysql-sakila.sql
type employee (line 29) | CREATE TABLE employee (
type department (line 43) | CREATE TABLE department (
type tops (line 57) | CREATE TABLE tops (
type bottoms (line 67) | CREATE TABLE bottoms (
type users (line 79) | CREATE TABLE users (
type userprofile (line 91) | CREATE TABLE userprofile (
type actor (line 105) | CREATE TABLE actor (
type director (line 119) | CREATE TABLE director (
type vanity_van (line 133) | CREATE TABLE vanity_van (
type review (line 145) | CREATE TABLE review (
type category (line 158) | CREATE TABLE category (
type film (line 169) | CREATE TABLE film (
type film_actor (line 197) | CREATE TABLE film_actor (
type film_category (line 211) | CREATE TABLE film_category (
type language (line 225) | CREATE TABLE language (
type country (line 236) | CREATE TABLE country (
type person (line 247) | CREATE TABLE person (
function GetMovieRentalRateFunc (line 273) | CREATE FUNCTION GetMovieRentalRateFunc(movieTitle varchar(100))
function UpdateUserFunc (line 283) | CREATE FUNCTION UpdateUserFunc(user_id INT)
type user (line 296) | CREATE TABLE user (
FILE: db2rest-api/api-rest/src/test/resources/mysql/mysql-wakila-all.sql
type users (line 15) | CREATE TABLE users (
type userprofile (line 27) | CREATE TABLE userprofile (
type employee (line 86) | CREATE TABLE employee (
type department (line 104) | CREATE TABLE department (
FILE: db2rest-api/api-rest/src/test/resources/oracle/oracle-sakila.sql
type tops (line 6) | CREATE TABLE tops (
type bottoms (line 15) | CREATE TABLE bottoms (
type users (line 29) | CREATE TABLE users (
type userprofile (line 39) | CREATE TABLE userprofile (
type actor (line 54) | CREATE TABLE actor (
type idx_actor_last_name (line 62) | CREATE INDEX idx_actor_last_name ON actor(last_name)
type country (line 96) | CREATE TABLE country (
type person (line 112) | CREATE TABLE person (
type city (line 143) | CREATE TABLE city (
type idx_fk_country_id (line 152) | CREATE INDEX idx_fk_country_id ON city(country_id)
FILE: db2rest-api/api-rest/src/test/resources/pg/pg-sakila-functions.sql
type employees (line 1) | CREATE TABLE employees (
function add_numbers (line 14) | CREATE OR REPLACE FUNCTION add_numbers(a INT, b INT)
function get_employee_details (line 24) | CREATE OR REPLACE FUNCTION get_employee_details(dept_id INT)
function multiply_numbers (line 54) | CREATE OR REPLACE FUNCTION multiply_numbers(a INT, b INT DEFAULT 10)
function sum_variadic (line 100) | CREATE OR REPLACE FUNCTION sum_variadic(VARIADIC numbers INT[])
function get_employees_cursor (line 130) | CREATE OR REPLACE FUNCTION get_employees_cursor()
FILE: db2rest-api/api-rest/src/test/resources/pg/postgres-sakila.sql
type actor (line 62) | CREATE TABLE actor (
type director (line 77) | CREATE TABLE director (
type vanity_van (line 95) | CREATE TABLE vanity_van (
type review (line 118) | CREATE TABLE review (
type category (line 158) | CREATE TABLE category (
type film (line 184) | CREATE TABLE film (
type film_actor (line 209) | CREATE TABLE film_actor (
type users (line 223) | CREATE TABLE users (
type student (line 232) | CREATE TABLE student (
type userprofile (line 250) | CREATE TABLE userprofile (
type tops (line 266) | CREATE TABLE tops (
type bottoms (line 278) | CREATE TABLE bottoms (
type film_category (line 290) | CREATE TABLE film_category (
type language (line 316) | CREATE TABLE language (
type country (line 329) | CREATE TABLE country (
type person (line 340) | CREATE TABLE person (
type film_fulltext_idx (line 406) | CREATE INDEX film_fulltext_idx ON film USING gist (fulltext)
type idx_actor_last_name (line 413) | CREATE INDEX idx_actor_last_name ON actor USING btree (last_name)
type idx_fk_film_id (line 419) | CREATE INDEX idx_fk_film_id ON film_actor USING btree (film_id)
type idx_fk_language_id (line 425) | CREATE INDEX idx_fk_language_id ON film USING btree (language_id)
type idx_fk_original_language_id (line 432) | CREATE INDEX idx_fk_original_language_id ON film USING btree (original_l...
type idx_title (line 438) | CREATE INDEX idx_title ON film USING btree (title)
function GetMovieRentalRateFunc (line 556) | CREATE OR REPLACE FUNCTION GetMovieRentalRateFunc(movieTitle varchar)
function UpdateUserFunc (line 578) | CREATE OR REPLACE FUNCTION UpdateUserFunc(user_id int)
FILE: db2rest-api/api-rest/src/test/resources/sqlite/sqlite-sakila.sql
type employee (line 10) | CREATE TABLE employee (
type department (line 21) | CREATE TABLE department (
type tops (line 31) | CREATE TABLE tops (
type bottoms (line 40) | CREATE TABLE bottoms (
type users (line 49) | CREATE TABLE users (
type userprofile (line 60) | CREATE TABLE userprofile (
type actor (line 72) | CREATE TABLE actor (
type idx_actor_last_name (line 79) | CREATE INDEX idx_actor_last_name ON actor(last_name)
type director (line 84) | CREATE TABLE director (
type idx_director_last_name (line 91) | CREATE INDEX idx_director_last_name ON director(last_name)
type vanity_van (line 96) | CREATE TABLE vanity_van (
type idx_vanity_van_name (line 102) | CREATE INDEX idx_vanity_van_name ON vanity_van(name)
type review (line 107) | CREATE TABLE review (
type category (line 118) | CREATE TABLE category (
type language (line 127) | CREATE TABLE language (
type film (line 136) | CREATE TABLE film (
type idx_title (line 155) | CREATE INDEX idx_title ON film(title)
type idx_fk_language_id (line 156) | CREATE INDEX idx_fk_language_id ON film(language_id)
type idx_fk_original_language_id (line 157) | CREATE INDEX idx_fk_original_language_id ON film(original_language_id)
type film_actor (line 162) | CREATE TABLE film_actor (
type idx_fk_film_id (line 171) | CREATE INDEX idx_fk_film_id ON film_actor(film_id)
type film_category (line 176) | CREATE TABLE film_category (
type country (line 188) | CREATE TABLE country (
type person (line 197) | CREATE TABLE person (
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/CSVDataProcessor.java
class CSVDataProcessor (line 21) | @Component
method getData (line 27) | @Override
method handle (line 48) | @Override
method transform (line 54) | private Map<String, Object> transform(Map<String, String> data) {
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/DataProcessor.java
type DataProcessor (line 7) | public interface DataProcessor {
method handle (line 9) | boolean handle(String contentType);
method getData (line 11) | List<Map<String, Object>> getData(InputStream inputStream) throws Exce...
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/FileStreamObserver.java
type FileStreamObserver (line 6) | public interface FileStreamObserver {
method update (line 7) | void update(List<Map<String, Object>> data);
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/FileSubject.java
type FileSubject (line 5) | public interface FileSubject {
method register (line 6) | void register(FileStreamObserver observer);
method startStreaming (line 8) | void startStreaming(InputStream inputStream);
method unregister (line 10) | void unregister();
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/JSONDataProcessor.java
class JSONDataProcessor (line 13) | @Component
method getData (line 19) | @Override
method handle (line 24) | @Override
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/bulk/JsonFileDataProcessor.java
class JsonFileDataProcessor (line 21) | @Component
method register (line 31) | @Override
method unregister (line 36) | @Override
method startStreaming (line 51) | @Override
method getData (line 67) | private List<Map<String, Object>> getData() throws IOException {
method notifyObserver (line 82) | private void notifyObserver(List<Map<String, Object>> dataChunk) {
method initializeParser (line 90) | private void initializeParser(InputStream inputStream) throws IOExcept...
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/CorsConfigProperties.java
class CorsConfigProperties (line 9) | @Configuration
class CorsMapping (line 17) | @Data
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/DateTimeConfigProperties.java
class DateTimeConfigProperties (line 5) | @Data
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/DateTimeConfiguration.java
class DateTimeConfiguration (line 16) | @Configuration
method jsonCustomizer (line 20) | @Bean
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/Db2RestConfigProperties.java
class Db2RestConfigProperties (line 15) | @Getter
method isAllSchema (line 34) | public boolean isAllSchema() {
method checkDeleteAllowed (line 44) | public void checkDeleteAllowed(String filter) {
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/MultiTenancy.java
class MultiTenancy (line 11) | @NoArgsConstructor(access = AccessLevel.PRIVATE)
method joinFilters (line 15) | public static String joinFilters(String filter, String dbId, String ta...
method addTenantColumns (line 30) | public static void addTenantColumns(List<Map<String, Object>> data, St...
method addTenantColumns (line 36) | public static void addTenantColumns(Map<String, Object> data, String d...
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/config/OpenAPIConfiguration.java
class OpenAPIConfiguration (line 8) | @OpenAPIDefinition(
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/exception/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 18) | @RestControllerAdvice
method handleDeleteOpNotAllowedException (line 21) | @ExceptionHandler(DeleteOpNotAllowedException.class)
method handleAuthenticationFailedException (line 33) | @ExceptionHandler(AuthenticationFailedException.class)
method handleTemplateException (line 44) | @ExceptionHandler({SqlTemplateNotFoundException.class})
method handleTemplateException (line 55) | @ExceptionHandler({SqlTemplateReadException.class})
method handleTemplateException (line 66) | @ExceptionHandler({PathVariableNamesMissingException.class})
method handleTemplateException (line 77) | @ExceptionHandler({PathVariableValuesMissingException.class})
method handleCustomPlaceholderException (line 88) | @ExceptionHandler({PlaceholderConstraintException.class})
method handleUnsupportedConstraintException (line 98) | @ExceptionHandler({UnsupportedConstraintException.class})
method handleRpcException (line 108) | @ExceptionHandler(RpcException.class)
method handleInvalidTableException (line 119) | @ExceptionHandler(InvalidTableException.class)
method handleInvalidOperatorException (line 131) | @ExceptionHandler(InvalidOperatorException.class)
method handleGenericDataAccessException (line 142) | @ExceptionHandler({GenericDataAccessException.class, RuntimeException....
method handleInvalidColumnException (line 153) | @ExceptionHandler(InvalidColumnException.class)
method handleMethodArgumentNotValid (line 166) | @Override
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/multidb/DatabaseConnectionDetail.java
method isMongo (line 14) | public boolean isMongo() {
method isJdbcPresent (line 18) | public boolean isJdbcPresent() {
method includeAllSchemas (line 22) | public boolean includeAllSchemas() {
FILE: db2rest-api/rest-common/src/main/java/com/homihq/db2rest/multidb/DatabaseProperties.java
class DatabaseProperties (line 13) | @Data
method getDatabase (line 22) | public Optional<DatabaseConnectionDetail> getDatabase(String dbId) {
method isRdbmsConfigured (line 28) | public boolean isRdbmsConfigured() {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/AuthConfiguration.java
class AuthConfiguration (line 34) | @Slf4j
method authAntPathMatcher (line 40) | @Bean("authAntPathMatcher")
method authFilter (line 45) | @Bean
method apiKeyAuthProvider (line 55) | @Bean
method basicAuthProvider (line 61) | @Bean
method jwtAuthProvider (line 67) | @Bean
method jwtProcessor (line 76) | @Bean
method authDataProvider (line 99) | @Bean
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/AuthFilter.java
class AuthFilter (line 21) | @RequiredArgsConstructor
method doFilterInternal (line 29) | @Override
method addError (line 73) | private void addError(
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/data/AuthData.java
method excludedResources (line 13) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/data/UserDetail.java
method getRoles (line 8) | public String[] getRoles() {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/datalookup/ApiAuthDataLookup.java
class ApiAuthDataLookup (line 12) | @Slf4j
method ApiAuthDataLookup (line 17) | public ApiAuthDataLookup(String apiEndPoint, String apiKey) {
method getApiResourceRoles (line 32) | @Override
method getApiKeys (line 37) | @Override
method getUsers (line 42) | @Override
method getExcludedResources (line 47) | @Override
method getUserByUsername (line 52) | @Override
method getRoleDataFilters (line 57) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/datalookup/AuthDataLookup.java
type AuthDataLookup (line 8) | public interface AuthDataLookup {
method getApiResourceRoles (line 10) | List<ResourceRole> getApiResourceRoles();
method getUsers (line 12) | List<User> getUsers();
method getExcludedResources (line 14) | List<ApiExcludedResource> getExcludedResources();
method getApiKeys (line 16) | List<ApiKey> getApiKeys();
method getUserByUsername (line 18) | Optional<User> getUserByUsername(String username);
method getRoleDataFilters (line 20) | List<RoleDataFilter> getRoleDataFilters(String role);
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/datalookup/AuthDataProperties.java
class AuthDataProperties (line 11) | @Configuration
method isFileProvider (line 25) | public boolean isFileProvider() {
method isApiDataProvider (line 29) | public boolean isApiDataProvider() {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/datalookup/FileAuthDataLookup.java
class FileAuthDataLookup (line 14) | @Slf4j
method FileAuthDataLookup (line 19) | public FileAuthDataLookup(String authFileFullPath) {
method getApiResourceRoles (line 35) | @Override
method getApiKeys (line 40) | @Override
method getUsers (line 45) | @Override
method getExcludedResources (line 50) | @Override
method getUserByUsername (line 55) | @Override
method getRoleDataFilters (line 61) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/datalookup/NoAuthdataLookup.java
class NoAuthdataLookup (line 9) | public class NoAuthdataLookup implements AuthDataLookup {
method getApiResourceRoles (line 10) | @Override
method getExcludedResources (line 15) | @Override
method getApiKeys (line 20) | @Override
method getUserByUsername (line 25) | @Override
method getRoleDataFilters (line 30) | @Override
method getUsers (line 35) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/exception/AuthException.java
class AuthException (line 5) | public class AuthException extends NestedRuntimeException {
method AuthException (line 6) | public AuthException(String msg) {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/provider/AbstractAuthProvider.java
class AbstractAuthProvider (line 19) | @RequiredArgsConstructor
method canHandle (line 29) | public abstract boolean canHandle(HttpServletRequest request);
method authenticate (line 31) | public abstract UserDetail authenticate(HttpServletRequest request);
method authorize (line 33) | public abstract boolean authorize(UserDetail userDetail, String resour...
method isExcluded (line 35) | public abstract boolean isExcluded(String requestUri, String method);
method isExcludedInternal (line 37) | protected boolean isExcludedInternal(
method getAuthHeader (line 64) | protected String getAuthHeader(HttpServletRequest request) {
method authorizeInternal (line 68) | protected boolean authorizeInternal(
method getRoleBasedDataFilters (line 103) | public List<RoleDataFilter> getRoleBasedDataFilters(UserDetail userDet...
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/provider/apikey/ApiKeyAuthProvider.java
class ApiKeyAuthProvider (line 11) | public class ApiKeyAuthProvider extends AbstractAuthProvider {
method ApiKeyAuthProvider (line 14) | public ApiKeyAuthProvider(AuthDataLookup authDataLookup, AntPathMatche...
method canHandle (line 18) | @Override
method authenticate (line 24) | @Override
method authorize (line 36) | @Override
method isExcluded (line 41) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/provider/basic/BasicAuthProvider.java
class BasicAuthProvider (line 17) | @Slf4j
method BasicAuthProvider (line 21) | public BasicAuthProvider(AuthDataLookup authDataLookup, AntPathMatcher...
method canHandle (line 25) | @Override
method authenticate (line 31) | @Override
method authorize (line 57) | @Override
method isExcluded (line 63) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/provider/jwt/JwtAuthProvider.java
class JwtAuthProvider (line 19) | @Slf4j
method JwtAuthProvider (line 24) | public JwtAuthProvider(AuthDataLookup authDataLookup, AntPathMatcher a...
method canHandle (line 30) | @Override
method authenticate (line 36) | @Override
method authorize (line 51) | @Override
method isExcluded (line 56) | @Override
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/provider/jwt/JwtProperties.java
class JwtProperties (line 15) | @Configuration
method isKeyOrJwksUrlPresent (line 27) | @AssertTrue(message = "Key or jwksUrl must be present!")
method setAlgorithm (line 32) | public void setAlgorithm(String algorithm) {
method setKey (line 36) | public void setKey(String secret) {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/unkey/UnKeyAuthConfiguration.java
class UnKeyAuthConfiguration (line 11) | @ConditionalOnProperty(prefix = "db2rest.auth", name = "type", havingVal...
method unKeyAuthService (line 15) | @Bean
method unKeyAuthFilter (line 20) | @Bean
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/unkey/UnKeyAuthFilter.java
class UnKeyAuthFilter (line 21) | @RequiredArgsConstructor
method doFilterInternal (line 29) | @Override
method addAuthenticationError (line 61) | private void addAuthenticationError(HttpServletRequest request, HttpSe...
method addMissingApiKeyError (line 78) | private void addMissingApiKeyError(HttpServletRequest request, HttpSer...
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/unkey/service/UnKeyAuthService.java
class UnKeyAuthService (line 18) | @Slf4j
method verify (line 30) | public Optional<UnKeyVerifyResponse> verify(String apiKey) {
FILE: db2rest-auth/src/main/java/com/homihq/db2rest/auth/unkey/to/UnKeyVerifyResponse.java
method isValidKey (line 15) | public boolean isValidKey() {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/AuthenticationFailedException.java
class AuthenticationFailedException (line 3) | public class AuthenticationFailedException extends RuntimeException {
method AuthenticationFailedException (line 5) | public AuthenticationFailedException(String message) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/DeleteOpNotAllowedException.java
class DeleteOpNotAllowedException (line 3) | public class DeleteOpNotAllowedException extends RuntimeException {
method DeleteOpNotAllowedException (line 6) | public DeleteOpNotAllowedException(boolean safe) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/GenericDataAccessException.java
class GenericDataAccessException (line 3) | public class GenericDataAccessException extends RuntimeException {
method GenericDataAccessException (line 5) | public GenericDataAccessException(String msg) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/InvalidColumnException.java
class InvalidColumnException (line 3) | public class InvalidColumnException extends RuntimeException {
method InvalidColumnException (line 5) | public InvalidColumnException(String tableName, String columnName) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/InvalidOperatorException.java
class InvalidOperatorException (line 3) | public class InvalidOperatorException extends RuntimeException {
method InvalidOperatorException (line 6) | public InvalidOperatorException(String message, String operator) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/InvalidTableException.java
class InvalidTableException (line 3) | public class InvalidTableException extends RuntimeException {
method InvalidTableException (line 6) | public InvalidTableException(String tableName) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/PathVariableNamesMissingException.java
class PathVariableNamesMissingException (line 3) | public class PathVariableNamesMissingException extends RuntimeException {
method PathVariableNamesMissingException (line 5) | public PathVariableNamesMissingException() {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/PathVariableValuesMissingException.java
class PathVariableValuesMissingException (line 3) | public class PathVariableValuesMissingException extends RuntimeException {
method PathVariableValuesMissingException (line 4) | public PathVariableValuesMissingException() {
method PathVariableValuesMissingException (line 8) | public PathVariableValuesMissingException(String key) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/PlaceholderConstraintException.java
class PlaceholderConstraintException (line 3) | public class PlaceholderConstraintException extends RuntimeException {
method PlaceholderConstraintException (line 5) | public PlaceholderConstraintException(String namedParam, String msg) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/RpcException.java
class RpcException (line 5) | public class RpcException extends RuntimeException {
method RpcException (line 7) | public RpcException(String subRoutineName, Map<String, Object> inParam...
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/SqlTemplateNotFoundException.java
class SqlTemplateNotFoundException (line 3) | public class SqlTemplateNotFoundException extends RuntimeException {
method SqlTemplateNotFoundException (line 5) | public SqlTemplateNotFoundException(String templateName) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/SqlTemplateReadException.java
class SqlTemplateReadException (line 3) | public class SqlTemplateReadException extends RuntimeException {
method SqlTemplateReadException (line 5) | public SqlTemplateReadException(String templateName) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/core/exception/UnsupportedConstraintException.java
class UnsupportedConstraintException (line 3) | public class UnsupportedConstraintException extends RuntimeException {
method UnsupportedConstraintException (line 4) | public UnsupportedConstraintException(String constraint) {
FILE: db2rest-core/db2rest-common/src/main/java/com/homihq/db2rest/multidb/DatabaseContextHolder.java
class DatabaseContextHolder (line 3) | public abstract class DatabaseContextHolder {
method getCurrentDbId (line 8) | public static String getCurrentDbId() {
method setCurrentDbId (line 12) | public static void setCurrentDbId(String tenant) {
method clear (line 16) | public static void clear() {
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/Dialect.java
class Dialect (line 15) | public abstract class Dialect {
method Dialect (line 19) | protected Dialect(ObjectMapper objectMapper, String coverChar) {
method isSupportedDb (line 24) | public abstract boolean isSupportedDb(String productName, int majorVer...
method processTypes (line 26) | public abstract void processTypes(DbTable table, List<String> insertab...
method renderTableName (line 28) | public abstract String renderTableName(DbTable table, boolean contains...
method renderTableNameWithoutAlias (line 30) | public abstract String renderTableNameWithoutAlias(DbTable table);
method getObjectMapper (line 32) | protected ObjectMapper getObjectMapper() {
method getCoverChar (line 36) | protected String getCoverChar() {
method supportBatchReturnKeys (line 40) | public boolean supportBatchReturnKeys() {
method supportAlias (line 44) | public boolean supportAlias() {
method getMajorVersion (line 48) | public int getMajorVersion() {
method getAliasedName (line 52) | public String getAliasedName(DbColumn dbColumn, boolean deleteOp) {
method getAliasedNameParam (line 56) | public String getAliasedNameParam(DbColumn dbColumn, boolean deleteOp) {
method parseListValues (line 60) | public List<Object> parseListValues(List<String> values, Class type, S...
method processValue (line 68) | @Deprecated
method convertToStringArray (line 98) | public List<String> convertToStringArray(Object object) {
method convertJsonToVO (line 102) | public Object convertJsonToVO(Object object) {
method getCountSqlTemplate (line 106) | public String getCountSqlTemplate() {
method getDeleteSqlTemplate (line 110) | public String getDeleteSqlTemplate() {
method getExistSqlTemplate (line 114) | public String getExistSqlTemplate() {
method getFindOneSqlTemplate (line 118) | public String getFindOneSqlTemplate() {
method getInsertSqlTemplate (line 122) | public String getInsertSqlTemplate() {
method getReadSqlTemplate (line 126) | public String getReadSqlTemplate() {
method getUpdateSqlTemplate (line 130) | public String getUpdateSqlTemplate() {
method convertTimestamp (line 134) | public Object convertTimestamp(String value){
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/Database.java
type Database (line 6) | @RequiredArgsConstructor
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/DbColumn.java
method getQuotedName (line 21) | @Deprecated
method getQuotedAlias (line 30) | @Deprecated
method render (line 35) | @Deprecated
method renderWithAlias (line 40) | @Deprecated
method getAliasedName (line 54) | @Deprecated
method getAliasedNameParam (line 59) | @Deprecated
method isDateTimeFamily (line 64) | @Deprecated
method isIntFamily (line 70) | @Deprecated
method isStringFamily (line 76) | @Deprecated
method copyWithAlias (line 82) | public DbColumn copyWithAlias(DbAlias columnAlias) {
method copyWithTableAlias (line 91) | public DbColumn copyWithTableAlias(String tableAlias) {
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/DbJoin.java
class DbJoin (line 10) | @Data
method render (line 24) | public String render() {
method addOn (line 49) | public void addOn(DbColumn leftColumn, String operator, DbColumn right...
method addAndCondition (line 55) | public void addAndCondition(DbColumn leftColumn, String operator, DbCo...
method addAdditionalWhere (line 64) | public void addAdditionalWhere(String where) {
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/DbSort.java
method render (line 5) | public String render() {
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/DbTable.java
method render (line 14) | public String render() {
method copyWithAlias (line 18) | public DbTable copyWithAlias(String tableAlias) {
method buildColumn (line 27) | public DbColumn buildColumn(String columnName) {
method getDbColumn (line 32) | private DbColumn getDbColumn(DbAlias dbAlias) {
method getAlias (line 40) | private DbAlias getAlias(String name) {
method buildColumns (line 78) | public List<DbColumn> buildColumns() {
method buildPkColumns (line 82) | public List<DbColumn> buildPkColumns() {
method getKeyColumnNames (line 89) | public String[] getKeyColumnNames() {
method getColumnDataTypeName (line 96) | public String getColumnDataTypeName(String columnName) {
method lookupColumn (line 100) | private DbColumn lookupColumn(String columnName) {
FILE: db2rest-core/rdbms-common/src/main/java/com/db2rest/jdbc/dialect/model/DbWhere.java
method isDelete (line 17) | public boolean isDelete() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/JdbcManager.java
class JdbcManager (line 31) | @Slf4j
method reload (line 46) | @PostConstruct
method getDbMetaByDbId (line 53) | public DbMeta getDbMetaByDbId(String dbId) {
method getDbMetaMap (line 61) | public Map<String, DbMeta> getDbMetaMap() {
method getTables (line 69) | public List<DbTable> getTables() {
method loadAllMetaData (line 74) | public void loadAllMetaData() {
method loadMetaData (line 111) | private void loadMetaData(String dbId, DataSource ds, DatabaseConnecti...
method getTable (line 150) | public DbTable getTable(String dbId, String schemaName, String tableNa...
method getBySchemaAndTableName (line 173) | private DbTable getBySchemaAndTableName(String dbId, String schemaName...
method getNamedParameterJdbcTemplate (line 197) | public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate(String...
method getTxnTemplate (line 201) | public TransactionTemplate getTxnTemplate(String dbId) {
method getDialect (line 205) | public Dialect getDialect(String dbId) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/JdbcOperationService.java
class JdbcOperationService (line 28) | @RequiredArgsConstructor
method update (line 33) | @Override
method read (line 38) | @Override
method findOne (line 45) | @Override
method exists (line 50) | @Override
method count (line 62) | @Override
method queryCustom (line 68) | @Override
method delete (line 75) | @Override
method create (line 83) | @Override
method processArrayValue (line 124) | private Array processArrayValue(NamedParameterJdbcTemplate namedParame...
method batchUpdate (line 139) | @Override
method batchUpdate (line 155) | public CreateBulkResponse batchUpdate(
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/DbOperationService.java
type DbOperationService (line 14) | public interface DbOperationService {
method update (line 15) | int update(NamedParameterJdbcTemplate namedParameterJdbcTemplate, Map<...
method read (line 17) | List<Map<String, Object>> read(NamedParameterJdbcTemplate namedParamet...
method findOne (line 21) | Map<String, Object> findOne(NamedParameterJdbcTemplate namedParameterJ...
method exists (line 23) | ExistsResponse exists(NamedParameterJdbcTemplate namedParameterJdbcTem...
method count (line 25) | CountResponse count(NamedParameterJdbcTemplate namedParameterJdbcTempl...
method queryCustom (line 27) | Object queryCustom(NamedParameterJdbcTemplate namedParameterJdbcTempla...
method delete (line 29) | int delete(NamedParameterJdbcTemplate namedParameterJdbcTemplate, Map<...
method create (line 31) | CreateResponse create(NamedParameterJdbcTemplate namedParameterJdbcTem...
method batchUpdate (line 33) | CreateBulkResponse batchUpdate(NamedParameterJdbcTemplate namedParamet...
method batchUpdate (line 35) | CreateBulkResponse batchUpdate(NamedParameterJdbcTemplate namedParamet...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/SimpleRowMapper.java
class SimpleRowMapper (line 12) | @Slf4j
method getColumnValue (line 18) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/BulkCreateService.java
type BulkCreateService (line 13) | public interface BulkCreateService {
method saveBulk (line 14) | CreateBulkResponse saveBulk(
method saveMultipartFile (line 18) | @Async
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/CountQueryService.java
type CountQueryService (line 6) | public interface CountQueryService {
method count (line 7) | CountResponse count(ReadContext readContext);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/CreateService.java
type CreateService (line 8) | public interface CreateService {
method save (line 10) | CreateResponse save(String dbId, String schemaName, String tableName, ...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/DeleteService.java
type DeleteService (line 4) | public interface DeleteService {
method delete (line 6) | int delete(
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/ExistsQueryService.java
type ExistsQueryService (line 6) | public interface ExistsQueryService {
method exists (line 7) | ExistsResponse exists(ReadContext readContext);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/FindOneService.java
type FindOneService (line 7) | public interface FindOneService {
method findOne (line 8) | Map<String, Object> findOne(ReadContext readContext);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/FunctionService.java
type FunctionService (line 8) | public interface FunctionService extends SubRoutine {
method getSimpleJdbcCall (line 9) | SimpleJdbcCall getSimpleJdbcCall(String dbId, String subRoutineName);
method execute (line 11) | Map<String, Object> execute(String dbId, String subRoutineName, Map<St...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcBulkCreateService.java
class JdbcBulkCreateService (line 36) | @Slf4j
method saveBulk (line 51) | public CreateBulkResponse saveBulk(BulkContext bulkContext, List<Map<S...
method saveMultipartFile (line 95) | @Async
method update (line 121) | @Override
method determineInsertableColumns (line 157) | private List<String> determineInsertableColumns(
method handleTsId (line 173) | private List<Map<String, Object>> handleTsId(
method convertToInsertableColumnList (line 201) | private List<InsertableColumn> convertToInsertableColumnList(
method processTypes (line 229) | private void processTypes(
method executeBatchUpdate (line 246) | private CreateBulkResponse executeBatchUpdate(
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcCountQueryService.java
class JdbcCountQueryService (line 16) | @Slf4j
method count (line 24) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcCreateService.java
class JdbcCreateService (line 24) | @Slf4j
method save (line 33) | @Override
method buildInsertableColumns (line 79) | private List<String> buildInsertableColumns(
method processTsId (line 86) | private Map<String, Object> processTsId(
method toInsertableColumnList (line 96) | private List<InsertableColumn> toInsertableColumnList(
method processSequences (line 105) | private void processSequences(
method executeCreate (line 129) | private CreateResponse executeCreate(
method updateOrAddInsertableColumn (line 145) | private void updateOrAddInsertableColumn(
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcDeleteService.java
class JdbcDeleteService (line 21) | @Slf4j
method delete (line 30) | @Override
method executeDelete (line 44) | private int executeDelete(String dbId, String filter, DbTable table, D...
method addWhere (line 70) | private void addWhere(String dbId, String filter, DbTable table, Delet...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcExistsQueryService.java
class JdbcExistsQueryService (line 16) | @Slf4j
method exists (line 24) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcFindOneService.java
class JdbcFindOneService (line 16) | @Slf4j
method findOne (line 25) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcFunctionService.java
class JdbcFunctionService (line 13) | @Slf4j
method getSimpleJdbcCall (line 20) | @Override
method execute (line 27) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcProcedureService.java
class JdbcProcedureService (line 19) | @Slf4j
method execute (line 27) | @Override
method doExecuteInternal (line 51) | private Map<String, Object> doExecuteInternal(JdbcTemplate jdbcTemplate,
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcReadService.java
class JdbcReadService (line 16) | @Slf4j
method findAll (line 24) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JdbcUpdateService.java
class JdbcUpdateService (line 23) | @Slf4j
method patch (line 31) | @Override
method executeUpdate (line 54) | private int executeUpdate(String dbId, String filter, DbTable table, U...
method addWhere (line 82) | private void addWhere(String filter, DbTable table, UpdateContext cont...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/JinJavaTemplateExecutorService.java
class JinJavaTemplateExecutorService (line 33) | @Slf4j
method buildNamedParameterQuery (line 47) | private static String buildNamedParameterQuery(String template) {
method buildParamMap (line 54) | private static Map<String, Object> buildParamMap(Map<String, Object> c...
method execute (line 72) | @Override
method execute (line 81) | private Object execute(String dbId, Map<String, Object> paramMap, Stri...
method executeQuery (line 96) | private Object executeQuery(String dbId, Map<String, Object> paramMap,...
method executeUpdate (line 106) | private UpdateResponse executeUpdate(String dbId, Map<String, Object> ...
method executeDelete (line 115) | private DeleteResponse executeDelete(String dbId, Map<String, Object> ...
method executeCreate (line 124) | private Object executeCreate(String dbId, Map<String, Object> paramMap...
method executeInternal (line 134) | private Pair<String, Map<String, Object>> executeInternal(String templ...
method renderJinJavaTemplate (line 144) | private String renderJinJavaTemplate(String templateFile, Map<String, ...
method extractPlaceHolder (line 169) | private Map<String, Placeholder> extractPlaceHolder(final String rende...
method validatePlaceholder (line 195) | private void validatePlaceholder(final Map<String, Placeholder> placeh...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/ProcedureService.java
type ProcedureService (line 7) | public interface ProcedureService {
method execute (line 9) | Map<String, Object> execute(String dbId, String subRoutineName, Map<St...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/ReadService.java
type ReadService (line 5) | public interface ReadService {
method findAll (line 6) | Object findAll(ReadContext readContext);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/SQLTemplateExecutorService.java
type SQLTemplateExecutorService (line 6) | public interface SQLTemplateExecutorService {
method execute (line 8) | Object execute(String dbId, String templateFile, Map<String, Object> c...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/SubRoutine.java
type SubRoutine (line 13) | public interface SubRoutine {
method doExecute (line 15) | default Map<String, Object> doExecute(JdbcTemplate jdbcTemplate,
method getSimpleJdbcCall (line 28) | SimpleJdbcCall getSimpleJdbcCall(String dbId, String subRoutineName);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/core/service/UpdateService.java
type UpdateService (line 6) | public interface UpdateService {
method patch (line 8) | int patch(String dbId, String schemaName, String tableName, Map<String...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/CreateContext.java
method getColumnNames (line 15) | private List<String> getColumnNames() {
method getParamNames (line 21) | private List<String> getParamNames() {
method renderColumns (line 53) | public String renderColumns() {
method renderParams (line 57) | public String renderParams() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/DeleteContext.java
class DeleteContext (line 15) | @Builder
method createParamMap (line 28) | public void createParamMap() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/FnUtil.java
class FnUtil (line 3) | public final class FnUtil {
method FnUtil (line 5) | private FnUtil() {}
method extractFn (line 12) | public static String extractFn(String text) {
method substituteColumnPlaceholder (line 49) | public static String substituteColumnPlaceholder(String fragment, Stri...
method isSafe (line 62) | public static boolean isSafe(String fragment) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/InsertableColumn.java
class InsertableColumn (line 6) | @Data
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/JoinDetail.java
method getJoinType (line 19) | public String getJoinType() {
method hasWith (line 25) | public boolean hasWith() {
method hasOn (line 29) | public boolean hasOn() {
method hasFilter (line 33) | public boolean hasFilter() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/ReadContext.java
class ReadContext (line 20) | @Builder
method createParamMap (line 49) | public void createParamMap() {
method addColumns (line 55) | public void addColumns(List<DbColumn> columnList) {
method addJoin (line 59) | public void addJoin(DbJoin join) {
method addTable (line 65) | public void addTable(DbTable table) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/dto/UpdateContext.java
class UpdateContext (line 17) | @Builder
method renderSetColumns (line 32) | public String renderSetColumns() {
method createParamMap (line 39) | public void createParamMap(Map<String, Object> data) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/multidb/RoutingDataSource.java
class RoutingDataSource (line 8) | @Slf4j
method determineCurrentLookupKey (line 12) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/JoinProcessor.java
class JoinProcessor (line 28) | @Slf4j
method process (line 35) | @Override
method reviewRootTable (line 75) | private DbTable reviewRootTable(String dbId, List<DbTable> allJoinTabl...
method addJoin (line 94) | private void addJoin(DbTable table, DbTable rootTable, JoinDetail join...
method processFilter (line 107) | private void processFilter(DbTable table, JoinDetail joinDetail, DbJoi...
method addCondition (line 129) | private void addCondition(DbTable table, DbTable rootTable, JoinDetail...
method processOn (line 141) | private void processOn(String onExpression, int onIdx, DbTable table, ...
method addColumns (line 161) | private List<DbColumn> addColumns(DbTable table, List<String> fields) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/OrderByProcessor.java
class OrderByProcessor (line 13) | @RequiredArgsConstructor
method process (line 17) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/ReadProcessor.java
type ReadProcessor (line 5) | public interface ReadProcessor {
method process (line 7) | void process(ReadContext readContext);
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/RootTableFieldProcessor.java
class RootTableFieldProcessor (line 17) | @Slf4j
method process (line 20) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/RootTableProcessor.java
class RootTableProcessor (line 11) | @Slf4j
method process (line 18) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/processor/RootWhereProcessor.java
class RootWhereProcessor (line 16) | @Slf4j
method process (line 22) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/CustomRSQLOperators.java
class CustomRSQLOperators (line 9) | public class CustomRSQLOperators extends RSQLOperators {
method customOperators (line 54) | public static Set<ComparisonOperator> customOperators() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/OperatorHandler.java
type OperatorHandler (line 12) | public interface OperatorHandler {
method handle (line 16) | String handle(Dialect dialect, DbColumn column, DbWhere dbWhere, Strin...
method reviewAndSetParam (line 18) | default String reviewAndSetParam(String key, Object value, Map<String,...
method handle (line 32) | default String handle(Dialect dialect, DbColumn column, DbWhere dbWher...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/OperatorMap.java
class OperatorMap (line 9) | public class OperatorMap {
method getSQLOperator (line 21) | public static String getSQLOperator(String rSQLOperator) {
method getRSQLOperator (line 25) | public static String getRSQLOperator(String expression) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/RSQLOperatorHandlers.java
class RSQLOperatorHandlers (line 10) | public class RSQLOperatorHandlers {
method getOperatorHandler (line 44) | public static OperatorHandler getOperatorHandler(String symbol) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/EndWithOperatorHandler.java
class EndWithOperatorHandler (line 10) | public class EndWithOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/EqualToOperatorHandler.java
class EqualToOperatorHandler (line 10) | public class EqualToOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/GreaterThanEqualToOperatorHandler.java
class GreaterThanEqualToOperatorHandler (line 10) | public class GreaterThanEqualToOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/GreaterThanOperatorHandler.java
class GreaterThanOperatorHandler (line 11) | @Slf4j
method handle (line 16) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/InOperatorHandler.java
class InOperatorHandler (line 13) | @Slf4j
method handle (line 18) | @Override
method handle (line 23) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/IsNotNullOperatorHandler.java
class IsNotNullOperatorHandler (line 10) | public class IsNotNullOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/IsNullOperatorHandler.java
class IsNullOperatorHandler (line 10) | public class IsNullOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/JsonContainInArrayOperatorHandler.java
class JsonContainInArrayOperatorHandler (line 10) | public class JsonContainInArrayOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/JsonContainOperatorHandler.java
class JsonContainOperatorHandler (line 10) | public class JsonContainOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/JsonbContainOperatorHandler.java
class JsonbContainOperatorHandler (line 10) | public class JsonbContainOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/JsonbEqualToOperatorHandler.java
class JsonbEqualToOperatorHandler (line 10) | public class JsonbEqualToOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/JsonbKeyExistsOperatorHandler.java
class JsonbKeyExistsOperatorHandler (line 10) | public class JsonbKeyExistsOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/LessThanEqualToOperatorHandler.java
class LessThanEqualToOperatorHandler (line 10) | public class LessThanEqualToOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/LessThanOperatorHandler.java
class LessThanOperatorHandler (line 10) | public class LessThanOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/LikeOperatorHandler.java
class LikeOperatorHandler (line 10) | public class LikeOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/NotEqualToOperatorHandler.java
class NotEqualToOperatorHandler (line 10) | public class NotEqualToOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/NotInOperatorHandler.java
class NotInOperatorHandler (line 14) | @Slf4j
method handle (line 19) | @Override
method handle (line 24) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/NotLikeOperatorHandler.java
class NotLikeOperatorHandler (line 10) | public class NotLikeOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/operator/handler/StartWithOperatorHandler.java
class StartWithOperatorHandler (line 10) | public class StartWithOperatorHandler implements OperatorHandler {
method handle (line 14) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/parser/RSQLParserBuilder.java
class RSQLParserBuilder (line 6) | public class RSQLParserBuilder {
method newRSQLParser (line 8) | public static RSQLParser newRSQLParser() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/resolver/CrossTableColumnResolver.java
class CrossTableColumnResolver (line 17) | @Slf4j
method resolveColumn (line 29) | public static DbColumn resolveColumn(String columnSelector, List<DbTab...
method findTableByPrefix (line 76) | private static DbTable findTableByPrefix(String prefix, List<DbTable> ...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/rsql/visitor/BaseRSQLVisitor.java
class BaseRSQLVisitor (line 20) | @RequiredArgsConstructor
method visit (line 27) | @Override
method visit (line 33) | @Override
method visit (line 41) | @Override
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/ColumnLabel.java
type ColumnLabel (line 3) | public enum ColumnLabel {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/DB2DataExtraction.java
class DB2DataExtraction (line 16) | @Slf4j
method canHandle (line 28) | @Override
method getTables (line 35) | @Override
method getAllColumns (line 71) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
method getDbTable (line 108) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/JdbcMetaDataProvider.java
class JdbcMetaDataProvider (line 13) | @Slf4j
method processMetaData (line 30) | @Override
method getMetaDataExtraction (line 66) | private Optional<MetaDataExtraction> getMetaDataExtraction(String prod...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/JdbcTypeJavaClassMappings.java
class JdbcTypeJavaClassMappings (line 31) | @Slf4j
method JdbcTypeJavaClassMappings (line 39) | private JdbcTypeJavaClassMappings() {
method buildJavaClassToJdbcTypeCodeMappings (line 44) | private static ConcurrentHashMap<Class<?>, Integer> buildJavaClassToJd...
method buildJdbcTypeCodeToJavaClassMappings (line 95) | private static ConcurrentHashMap<Integer, Class<?>> buildJdbcTypeCodeT...
method determineJdbcTypeCodeForJavaClass (line 148) | public int determineJdbcTypeCodeForJavaClass(Class<?> cls) {
method determineJavaClassForJdbcTypeCode (line 170) | public Class<?> determineJavaClassForJdbcTypeCode(Integer typeCode) {
method determineJavaClassForJdbcTypeCode (line 186) | public Class<?> determineJavaClassForJdbcTypeCode(int typeCode) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/MariaDBDataExtraction.java
class MariaDBDataExtraction (line 16) | @Slf4j
method canHandle (line 22) | @Override
method getTables (line 28) | @Override
method getAllColumns (line 66) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
method getDbTable (line 103) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/MetaDataExtraction.java
type MetaDataExtraction (line 15) | public interface MetaDataExtraction {
method canHandle (line 16) | boolean canHandle(String database);
method getTables (line 19) | List<DbTable> getTables(DatabaseMetaData databaseMetaData, boolean inc...
method include (line 21) | default boolean include(String schemaOrCatalog, List<String> excludedS...
method getAllCatalogs (line 25) | default List<String> getAllCatalogs(DatabaseMetaData databaseMetaData,...
method getAllSchemas (line 43) | default List<String> getAllSchemas(DatabaseMetaData databaseMetaData, ...
method getMetaTables (line 61) | default List<MetaDataTable>
method getAllPrimaryKeys (line 87) | default List<String> getAllPrimaryKeys(DatabaseMetaData databaseMetaDa...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/MsSQLServerMetaDataExtraction.java
class MsSQLServerMetaDataExtraction (line 17) | @Slf4j
method canHandle (line 44) | @Override
method getTables (line 49) | @Override
method getAllColumns (line 84) | private List<DbColumn> getAllColumns(
method getDbTable (line 135) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/MySQLDataExtraction.java
class MySQLDataExtraction (line 16) | @Slf4j
method canHandle (line 22) | @Override
method getTables (line 28) | @Override
method getAllColumns (line 66) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
method getDbTable (line 102) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/OracleMetaDataExtraction.java
class OracleMetaDataExtraction (line 16) | @Slf4j
method canHandle (line 33) | @Override
method getTables (line 40) | @Override
method getDbTable (line 84) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
method getAllColumns (line 103) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/PostgreSQLDataExclusion.java
class PostgreSQLDataExclusion (line 17) | @Slf4j
method canHandle (line 23) | @Override
method getTables (line 29) | @Override
method getAllColumns (line 65) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
method getDbTable (line 103) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/SQLiteDataExtraction.java
class SQLiteDataExtraction (line 16) | @Slf4j
method canHandle (line 21) | @Override
method getTables (line 26) | @Override
method getAllColumns (line 69) | private List<DbColumn> getAllColumns(DatabaseMetaData databaseMetaData...
method getDbTable (line 113) | private DbTable getDbTable(DatabaseMetaData databaseMetaData, MetaData...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/SqlCreatorTemplate.java
class SqlCreatorTemplate (line 25) | @Slf4j
method updateQuery (line 32) | public String updateQuery(UpdateContext updateContext) {
method deleteQuery (line 51) | public String deleteQuery(DeleteContext deleteContext) {
method create (line 70) | public String create(CreateContext createContext) {
method findOne (line 83) | public String findOne(ReadContext readContext) {
method count (line 94) | public String count(ReadContext readContext) {
method exists (line 105) | public String exists(ReadContext readContext) {
method query (line 117) | public String query(ReadContext readContext) {
method renderSqlTemplate (line 156) | private String renderSqlTemplate(String template, Map<String, Object> ...
method projections (line 164) | private String projections(List<DbColumn> columns) {
method orderBy (line 170) | private String orderBy(List<DbSort> sorts) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/sql/SqlTypes.java
class SqlTypes (line 7) | public class SqlTypes {
method SqlTypes (line 318) | private SqlTypes() {
method isNumericType (line 327) | public static boolean isNumericType(int typeCode) {
method isStringType (line 351) | public static boolean isStringType(int typeCode) {
method isCharacterOrClobType (line 373) | public static boolean isCharacterOrClobType(int typeCode) {
method isCharacterType (line 395) | public static boolean isCharacterType(int typeCode) {
method isVarcharType (line 415) | public static boolean isVarcharType(int typeCode) {
method isVarbinaryType (line 433) | public static boolean isVarbinaryType(int typeCode) {
method isBinaryType (line 449) | public static boolean isBinaryType(int typeCode) {
method isNumericOrDecimal (line 466) | public static boolean isNumericOrDecimal(int typeCode) {
method isFloatOrRealOrDouble (line 481) | public static boolean isFloatOrRealOrDouble(int typeCode) {
method isIntegral (line 497) | public static boolean isIntegral(int typeCode) {
method isSmallOrTinyInt (line 509) | public static boolean isSmallOrTinyInt(int typeCode) {
method isTemporalType (line 524) | public static boolean isTemporalType(int typeCode) {
method isIntervalType (line 543) | public static boolean isIntervalType(int typeCode) {
method isDurationType (line 550) | public static boolean isDurationType(int typeCode) {
method hasDatePart (line 559) | public static boolean hasDatePart(int typeCode) {
method hasTimePart (line 576) | public static boolean hasTimePart(int typeCode) {
method isSpatialType (line 595) | public static boolean isSpatialType(int typeCode) {
method isEnumType (line 606) | public static boolean isEnumType(int typeCode) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/tsid/TSIDProcessor.java
class TSIDProcessor (line 12) | @Slf4j
method processTsId (line 15) | public Map<String, Object> processTsId(Map<String, Object> data, List<...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/util/AliasGenerator.java
class AliasGenerator (line 5) | public class
method getAlias (line 12) | public static String getAlias(String sqlIdentifier) {
method generateUUID (line 20) | private static String generateUUID (){
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/validator/ConstraintValidator.java
type ConstraintValidator (line 5) | public interface ConstraintValidator {
method validate (line 6) | void validate(Object value, String placeholderName) throws Placeholder...
method throwConstraintViolation (line 8) | default void throwConstraintViolation(String placeholderName, String m...
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/validator/CustomPlaceholderValidators.java
class CustomPlaceholderValidators (line 10) | public class CustomPlaceholderValidators {
method CustomPlaceholderValidators (line 16) | public CustomPlaceholderValidators() {
method getValidator (line 23) | public ConstraintValidator getValidator(String constraint) {
method getValidators (line 27) | public Map<String, ConstraintValidator> getValidators() {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/validator/impl/IsRequiredValidator.java
class IsRequiredValidator (line 6) | public class IsRequiredValidator implements ConstraintValidator {
method validate (line 8) | @Override
method isMissingValue (line 15) | private boolean isMissingValue(Object value){
method isNullValue (line 19) | private boolean isNullValue(Object value) {
method isEmptyString (line 23) | private boolean isEmptyString(Object value) {
FILE: db2rest-core/rdbms-support/src/main/java/com/homihq/db2rest/jdbc/validator/impl/IsUUIDValidator.java
class IsUUIDValidator (line 9) | public class IsUUIDValidator implements ConstraintValidator {
method validate (line 11) | @Override
method isValidUUIDFormat (line 18) | private boolean isValidUUIDFormat(String value) {
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/core/service/JdbcCreateServiceTest.java
class JdbcCreateServiceTest (line 29) | @ExtendWith(MockitoExtension.class)
method setUp (line 59) | @BeforeEach
method shouldBuildInsertableColumnsFromDataWhenNoColumnsSpecified (line 65) | @Test
method shouldUseProvidedColumnsWhenSpecified (line 93) | @Test
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/dto/FnUtilTest.java
class FnUtilTest (line 6) | class FnUtilTest {
method shouldExtractContentFromFnBlock (line 8) | @Test
method shouldReturnNullWhenNoFnBlock (line 14) | @Test
method shouldReturnNullForNullInput (line 20) | @Test
method shouldHandleNestedBrackets (line 26) | @Test
method shouldSubstituteColumnPlaceholder (line 32) | @Test
method shouldSubstituteUpperCasePlaceholder (line 39) | @Test
method shouldSubstituteDollarPlaceholder (line 46) | @Test
method shouldReturnNullForNullSubstitution (line 53) | @Test
method shouldReturnTrueForSafeFragment (line 59) | @Test
method shouldReturnFalseForUnsafeFragmentWithDrop (line 66) | @Test
method shouldReturnFalseForUnsafeFragmentWithComment (line 71) | @Test
method shouldReturnFalseForUnsafeFragmentWithAlter (line 76) | @Test
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/util/AliasGeneratorTest.java
class AliasGeneratorTest (line 6) | class AliasGeneratorTest {
method shouldTruncateIdentifierLongerThanPrefixLength (line 8) | @Test
method shouldKeepIdentifierShorterThanPrefixLength (line 17) | @Test
method shouldKeepIdentifierEqualToPrefixLength (line 25) | @Test
method shouldGenerateUniqueAliasesForSameIdentifier (line 33) | @Test
method shouldAlwaysContainUnderseparator (line 42) | @Test
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/validator/CustomPlaceholderValidatorsTest.java
class CustomPlaceholderValidatorsTest (line 8) | class CustomPlaceholderValidatorsTest {
method setUp (line 12) | @BeforeEach
method shouldReturnIsRequiredValidator (line 17) | @Test
method shouldReturnIsUUIDValidator (line 24) | @Test
method shouldReturnNullForUnknownConstraint (line 31) | @Test
method shouldReturnUnmodifiableValidatorsMap (line 38) | @Test
method isRequiredConstantShouldBeCorrect (line 45) | @Test
method isUUIDConstantShouldBeCorrect (line 51) | @Test
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/validator/impl/IsRequiredValidatorTest.java
class IsRequiredValidatorTest (line 10) | class IsRequiredValidatorTest {
method setUp (line 14) | @BeforeEach
method shouldThrowExceptionWhenValueIsNull (line 19) | @Test
method shouldThrowExceptionWhenValueIsEmptyString (line 25) | @Test
method shouldThrowExceptionWhenValueIsBlankString (line 31) | @Test
method shouldNotThrowExceptionWhenValueIsValidString (line 37) | @Test
method shouldNotThrowExceptionWhenValueIsNumber (line 43) | @Test
method shouldNotThrowExceptionWhenValueIsObject (line 49) | @Test
FILE: db2rest-core/rdbms-support/src/test/java/com/homihq/db2rest/jdbc/validator/impl/IsUUIDValidatorTest.java
class IsUUIDValidatorTest (line 9) | class IsUUIDValidatorTest {
method setUp (line 13) | @BeforeEach
method shouldNotThrowForValidUUID (line 18) | @Test
method shouldThrowForInvalidUUID (line 25) | @Test
method shouldThrowForNull (line 31) | @Test
method shouldThrowForNonStringValue (line 37) | @Test
method shouldThrowForEmptyString (line 43) | @Test
FILE: db2rest-dialects/db2-dialect/src/main/java/com/db2rest/jdbc/dialect/DB2RestDB2Dialect.java
class DB2RestDB2Dialect (line 15) | @Slf4j
method DB2RestDB2Dialect (line 18) | public DB2RestDB2Dialect(ObjectMapper objectMapper) {
method isSupportedDb (line 22) | @Override
method processTypes (line 29) | @Override
method renderTableName (line 60) | @Override
method renderTableNameWithoutAlias (line 69) | @Override
method getQuotedName (line 74) | private String getQuotedName(String name) {
method convertToLocalDateTime (line 78) | private LocalDateTime convertToLocalDateTime(String value) {
method convertTimestamp (line 86) | @Override
method supportBatchReturnKeys (line 91) | @Override
method getReadSqlTemplate (line 97) | @Override
method getDeleteSqlTemplate (line 102) | @Override
method getUpdateSqlTemplate (line 107) | @Override
method getInsertSqlTemplate (line 112) | @Override
method getCountSqlTemplate (line 117) | @Override
method getExistSqlTemplate (line 122) | @Override
method getFindOneSqlTemplate (line 127) | @Override
FILE: db2rest-dialects/db2-dialect/src/test/java/com/db2rest/jdbc/dialect/DB2RestDB2DialectTest.java
class DB2RestDB2DialectTest (line 20) | class DB2RestDB2DialectTest {
method setUp (line 25) | @BeforeEach
method testIsSupportedDb (line 31) | @Test
method testRenderTableName (line 41) | @Test
method testRenderTableNameForDelete (line 53) | @Test
method testRenderTableNameWithoutAlias (line 64) | @Test
method testProcessTypesWithTimestamp (line 75) | @Test
method testProcessTypesWithJson (line 90) | @Test
method testConvertTimestamp (line 108) | @Test
method testSupportBatchReturnKeys (line 121) | @Test
method testSqlTemplates (line 127) | @Test
FILE: db2rest-dialects/db2-dialect/src/test/java/com/db2rest/jdbc/dialect/TestConfiguration.java
class TestConfiguration (line 8) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
method objectMapper (line 15) | @Bean
method db2RestDB2Dialect (line 20) | @Bean
FILE: db2rest-dialects/mariadb-dialect/src/main/java/com/db2rest/jdbc/dialect/MariaDBDialect.java
class MariaDBDialect (line 17) | @Slf4j
method MariaDBDialect (line 19) | public MariaDBDialect(ObjectMapper objectMapper) {
method isSupportedDb (line 23) | @Override
method processTypes (line 28) | @Override
method getQuotedName (line 52) | private String getQuotedName(String name) {
method renderTableName (line 56) | @Override
method renderTableNameWithoutAlias (line 67) | @Override
method getAliasedName (line 72) | @Override
method convertToLocalDateTime (line 81) | private LocalDateTime convertToLocalDateTime(String value) {
method convertTimestamp (line 89) | @Override
FILE: db2rest-dialects/mssql-dialect/src/main/java/com/db2rest/jdbc/dialect/MsSQLServerDialect.java
class MsSQLServerDialect (line 15) | @Slf4j
method MsSQLServerDialect (line 17) | public MsSQLServerDialect(ObjectMapper objectMapper) {
method supportBatchReturnKeys (line 22) | @Override
method isSupportedDb (line 27) | @Override
method processTypes (line 32) | @Override
method renderTableName (line 53) | @Override
method renderTableNameWithoutAlias (line 60) | @Override
method getQuotedName (line 65) | private String getQuotedName(String name) {
method getDeleteSqlTemplate (line 69) | @Override
method getExistSqlTemplate (line 74) | @Override
method getReadSqlTemplate (line 79) | @Override
method getUpdateSqlTemplate (line 84) | @Override
method convertToLocalDateTime (line 89) | private LocalDateTime convertToLocalDateTime(String value) {
FILE: db2rest-dialects/mysql-dialect/src/main/java/com/db2rest/jdbc/dialect/DB2RestMySQLDialect.java
class DB2RestMySQLDialect (line 17) | @Slf4j
method DB2RestMySQLDialect (line 21) | public DB2RestMySQLDialect(ObjectMapper objectMapper) {
method isSupportedDb (line 26) | @Override
method processTypes (line 31) | @Override
method getQuotedName (line 56) | private String getQuotedName(String name) {
method renderTableName (line 60) | @Override
method renderTableNameWithoutAlias (line 65) | @Override
method convertToLocalDateTime (line 70) | private LocalDateTime convertToLocalDateTime(String value) {
method convertTimestamp (line 78) | @Override
FILE: db2rest-dialects/oracle-dialect/src/main/java/com/db2rest/jdbc/dialect/OracleDialect.java
class OracleDialect (line 15) | @Slf4j
method OracleDialect (line 17) | public OracleDialect(ObjectMapper objectMapper) {
method isSupportedDb (line 21) | @Override
method getReadSqlTemplate (line 26) | @Override
method supportBatchReturnKeys (line 31) | @Override
method processTypes (line 36) | @Override
method convertToLocalDateTime (line 60) | private LocalDateTime convertToLocalDateTime(String value) {
method getQuotedName (line 68) | private String getQuotedName(String name) {
method renderTableName (line 72) | @Override
method renderTableNameWithoutAlias (line 77) | @Override
FILE: db2rest-dialects/oracle9i-dialect/src/main/java/com/db2rest/jdbc/dialect/OracleDialect.java
class OracleDialect (line 13) | @Slf4j
method OracleDialect (line 15) | public OracleDialect(ObjectMapper objectMapper) {
method isSupportedDb (line 19) | @Override
method getReadSqlTemplate (line 25) | @Override
method supportBatchReturnKeys (line 30) | @Override
method processTypes (line 35) | @Override
method getQuotedName (line 57) | private String getQuotedName(String name) {
method renderTableName (line 61) | @Override
method renderTableNameWithoutAlias (line 66) | @Override
FILE: db2rest-dialects/pg-dialect/src/main/java/com/db2rest/jdbc/dialect/PostGreSQLDialect.java
class PostGreSQLDialect (line 25) | @Slf4j
method PostGreSQLDialect (line 27) | public PostGreSQLDialect(ObjectMapper objectMapper) {
method processTypes (line 32) | @Override
method convertToOffsetTime (line 76) | private OffsetTime convertToOffsetTime(String value) {
method convertToLocalDateTime (line 84) | private LocalDateTime convertToLocalDateTime(String value) {
method convertToOffsetDateTime (line 92) | private OffsetDateTime convertToOffsetDateTime(String value) {
method convertToJson (line 100) | private Object convertToJson(Object value, String columnDataTypeName) {
method convertJsonToVO (line 112) | @Override
method getQuotedName (line 132) | private String getQuotedName(String name) {
method renderTableName (line 136) | @Override
method renderTableNameWithoutAlias (line 141) | @Override
method isSupportedDb (line 146) | @Override
method convertToStringArray (line 151) | @Override
method convertTimestamp (line 168) | @Override
FILE: db2rest-dialects/pg-dialect/src/main/java/com/db2rest/jdbc/dialect/driver/EnvVarSSLSocketFactory.java
class EnvVarSSLSocketFactory (line 25) | @Slf4j
method EnvVarSSLSocketFactory (line 30) | public EnvVarSSLSocketFactory() throws Exception {
method validateCertificate (line 75) | private void validateCertificate(X509Certificate cert) throws Certific...
method createTrustManagersWithHostnameVerification (line 107) | private TrustManager[] createTrustManagersWithHostnameVerification(Tru...
method createSocket (line 147) | @Override
method createSocket (line 161) | @Override
method createSocket (line 170) | @Override
method createSocket (line 180) | @Override
method createSocket (line 189) | @Override
method getDefaultCipherSuites (line 200) | @Override
method getSupportedCipherSuites (line 205) | @Override
FILE: db2rest-dialects/pg-dialect/src/main/java/com/db2rest/jdbc/dialect/driver/PgSingleCertValidatingFactory.java
class PgSingleCertValidatingFactory (line 48) | public class PgSingleCertValidatingFactory extends WrappedFactory {
method PgSingleCertValidatingFactory (line 62) | public PgSingleCertValidatingFactory(Properties info) throws Exception {
method getCallbackHandler (line 135) | private CallbackHandler getCallbackHandler(
method initPk8 (line 157) | private void initPk8(
method initP12 (line 173) | private void initP12(
method getKeyStoreInstance (line 179) | private KeyStore getKeyStoreInstance() throws Exception {
method getCertFis (line 188) | private FileInputStream getCertFis(String sslrootcertfile) throws Exce...
method initTrustManagerFactory (line 198) | private TrustManagerFactory initTrustManagerFactory(InputStream fis, S...
method initContext (line 225) | private SSLContext initContext(TrustManager[] tm) throws Exception {
method base64Encode (line 238) | public String base64Encode(String p10) throws Exception {
method throwKeyManagerException (line 247) | public void throwKeyManagerException() throws PSQLException {
class ConsoleCallbackHandler (line 262) | public static class ConsoleCallbackHandler implements CallbackHandler {
method ConsoleCallbackHandler (line 266) | ConsoleCallbackHandler(@Nullable String password) {
method handle (line 279) | @Override
FILE: db2rest-dialects/sqlite-dialect/src/main/java/com/db2rest/jdbc/dialect/SQLiteDialect.java
class SQLiteDialect (line 15) | @Slf4j
method SQLiteDialect (line 18) | public SQLiteDialect(ObjectMapper objectMapper) {
method isSupportedDb (line 22) | @Override
method supportAlias (line 27) | @Override
method processTypes (line 32) | @Override
method getQuotedName (line 52) | private String getQuotedName(String name) {
method renderTableName (line 56) | @Override
method renderTableNameWithoutAlias (line 64) | @Override
method convertToLocalDateTime (line 69) | private LocalDateTime convertToLocalDateTime(String value) {
method convertTimestamp (line 77) | @Override
method supportBatchReturnKeys (line 82) | @Override
FILE: docker-compose/db2/init/01-create-schema.sql
type EMP (line 5) | CREATE TABLE EMP.EMPLOYEE (
type EMP (line 20) | CREATE TABLE EMP.DEPARTMENT (
type IDX_EMP_DEPT (line 49) | CREATE INDEX IDX_EMP_DEPT ON EMP.EMPLOYEE(DEPARTMENT_ID)
type IDX_EMP_EMAIL (line 50) | CREATE INDEX IDX_EMP_EMAIL ON EMP.EMPLOYEE(EMAIL)
FILE: docker-compose/mariadb/init/01-init.sql
type employee (line 2) | CREATE TABLE employee (
FILE: docker-compose/mysql/init/01-init.sql
type employee (line 2) | CREATE TABLE employee (
FILE: docker-compose/oracle/init/01-init.sql
type employee (line 2) | CREATE TABLE employee (
FILE: docker-compose/postgresql/init/01-init.sql
type employee (line 2) | CREATE TABLE employee (
FILE: docker-compose/sqlserver/init/01-init.sql
type employee (line 2) | CREATE TABLE employee (
Condensed preview — 556 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,711K chars).
[
{
"path": ".gitattributes",
"chars": 427,
"preview": "src/test/resources/mysql/mysql-sakila.sql linguist-generated=true\nsrc/test/resources/mysql/mysql-sakila-insert-data.sql "
},
{
"path": ".github/FUNDING.yml",
"chars": 854,
"preview": "# These are supported funding model platforms\n\ngithub: [9tigerio]\npatreon: # Replace with a single Patreon username\nopen"
},
{
"path": ".github/RELEASING.md",
"chars": 1359,
"preview": "# General\nWe use [semantic versioning](https://semver.org).\n\nWe publish our snapshots on [GitHub Packages](https://githu"
},
{
"path": ".github/workflows/build-verify.yml",
"chars": 890,
"preview": "name: Build & Verify\n\non:\n pull_request:\n branches:\n - master\n push:\n branches:\n - 'feature/**'\n work"
},
{
"path": ".github/workflows/dockerhub-publish.yml",
"chars": 1365,
"preview": "# This workflow will download the Maven Central package and\n# build Docker image and publish to DockerHub \n\nname: Publi"
},
{
"path": ".github/workflows/maven-central-publish.yml",
"chars": 3548,
"preview": "# This workflow will build a package using Maven and then publish it to Central Portal (Sonatype)\n# For more information"
},
{
"path": ".github/workflows/oracle9i-central-publish.yml",
"chars": 1569,
"preview": "# This workflow will build a package using Maven and then publish it to GitHub packages when a release is created\n# For "
},
{
"path": ".github/workflows/snapshot.yml",
"chars": 1198,
"preview": "name: Publish Snapshot to GitHub\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: 'Version to p"
},
{
"path": ".gitignore",
"chars": 664,
"preview": "HELP.md\ntarget/\n.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**/target/\n!**/src/test/**/target/\n.flattened-pom.xml\npom.xm"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 951,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": "CONTRIBUTING.md",
"chars": 5781,
"preview": "Thanks for showing interest to contribute to DB2Rest 💖, you rock!\n\nWhen it comes to open source, there are different way"
},
{
"path": "Dockerfile",
"chars": 428,
"preview": "FROM bellsoft/liberica-runtime-container:jre-21-cds-slim-musl\n\nARG JAR_FILE=db2rest.jar\n\nCOPY ${JAR_FILE} /opt/app/db2re"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 5581,
"preview": "DB2Rest is a modern low code REST DATA API platform that automatically creates a secure REST API endpoint\nfor your datab"
},
{
"path": "db2rest-api/api-rest/pom-oracle9i.xml",
"chars": 7854,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "db2rest-api/api-rest/pom.xml",
"chars": 9315,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "db2rest-api/api-rest/sample-config/application-db.yml",
"chars": 591,
"preview": "app:\n databases:\n - id: ${DB_NAME:pgdb}\n type: POSTGRESQL\n url: jdbc:postgresql://localhost:5432/homidb\n "
},
{
"path": "db2rest-api/api-rest/sample-config/application-local.yml",
"chars": 290,
"preview": "app:\n databases:\n - id: DB1\n type: POSTGRESQL\n url: jdbc:postgresql://localhost:5432/homidb\n username"
},
{
"path": "db2rest-api/api-rest/sample-config/application-mongo.yml",
"chars": 433,
"preview": "app:\n databases:\n - id: DB1\n type: POSTGRESQL\n url: jdbc:postgresql://localhost:5432/homidb\n username"
},
{
"path": "db2rest-api/api-rest/sample-config/application-pg15.yml",
"chars": 161,
"preview": "app:\n databases:\n - id: ${DB_NAME:pgdb}\n type: POSTGRESQL\n url: jdbc:postgresql://localhost:5432/postgres\n"
},
{
"path": "db2rest-api/api-rest/sample-config/application-pg16.yml",
"chars": 161,
"preview": "app:\n databases:\n - id: ${DB_NAME:pgdb}\n type: POSTGRESQL\n url: jdbc:postgresql://localhost:5432/postgres\n"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/Db2restApplication.java",
"chars": 758,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconf"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/CorsFilterConfiguration.java",
"chars": 2435,
"preview": "package com.homihq.db2rest.config;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.boot.autoconfigure.cond"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/DbServiceConfiguration.java",
"chars": 9577,
"preview": "package com.homihq.db2rest.config;\n\nimport com.db2rest.jdbc.dialect.*;\nimport com.fasterxml.jackson.databind.ObjectMappe"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/RestApiConfiguration.java",
"chars": 4392,
"preview": "package com.homihq.db2rest.config;\n\nimport com.homihq.db2rest.bulk.DataProcessor;\nimport com.homihq.db2rest.jdbc.JdbcMan"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/WebMvcConfiguration.java",
"chars": 756,
"preview": "package com.homihq.db2rest.config;\n\nimport com.homihq.db2rest.interceptor.DatabaseContextRequestInterceptor;\nimport lomb"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/config/jinjava/DisabledExpressionTokenScannerSymbols.java",
"chars": 340,
"preview": "package com.homihq.db2rest.config.jinjava;\n\nimport com.hubspot.jinjava.tree.parse.DefaultTokenScannerSymbols;\n\npublic cl"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/interceptor/DatabaseContextRequestInterceptor.java",
"chars": 2554,
"preview": "package com.homihq.db2rest.interceptor;\n\nimport com.homihq.db2rest.core.exception.GenericDataAccessException;\nimport com"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/RdbmsRestApi.java",
"chars": 103,
"preview": "package com.homihq.db2rest.rest;\n\npublic interface RdbmsRestApi {\n\n String VERSION = \"/v1/rdbms\";\n}\n"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/admin/AdminController.java",
"chars": 655,
"preview": "package com.homihq.db2rest.rest.admin;\n\nimport com.homihq.db2rest.jdbc.JdbcManager;\nimport lombok.RequiredArgsConstructo"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateController.java",
"chars": 2573,
"preview": "package com.homihq.db2rest.rest.create;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.b"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/BulkCreateRestApi.java",
"chars": 2659,
"preview": "package com.homihq.db2rest.rest.create;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.c"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateController.java",
"chars": 1117,
"preview": "package com.homihq.db2rest.rest.create;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.web.bi"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/create/CreateRestApi.java",
"chars": 1588,
"preview": "package com.homihq.db2rest.rest.create;\n\nimport static com.homihq.db2rest.config.MultiTenancy.ROLEBASEDDATAFILTERS;\nimpo"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteController.java",
"chars": 1258,
"preview": "package com.homihq.db2rest.rest.delete;\n\nimport java.util.List;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimp"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/delete/DeleteRestApi.java",
"chars": 1244,
"preview": "package com.homihq.db2rest.rest.delete;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.c"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoController.java",
"chars": 780,
"preview": "package com.homihq.db2rest.rest.meta.db;\n\n\nimport com.homihq.db2rest.jdbc.JdbcManager;\nimport lombok.RequiredArgsConstru"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoObject.java",
"chars": 206,
"preview": "package com.homihq.db2rest.rest.meta.db;\n\npublic record DbInfoObject(\n String dbId,\n String productName,\n "
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/db/DbInfoRestApi.java",
"chars": 748,
"preview": "package com.homihq.db2rest.rest.meta.db;\n\nimport io.swagger.v3.oas.annotations.Operation;\nimport io.swagger.v3.oas.annot"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/ColumnObject.java",
"chars": 355,
"preview": "package com.homihq.db2rest.rest.meta.schema;\n\nimport com.db2rest.jdbc.dialect.model.DbColumn;\n\npublic record ColumnObjec"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaController.java",
"chars": 3211,
"preview": "package com.homihq.db2rest.rest.meta.schema;\n\nimport com.homihq.db2rest.core.exception.GenericDataAccessException;\nimpor"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/SchemaRestApi.java",
"chars": 1788,
"preview": "package com.homihq.db2rest.rest.meta.schema;\n\nimport io.swagger.v3.oas.annotations.Operation;\nimport io.swagger.v3.oas.a"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableObject.java",
"chars": 462,
"preview": "package com.homihq.db2rest.rest.meta.schema;\n\nimport com.db2rest.jdbc.dialect.model.DbTable;\nimport lombok.EqualsAndHash"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/meta/schema/TableWithColumnsObject.java",
"chars": 493,
"preview": "package com.homihq.db2rest.rest.meta.schema;\n\nimport com.db2rest.jdbc.dialect.model.DbTable;\nimport lombok.EqualsAndHash"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/CountQueryController.java",
"chars": 1960,
"preview": "package com.homihq.db2rest.rest.read;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.con"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ExistsQueryController.java",
"chars": 3154,
"preview": "package com.homihq.db2rest.rest.read;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.con"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/FindOneController.java",
"chars": 2169,
"preview": "package com.homihq.db2rest.rest.read;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.con"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/read/ReadController.java",
"chars": 4134,
"preview": "package com.homihq.db2rest.rest.read;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.con"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/FunctionController.java",
"chars": 1206,
"preview": "package com.homihq.db2rest.rest.rpc;\n\nimport com.homihq.db2rest.jdbc.core.service.FunctionService;\nimport lombok.Require"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/rpc/ProcedureController.java",
"chars": 1148,
"preview": "package com.homihq.db2rest.rest.rpc;\n\nimport com.homihq.db2rest.jdbc.core.service.ProcedureService;\nimport lombok.Requir"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/sql/SQLTemplateController.java",
"chars": 4223,
"preview": "package com.homihq.db2rest.rest.sql;\n\nimport com.homihq.db2rest.core.exception.PathVariableNamesMissingException;\nimport"
},
{
"path": "db2rest-api/api-rest/src/main/java/com/homihq/db2rest/rest/update/UpdateController.java",
"chars": 1890,
"preview": "package com.homihq.db2rest.rest.update;\n\nimport com.homihq.db2rest.auth.data.RoleDataFilter;\nimport com.homihq.db2rest.c"
},
{
"path": "db2rest-api/api-rest/src/main/resources/application.yml",
"chars": 1968,
"preview": "app:\n version: @project.version@\n name: @project.name@\n\n databases:\n - id: ${DB_ID:db}\n url: ${DB_URL:}\n "
},
{
"path": "db2rest-api/api-rest/src/main/resources/banner.txt",
"chars": 929,
"preview": "\n${AnsiColor.RED} ____ ____ ____ ____ ____ _____ ____ _____ ____\n${AnsiColor.BLUE} / / / | _ \\| __ )___ \\| _"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/count.jte",
"chars": 144,
"preview": "@param String rootTable\n@param String rootWhere\n\nSELECT\n COUNT(*)\nFROM\n ${rootTable}\n@if(rootWhere != null)\n WH"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/delete-mssql.jte",
"chars": 180,
"preview": "@param String rootTable\n@param String rootWhere\n@param String rootTableAlias\n\nDELETE FROM ${rootTableAlias}\nFROM ${rootT"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/delete.jte",
"chars": 131,
"preview": "@param String rootTable\n@param String rootWhere\n\nDELETE FROM\n ${rootTable}\n@if(rootWhere != null)\n WHERE ${rootWhe"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/exists-mssql.jte",
"chars": 324,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param String rootTable\n@param String rootWhere\n@p"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/exists.jte",
"chars": 330,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param String rootTable\n@param String rootWhere\n@p"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/find-one.jte",
"chars": 168,
"preview": "@param String rootTable\n@param String rootWhere\n@param String columns\n\nSELECT\n ${columns}\nFROM\n ${rootTable}\n@if(r"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/insert.jte",
"chars": 133,
"preview": "@param String columns\n@param String table\n@param String parameters\n\nINSERT INTO ${table}\n (${columns})\nVALUES\n (${"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/read-mssql.jte",
"chars": 1705,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param List<DbJoin> joins\n@param String rootTable\n"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/read-ora-12.jte",
"chars": 643,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param List<DbJoin> joins\n@param String rootTable\n"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/read-ora-9.jte",
"chars": 1758,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param List<DbJoin> joins\n@param String rootTable\n"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/read.jte",
"chars": 570,
"preview": "@import com.db2rest.jdbc.dialect.model.DbJoin\n@import java.util.List\n\n@param List<DbJoin> joins\n@param String rootTable\n"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/update-mssql.jte",
"chars": 217,
"preview": "@param String rootTable\n@param String rootWhere\n@param String columnSets\n@param String rootTableAlias\n\nUPDATE ${rootTabl"
},
{
"path": "db2rest-api/api-rest/src/main/resources/sql-templates/update.jte",
"chars": 165,
"preview": "@param String rootTable\n@param String rootWhere\n@param String columnSets\n\nUPDATE ${rootTable}\nSET ${columnSets}\n@if(root"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/BaseIntegrationTest.java",
"chars": 3448,
"preview": "package com.homihq.db2rest;\n\nimport static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationCo"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2BaseIntegrationTest.java",
"chars": 647,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/DB2ContainerConfiguration.java",
"chars": 1895,
"preview": "package com.homihq.db2rest;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport javax.sql.DataSource;\n\nimport org.spri"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBBaseIntegrationTest.java",
"chars": 660,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MariaDBContainerConfiguration.java",
"chars": 2038,
"preview": "package com.homihq.db2rest;\n\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MsSQLServerContainerConfiguration.java",
"chars": 1866,
"preview": "package com.homihq.db2rest;\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot.j"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLBaseIntegrationTest.java",
"chars": 654,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/MySQLContainerConfiguration.java",
"chars": 2031,
"preview": "package com.homihq.db2rest;\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot.j"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleBaseIntegrationTest.java",
"chars": 658,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/OracleContainerConfiguration.java",
"chars": 2023,
"preview": "package com.homihq.db2rest;\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot.j"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLBaseIntegrationTest.java",
"chars": 661,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/PostgreSQLContainerConfiguration.java",
"chars": 2104,
"preview": "package com.homihq.db2rest;\n\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteBaseIntegrationTest.java",
"chars": 656,
"preview": "package com.homihq.db2rest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.c"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/SQLiteContainerConfiguration.java",
"chars": 2445,
"preview": "package com.homihq.db2rest;\n\nimport com.homihq.db2rest.jdbc.multidb.RoutingDataSource;\nimport org.springframework.boot.j"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerIntegrationTest.java",
"chars": 2864,
"preview": "package com.homihq.db2rest.jdbc.rest.meta.db;\n\nimport com.homihq.db2rest.BaseIntegrationTest;\nimport com.homihq.db2rest."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/db/DbInfoControllerTest.java",
"chars": 1992,
"preview": "package com.homihq.db2rest.jdbc.rest.meta.db;\n\nimport com.homihq.db2rest.jdbc.JdbcManager;\nimport com.db2rest.jdbc.diale"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerIntegrationTest.java",
"chars": 7236,
"preview": "package com.homihq.db2rest.jdbc.rest.meta.schema;\n\nimport com.homihq.db2rest.BaseIntegrationTest;\nimport com.homihq.db2r"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/jdbc/rest/meta/schema/SchemaControllerTest.java",
"chars": 4724,
"preview": "package com.homihq.db2rest.jdbc.rest.meta.schema;\n\nimport com.homihq.db2rest.core.exception.GenericDataAccessException;\n"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/DateTimeUtil.java",
"chars": 1889,
"preview": "package com.homihq.db2rest.rest;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.springframework.test.web.servlet.MvcRe"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/cors/CorsTest.java",
"chars": 5065,
"preview": "package com.homihq.db2rest.rest.cors;\n\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\nimpor"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2BulkCreateControllerTest.java",
"chars": 7566,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CountControllerTest.java",
"chars": 1129,
"preview": "package com.homihq.db2rest.rest.db2;\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cla"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2CreateControllerTest.java",
"chars": 10937,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2DeleteAllTest.java",
"chars": 1595,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.hamcrest.Matchers;\ni"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2DeleteControllerTest.java",
"chars": 3338,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cl"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2JsonFileCreateControllerTest.java",
"chars": 5291,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport io.hosuaby.inject.resour"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ProcedureControllerTest.java",
"chars": 2866,
"preview": "package com.homihq.db2rest.rest.db2;\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cla"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2RSqlOperatorReadControllerTest.java",
"chars": 20235,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport io.hosuaby.inject.resou"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ReadControllerDefaultFetchLimitTest.java",
"chars": 1541,
"preview": "package com.homihq.db2rest.rest.db2;\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cla"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2ReadControllerTest.java",
"chars": 3847,
"preview": "package com.homihq.db2rest.rest.db2;\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cla"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2TemplateControllerTest.java",
"chars": 7816,
"preview": "package com.homihq.db2rest.rest.db2;\n\nimport com.homihq.db2rest.DB2BaseIntegrationTest;\nimport org.junit.jupiter.api.Cla"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/db2/Db2UpdateControllerTest.java",
"chars": 4577,
"preview": "package com.homihq.db2rest.rest.db2;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/docsSwagger/OpenApiSpecificationNoSecurityTest.java",
"chars": 3471,
"preview": "package com.homihq.db2rest.rest.docsSwagger;\n\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/docsSwagger/OpenApiSpecificationWithSecurityTest.java",
"chars": 4660,
"preview": "package com.homihq.db2rest.rest.docsSwagger;\n\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBBasicJoinControllerTest.java",
"chars": 3996,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBBulkCreateControllerTest.java",
"chars": 7109,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCountControllerTest.java",
"chars": 1158,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCreateControllerTest.java",
"chars": 10737,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBCrossJoinControllerTest.java",
"chars": 3558,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBDeleteAllTest.java",
"chars": 1624,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.hamcrest.Matc"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBDeleteControllerTest.java",
"chars": 3368,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBFunctionControllerTest.java",
"chars": 2784,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerJoinControllerTest.java",
"chars": 2329,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerJoinMultiTableControllerTest.java",
"chars": 2513,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBInnerSelfJoinControllerTest.java",
"chars": 2402,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBJsonFileCreateControllerTest.java",
"chars": 5092,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport io.hosuaby.injec"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBProcedureControllerTest.java",
"chars": 2538,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBRSqlOperatorReadControllerTest.java",
"chars": 20606,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport io.hosuaby.inje"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBReadControllerDefaultFetchLimitTest.java",
"chars": 1438,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupite"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBReadControllerTest.java",
"chars": 3810,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBTemplateControllerTest.java",
"chars": 7887,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\nimport com.homihq.db2rest.MariaDBBaseIntegrationTest;\nimport org.junit.jupiter"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariaDBUpdateControllerTest.java",
"chars": 4527,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mariadb/MariadbDateTimeAllTest.java",
"chars": 8281,
"preview": "package com.homihq.db2rest.rest.mariadb;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jack"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBaseIntegrationTest.java",
"chars": 1346,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBasicJoinControllerTest.java",
"chars": 3805,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLBulkCreateControllerTest.java",
"chars": 6567,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCountControllerTest.java",
"chars": 1613,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\nim"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCreateControllerTest.java",
"chars": 10286,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport com.jayway.jsonpath.JsonPath;\nimport io.hosuaby.inject.resources.junit.j"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLCrossJoinControllerTest.java",
"chars": 3330,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDateTimeAllTest.java",
"chars": 2421,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.junit.jupiter.api.ClassOrderer;\n"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDeleteControllerTest.java",
"chars": 3145,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\nim"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLDeleteWithNotAllowedSafeDeleteControllerTest.java",
"chars": 1400,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.hamcrest.Matchers;\nimport org.junit.jupiter.api.DisplayName;\nimport o"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLExistsControllerTest.java",
"chars": 3580,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLFindOneControllerTest.java",
"chars": 1456,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.TestWithResources;\nimport org."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLFunctionControllerTest.java",
"chars": 1843,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\nim"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerJoinControllerTest.java",
"chars": 1833,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerJoinMultiTableControllerTest.java",
"chars": 2234,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLInnerSelfJoinControllerTest.java",
"chars": 1953,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.h"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLJsonFileCreateControllerTest.java",
"chars": 5481,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.TestWithResources;\nimport org."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLProcedureControllerTest.java",
"chars": 5615,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\nim"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLRSqlOperatorReadControllerTest.java",
"chars": 20312,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport io.hosuaby.inject.resources.junit.jupiter.TestWithResources;\nimport org."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLReadControllerDefaultFetchLimitTest.java",
"chars": 1351,
"preview": "package com.homihq.db2rest.rest.mssql;\n\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\ni"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLReadControllerTest.java",
"chars": 6541,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport org.junit.jupiter.api.DisplayName;\nimport org.junit.jupiter.api.Order;\nim"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mssql/MsSQLUpdateControllerTest.java",
"chars": 4005,
"preview": "package com.homihq.db2rest.rest.mssql;\n\nimport io.hosuaby.inject.resources.junit.jupiter.GivenJsonResource;\nimport io.ho"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/CountTwoTablesSameNameDiffSchemaTest.java",
"chars": 1925,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/CreateTwoTablesSameNameDiffSchemaTest.java",
"chars": 3091,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/DeleteTwoTablesSameNameDiffSchemaTest.java",
"chars": 2064,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLBasicJoinControllerTest.java",
"chars": 4390,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLBulkCreateControllerTest.java",
"chars": 7342,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCountControllerTest.java",
"chars": 1141,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCreateControllerTest.java",
"chars": 10708,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLCrossJoinControllerTest.java",
"chars": 3719,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDateTimeAllTest.java",
"chars": 8152,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDeleteAllTest.java",
"chars": 1613,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.hamcrest.Matchers"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLDeleteControllerTest.java",
"chars": 3214,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLFunctionControllerTest.java",
"chars": 2769,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerJoinControllerTest.java",
"chars": 2489,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerJoinMultiTableControllerTest.java",
"chars": 2672,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLInnerSelfJoinControllerTest.java",
"chars": 2644,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLJsonFileCreateControllerTest.java",
"chars": 5244,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport io.hosuaby.inject.re"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLProcedureControllerTest.java",
"chars": 2794,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLRSqlOperatorReadControllerTest.java",
"chars": 20434,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport io.hosuaby.inject.r"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLReadControllerDefaultFetchLimitTest.java",
"chars": 1595,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLReadControllerTest.java",
"chars": 3877,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLTemplateControllerTest.java",
"chars": 7857,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/MySQLUpdateControllerTest.java",
"chars": 4510,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/ReadTwoTablesSameNameDiffSchemaTest.java",
"chars": 2271,
"preview": "package com.homihq.db2rest.rest.mysql;\n\nimport com.homihq.db2rest.MySQLBaseIntegrationTest;\nimport org.junit.jupiter.api"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/mysql/UpdateTwoTablesSameNameDiffSchemaTest.java",
"chars": 2860,
"preview": "package com.homihq.db2rest.rest.mysql;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackso"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleBasicJoinControllerTest.java",
"chars": 4408,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleBulkCreateControllerTest.java",
"chars": 7539,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCountControllerTest.java",
"chars": 1146,
"preview": "package com.homihq.db2rest.rest.oracle;\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCreateControllerTest.java",
"chars": 10955,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleCrossJoinControllerTest.java",
"chars": 3865,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDateTimeAllTest.java",
"chars": 8535,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDeleteAllTest.java",
"chars": 1611,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.hamcrest.Match"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleDeleteControllerTest.java",
"chars": 3352,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerJoinControllerTest.java",
"chars": 2634,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerJoinMultiTableControllerTest.java",
"chars": 2818,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleInnerSelfJoinControllerTest.java",
"chars": 2705,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleJsonFileCreateControllerTest.java",
"chars": 5319,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport io.hosuaby.inject."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleProcedureControllerTest.java",
"chars": 2927,
"preview": "package com.homihq.db2rest.rest.oracle;\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleRSqlOperatorReadControllerTest.java",
"chars": 20343,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport io.hosuaby.inject"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleReadControllerDefaultFetchLimitTest.java",
"chars": 1557,
"preview": "package com.homihq.db2rest.rest.oracle;\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleReadControllerTest.java",
"chars": 3879,
"preview": "package com.homihq.db2rest.rest.oracle;\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleTemplateControllerTest.java",
"chars": 7838,
"preview": "package com.homihq.db2rest.rest.oracle;\n\nimport com.homihq.db2rest.OracleBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/oracle/OracleUpdateControllerTest.java",
"chars": 4599,
"preview": "package com.homihq.db2rest.rest.oracle;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jacks"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PGDateTimeAllTest.java",
"chars": 8121,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgBasicJoinControllerTest.java",
"chars": 4337,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgBulkCreateControllerTest.java",
"chars": 6978,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.da"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCountControllerTest.java",
"chars": 1242,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport io.hosuaby.inject."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCreateControllerTest.java",
"chars": 10488,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgCrossJoinControllerTest.java",
"chars": 3806,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgDeleteAllTest.java",
"chars": 1619,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport org.hamcrest.Match"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgDeleteControllerTest.java",
"chars": 3289,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport org.hamcrest.Matche"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgExtraFunctionControllerTest.java",
"chars": 7040,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgFunctionControllerTest.java",
"chars": 2973,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerJoinControllerTest.java",
"chars": 2491,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerJoinMultiTableControllerTest.java",
"chars": 2674,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.d"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgInnerSelfJoinControllerTest.java",
"chars": 2646,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.da"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgJsonFileCreateControllerTest.java",
"chars": 5277,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport io.hosuaby.inject."
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgMultiTenancyTest.java",
"chars": 6948,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport static com.homihq.db2rest.rest.RdbmsRestApi.VERSION;\nimport static org.hamcr"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgProcedureControllerTest.java",
"chars": 2990,
"preview": "package com.homihq.db2rest.rest.pg;\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport org.junit.jupiter.a"
},
{
"path": "db2rest-api/api-rest/src/test/java/com/homihq/db2rest/rest/pg/PgRSqlOperatorReadControllerTest.java",
"chars": 20323,
"preview": "package com.homihq.db2rest.rest.pg;\n\n\nimport com.homihq.db2rest.PostgreSQLBaseIntegrationTest;\nimport io.hosuaby.inject."
}
]
// ... and 356 more files (download for full content)
About this extraction
This page contains the full source code of the 9tigerio/db2rest GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 556 files (8.0 MB), approximately 2.1M tokens, and a symbol index with 1823 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.