fix(vastbase): preserve schema for result inserts
This commit is contained in:
22 files changed
+291
-30
No files matched your search
@@ -160,14 +160,17 @@ export async function loadTableMetadata(request: TableMetadataRequest): Promise<
|
||||
scope,
|
||||
async () => {
|
||||
// Column discovery can be especially slow on Oracle. Start row-identity
|
||||
// discovery independently so query preflight can reuse it without waiting.
|
||||
// discovery independently unless an unqualified Vastbase relation must
|
||||
// first report its visible schema for the index lookup.
|
||||
const resolveVastbaseSchema = request.databaseType === "vastbase" && !request.schema;
|
||||
const columnsPromise = api.getColumns(request.connectionId, request.database, request.schema ?? "", request.tableName, request.catalog);
|
||||
const indexesPromise = loadTableIndexes(request).catch((): IndexInfo[] => []);
|
||||
const indexesPromise = resolveVastbaseSchema ? undefined : loadTableIndexes(request).catch((): IndexInfo[] => []);
|
||||
const columns = await columnsPromise;
|
||||
const indexes = columns.length > 0 ? await indexesPromise : [];
|
||||
const resolvedSchema = resolveVastbaseSchema ? columns.find((column) => column.resolved_schema)?.resolved_schema : request.schema;
|
||||
const indexes = columns.length > 0 ? await (indexesPromise ?? loadTableIndexes({ ...request, schema: resolvedSchema }).catch((): IndexInfo[] => [])) : [];
|
||||
const primaryKeys = editableRowIdentifierColumns(request.databaseType as DatabaseType, columns, indexes, request.tableType);
|
||||
return {
|
||||
schema: request.schema || undefined,
|
||||
schema: resolvedSchema || undefined,
|
||||
tableName: request.tableName,
|
||||
tableType: request.tableType,
|
||||
catalog: request.catalog,
|
||||
|
||||
@@ -3487,7 +3487,11 @@ export const useQueryStore = defineStore("query", () => {
|
||||
// Oracle-family connection databases are service names, not schemas. When
|
||||
// the query does not qualify a schema, let the driver resolve the current
|
||||
// login user's schema instead of looking up metadata under the service name.
|
||||
const resolvedSchema = (dbType === "sqlserver" && !source.schema) || (ORACLE_LIKE_METADATA_TYPES.has(dbType) && !schema) ? "" : metadataSchemaForConnection(conn, metadataDatabase, schema || undefined);
|
||||
// An unqualified Vastbase query runs in the connection's current
|
||||
// search_path. Do not reinterpret the selected database as a schema; the
|
||||
// agent resolves the visible relation's actual namespace with the columns.
|
||||
const useCurrentVastbaseSchema = dbType === "vastbase" && !source.schema && !tab.schema;
|
||||
const resolvedSchema = (dbType === "sqlserver" && !source.schema) || (ORACLE_LIKE_METADATA_TYPES.has(dbType) && !schema) || useCurrentVastbaseSchema ? "" : metadataSchemaForConnection(conn, metadataDatabase, schema || undefined);
|
||||
const metadataSchema = normalizeUppercaseFoldedMetadataIdentifier(dbType, resolvedSchema || undefined, source.schema ? source.schemaQuoted : false) || "";
|
||||
const metadataTableName = normalizeUppercaseFoldedMetadataIdentifier(dbType, source.tableName, source.tableNameQuoted)!;
|
||||
const metadataCatalog = normalizeUppercaseFoldedMetadataIdentifier(dbType, source.catalog, source.catalogQuoted);
|
||||
@@ -3519,13 +3523,14 @@ export const useQueryStore = defineStore("query", () => {
|
||||
}
|
||||
|
||||
function loadedEditableSourceFromMetadata(target: EditableSourceMetadataTarget, metadata: Awaited<ReturnType<typeof loadTableMetadata>>["metadata"]): LoadedEditableSource {
|
||||
const writeSchema = target.request.databaseType === "vastbase" && !target.writeSchema ? metadata.schema : target.writeSchema;
|
||||
return {
|
||||
source: target.source,
|
||||
analysis: target.analysis,
|
||||
tableMeta: {
|
||||
catalog: target.request.catalog,
|
||||
database: target.request.database,
|
||||
schema: target.writeSchema,
|
||||
schema: writeSchema,
|
||||
tableName: target.request.tableName,
|
||||
tableType: metadata.tableType,
|
||||
columns: metadata.columns,
|
||||
|
||||
@@ -537,6 +537,7 @@ export interface CustomTypeDetails {
|
||||
export interface ColumnInfo {
|
||||
name: string;
|
||||
data_type: string;
|
||||
resolved_schema?: string;
|
||||
is_nullable: boolean;
|
||||
column_default: string | null;
|
||||
is_primary_key: boolean;
|
||||
|
||||
Reference in new issue
Block a user