CB-3778-bug-use-oracle-as-internal-db (#1920)

* CB-3778 fetch limit fix for oracle and sql server

* CB-3778 get offset limit part from sql dialect

* CB-3778 offset limit order fix

* CB-3778 schemas fix

---------

Co-authored-by: Mikhailov Grigorii <49814763+ggxed@users.noreply.github.com>
Co-authored-by: EvgeniaBzzz <139753579+EvgeniaBzzz@users.noreply.github.com>
This commit is contained in:
Ainur
2023-10-30 19:59:05 +03:00
committed by GitHub
co-authored by Mikhailov Grigorii EvgeniaBzzz
parent 584dd1ce4f
commit a3bdfb68fe
9 changed files with 22 additions and 13 deletions
@@ -308,7 +308,7 @@ CREATE TABLE {table_prefix}CB_USER_SECRETS
SECRET_LABEL VARCHAR(128),
SECRET_DESCRIPTION VARCHAR(1024),
ENCODING_TYPE VARCHAR(32) NOT NULL DEFAULT 'PLAINTEXT',
ENCODING_TYPE VARCHAR(32) DEFAULT 'PLAINTEXT' NOT NULL,
UPDATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (USER_ID, SECRET_ID),
@@ -7,7 +7,7 @@ CREATE TABLE {table_prefix}CB_USER_SECRETS
SECRET_LABEL VARCHAR(128),
SECRET_DESCRIPTION VARCHAR(1024),
UPDATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UPDATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (USER_ID, SECRET_ID),
FOREIGN KEY (USER_ID) REFERENCES {table_prefix}CB_USER (USER_ID) ON DELETE CASCADE
@@ -1,2 +1,2 @@
ALTER TABLE {table_prefix}CB_USER_SECRETS
ADD COLUMN ENCODING_TYPE VARCHAR(32) NOT NULL DEFAULT 'PLAINTEXT';
ADD COLUMN ENCODING_TYPE VARCHAR(32) DEFAULT 'PLAINTEXT' NOT NULL;
@@ -55,7 +55,7 @@ CREATE TABLE IF NOT EXISTS {table_prefix}CB_WORKSPACE(
FOREIGN KEY(INSTANCE_ID) REFERENCES {table_prefix}CB_INSTANCE(INSTANCE_ID)
);
ALTER TABLE {table_prefix}CB_USER_CREDENTIALS ADD UPDATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE {table_prefix}CB_USER_CREDENTIALS ADD UPDATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
ALTER TABLE {table_prefix}CB_SESSION ALTER COLUMN LAST_ACCESS_REMOTE_ADDRESS VARCHAR(128) NULL;
ALTER TABLE {table_prefix}CB_SESSION ALTER COLUMN LAST_ACCESS_USER_AGENT VARCHAR(255) NULL;
@@ -5,7 +5,7 @@ CREATE TABLE {table_prefix}CB_AUTH_TOKEN
USER_ID VARCHAR(128),
EXPIRATION_TIME TIMESTAMP NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (TOKEN_ID),
FOREIGN KEY (SESSION_ID) REFERENCES {table_prefix}CB_SESSION (SESSION_ID) ON DELETE CASCADE,
@@ -8,7 +8,7 @@ CREATE TABLE {table_prefix}CB_AUTH_ATTEMPT
SESSION_TYPE VARCHAR(64) NOT NULL,
APP_SESSION_STATE TEXT NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (AUTH_ID),
FOREIGN KEY (SESSION_ID) REFERENCES {table_prefix}CB_SESSION (SESSION_ID) ON DELETE CASCADE
@@ -21,7 +21,7 @@ CREATE TABLE {table_prefix}CB_AUTH_ATTEMPT_INFO
AUTH_PROVIDER_CONFIGURATION_ID VARCHAR(128),
AUTH_STATE TEXT NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (AUTH_ID, AUTH_PROVIDER_ID),
FOREIGN KEY (AUTH_ID) REFERENCES {table_prefix}CB_AUTH_ATTEMPT (AUTH_ID) ON DELETE CASCADE
@@ -2,4 +2,4 @@ ALTER TABLE {table_prefix}CB_AUTH_TOKEN
ADD REFRESH_TOKEN_ID VARCHAR(128);
ALTER TABLE {table_prefix}CB_AUTH_TOKEN
ADD REFRESH_TOKEN_EXPIRATION_TIME TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ADD REFRESH_TOKEN_EXPIRATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
@@ -375,10 +375,8 @@ public class CBEmbeddedSecurityController<T extends WebAuthApplication>
// Read users
try (PreparedStatement dbStat = dbCon.prepareStatement(
database.normalizeTableNames("SELECT USER_ID,IS_ACTIVE,DEFAULT_AUTH_ROLE FROM {table_prefix}CB_USER"
+ buildUsersFilter(filter) + "\nORDER BY USER_ID LIMIT ? OFFSET ?"))) {
+ buildUsersFilter(filter) + "\nORDER BY USER_ID " + getOffsetLimitPart(filter)))) {
int parameterIndex = setUsersFilterValues(dbStat, filter, 1);
dbStat.setInt(parameterIndex++, filter.getPage().getLimit());
dbStat.setInt(parameterIndex++, filter.getPage().getOffset());
try (ResultSet dbResult = dbStat.executeQuery()) {
while (dbResult.next()) {
@@ -424,6 +422,10 @@ public class CBEmbeddedSecurityController<T extends WebAuthApplication>
}
}
private String getOffsetLimitPart(@NotNull SMUserFilter filter) {
return database.getDialect().getOffsetLimitQueryPart(filter.getPage().getOffset(), filter.getPage().getLimit());
}
private String buildUsersFilter(SMUserFilter filter) {
StringBuilder where = new StringBuilder();
List<String> whereParts = new ArrayList<>();
@@ -2758,9 +2760,10 @@ public class CBEmbeddedSecurityController<T extends WebAuthApplication>
"WHERE EXISTS " +
"(SELECT 1 FROM {table_prefix}CB_AUTH_ATTEMPT AA " +
"LEFT JOIN {table_prefix}CB_AUTH_TOKEN CAT ON AA.SESSION_ID = CAT.SESSION_ID " +
"WHERE (CAT.REFRESH_TOKEN_EXPIRATION_TIME < NOW() OR CAT.EXPIRATION_TIME IS NULL) " +
"WHERE (CAT.REFRESH_TOKEN_EXPIRATION_TIME < ? OR CAT.EXPIRATION_TIME IS NULL) " +
"AND AA.AUTH_ID=AAI.AUTH_ID AND AUTH_STATUS='" + SMAuthStatus.EXPIRED + "') " +
"AND CREATE_TIME<?"),
Timestamp.valueOf(LocalDateTime.now()),
Timestamp.valueOf(LocalDateTime.now().minusMinutes(smConfig.getExpiredAuthAttemptInfoTtl()))
);
} catch (SQLException e) {
@@ -86,6 +86,7 @@ public class CBDatabase {
private String instanceId;
private SMAdminController adminSecurityController;
private SQLDialect dialect;
public CBDatabase(WebApplication application, CBDatabaseConfig databaseConfiguration) {
this.application = application;
@@ -178,7 +179,7 @@ public class CBDatabase {
} catch (SQLException e) {
throw new DBException("Error initializing connection pool");
}
SQLDialect dialect = driver.getScriptDialect().createInstance();
dialect = driver.getScriptDialect().createInstance();
try (Connection connection = cbDataSource.getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
@@ -540,5 +541,10 @@ public class CBDatabase {
public String normalizeTableNames(@NotNull String sql) {
return CommonUtils.normalizeTableNames(sql, databaseConfiguration.getSchema());
}
@NotNull
public SQLDialect getDialect() {
return dialect;
}
}