mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
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:
co-authored by
Mikhailov Grigorii
EvgeniaBzzz
parent
584dd1ce4f
commit
a3bdfb68fe
@@ -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;
|
||||
+7
-4
@@ -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) {
|
||||
|
||||
+7
-1
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user