mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-21 04:52:23 +00:00
fix(dameng): expose sequences and packages
This commit is contained in:
@@ -406,7 +406,10 @@ public final class DamengAgent extends AbstractJdbcAgent {
|
||||
private static boolean includesSupportedObjectTypes(MetadataListConstraints constraints) {
|
||||
return constraints.includesTableLikeTypes()
|
||||
|| constraints.objectTypeAllowed("PROCEDURE")
|
||||
|| constraints.objectTypeAllowed("FUNCTION");
|
||||
|| constraints.objectTypeAllowed("FUNCTION")
|
||||
|| constraints.objectTypeAllowed("SEQUENCE")
|
||||
|| constraints.objectTypeAllowed("PACKAGE")
|
||||
|| constraints.objectTypeAllowed("PACKAGE_BODY");
|
||||
}
|
||||
|
||||
private static void appendDamengObjectTypePredicate(
|
||||
@@ -448,6 +451,15 @@ public final class DamengAgent extends AbstractJdbcAgent {
|
||||
if (constraints.objectTypeAllowed("FUNCTION")) {
|
||||
result.add("FUNCTION");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("SEQUENCE")) {
|
||||
result.add("SEQUENCE");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("PACKAGE")) {
|
||||
result.add("PACKAGE");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("PACKAGE_BODY")) {
|
||||
result.add("PACKAGE BODY");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -473,6 +485,15 @@ public final class DamengAgent extends AbstractJdbcAgent {
|
||||
if (constraints.objectTypeAllowed("FUNCTION")) {
|
||||
result.add("FUNCTION");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("SEQUENCE")) {
|
||||
result.add("SEQUENCE");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("PACKAGE")) {
|
||||
result.add("PACKAGE");
|
||||
}
|
||||
if (constraints.objectTypeAllowed("PACKAGE_BODY")) {
|
||||
result.add("PACKAGE BODY");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -763,6 +784,9 @@ public final class DamengAgent extends AbstractJdbcAgent {
|
||||
case "MATERIALIZED_VIEW", "MATERIALIZED VIEW" -> "MATERIALIZED_VIEW";
|
||||
case "PROCEDURE" -> "PROCEDURE";
|
||||
case "FUNCTION" -> "FUNCTION";
|
||||
case "SEQUENCE" -> "SEQUENCE";
|
||||
case "PACKAGE" -> "PKG_SPEC";
|
||||
case "PACKAGE_BODY", "PACKAGE BODY" -> "PKG_BODY";
|
||||
// DM DBMS_METADATA accepts TRIGGER directly and returns executable CREATE OR REPLACE DDL.
|
||||
case "TRIGGER" -> "TRIGGER";
|
||||
default -> throw new IllegalArgumentException("Unsupported object type: " + objectType);
|
||||
|
||||
@@ -196,6 +196,26 @@ class DamengAgentMetadataTest {
|
||||
Assertions.assertEquals("用户示例表", objects.get(0).getComment());
|
||||
}
|
||||
|
||||
@Test
|
||||
void queriesSequencesAndPackagesWhenRequested() {
|
||||
DamengAgent agent = new DamengAgent();
|
||||
TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection());
|
||||
|
||||
agent.listObjects(
|
||||
"APP",
|
||||
new MetadataListConstraints(null, 20, null, List.of("SEQUENCE", "PACKAGE", "PACKAGE_BODY"))
|
||||
);
|
||||
|
||||
String objectsSql = JdbcMetadataSqlFake.statements.stream()
|
||||
.filter(sql -> sql.contains("FROM ALL_OBJECTS o"))
|
||||
.findFirst()
|
||||
.orElseThrow();
|
||||
Assertions.assertTrue(objectsSql.contains("o.OBJECT_TYPE IN (?, ?, ?)"), objectsSql);
|
||||
Assertions.assertTrue(JdbcMetadataSqlFake.statements.contains("param:2=SEQUENCE"));
|
||||
Assertions.assertTrue(JdbcMetadataSqlFake.statements.contains("param:3=PACKAGE"));
|
||||
Assertions.assertTrue(JdbcMetadataSqlFake.statements.contains("param:4=PACKAGE BODY"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void fallsBackToJdbcMetadataForRestrictedSchemaObjects() {
|
||||
DamengAgent agent = new DamengAgent();
|
||||
|
||||
@@ -79,6 +79,10 @@ class DamengAgentTest extends JdbcFakeExecutionBehaviorTest {
|
||||
assertEquals("MATERIALIZED_VIEW", DamengAgent.damengDdlObjectType("MATERIALIZED_VIEW"));
|
||||
assertEquals("PROCEDURE", DamengAgent.damengDdlObjectType("PROCEDURE"));
|
||||
assertEquals("FUNCTION", DamengAgent.damengDdlObjectType("function"));
|
||||
assertEquals("SEQUENCE", DamengAgent.damengDdlObjectType("sequence"));
|
||||
assertEquals("PKG_SPEC", DamengAgent.damengDdlObjectType("package"));
|
||||
assertEquals("PKG_BODY", DamengAgent.damengDdlObjectType("package body"));
|
||||
assertEquals("PKG_BODY", DamengAgent.damengDdlObjectType("PACKAGE_BODY"));
|
||||
assertEquals("TRIGGER", DamengAgent.damengDdlObjectType("trigger"));
|
||||
assertThrows(IllegalArgumentException.class, () -> DamengAgent.damengDdlObjectType("TABLE"));
|
||||
}
|
||||
@@ -220,6 +224,29 @@ class DamengAgentTest extends JdbcFakeExecutionBehaviorTest {
|
||||
assertEquals(List.of("APP", "PROCEDURE", "FUNCTION", "%S%Y%N%C%", 20), query.args());
|
||||
}
|
||||
|
||||
@Test
|
||||
void constrainedObjectQueryIncludesSequencesAndPackages() {
|
||||
DamengAgent.MetadataQuery query = DamengAgent.buildConstrainedObjectsQuery(
|
||||
"APP",
|
||||
new MetadataListConstraints(null, 20, null, List.of("SEQUENCE", "PACKAGE", "PACKAGE_BODY"))
|
||||
);
|
||||
|
||||
assertFalse(query.sql().contains("SYS.SYSOBJECTS materialized_view"));
|
||||
assertTrue(query.sql().contains("o.OBJECT_TYPE IN (?, ?, ?)"));
|
||||
assertEquals(List.of("APP", "SEQUENCE", "PACKAGE", "PACKAGE BODY", 20), query.args());
|
||||
}
|
||||
|
||||
@Test
|
||||
void rawObjectQueryIncludesDamengPackageBodyCatalogType() {
|
||||
DamengAgent.MetadataQuery query = DamengAgent.buildRawConstrainedObjectsQuery(
|
||||
"APP",
|
||||
new MetadataListConstraints(null, null, null, List.of("SEQUENCE", "PACKAGE", "PACKAGE_BODY"))
|
||||
);
|
||||
|
||||
assertTrue(query.sql().contains("o.OBJECT_TYPE IN (?, ?, ?)"));
|
||||
assertEquals(List.of("APP", "SEQUENCE", "PACKAGE", "PACKAGE BODY"), query.args());
|
||||
}
|
||||
|
||||
@Test
|
||||
void constrainedTableQueryEscapesDamengLikeWildcardsWithSingleCharacter() {
|
||||
DamengAgent.MetadataQuery query = DamengAgent.buildConstrainedTablesQuery(
|
||||
|
||||
@@ -2,8 +2,8 @@ import { describe, expect, it } from "vitest";
|
||||
import { normalizeSidebarObjectKind, sidebarObjectKindsForDatabase } from "@/lib/database/databaseObjectCapabilities";
|
||||
|
||||
describe("databaseObjectCapabilities", () => {
|
||||
it("exposes materialized views for Dameng", () => {
|
||||
expect(sidebarObjectKindsForDatabase("dameng")).toContain("MATERIALIZED_VIEW");
|
||||
it("exposes supported programmable objects for Dameng", () => {
|
||||
expect(sidebarObjectKindsForDatabase("dameng")).toEqual(expect.arrayContaining(["MATERIALIZED_VIEW", "SEQUENCE", "PACKAGE", "PACKAGE_BODY"]));
|
||||
});
|
||||
|
||||
it("exposes synonyms for Xugu only", () => {
|
||||
|
||||
@@ -16,6 +16,7 @@ const ROUTINE_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "PROCEDURE", "FUN
|
||||
const POSTGRES_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "MATERIALIZED_VIEW", "PROCEDURE", "FUNCTION", "SEQUENCE"];
|
||||
const POSTGRES_LIKE_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "MATERIALIZED_VIEW", "PROCEDURE", "FUNCTION"];
|
||||
const ORACLE_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "MATERIALIZED_VIEW", "PROCEDURE", "FUNCTION", "PACKAGE", "PACKAGE_BODY"];
|
||||
const DAMENG_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "MATERIALIZED_VIEW", "PROCEDURE", "FUNCTION", "SEQUENCE", "PACKAGE", "PACKAGE_BODY"];
|
||||
const XUGU_OBJECTS: SidebarObjectKind[] = ["TABLE", "VIEW", "PROCEDURE", "FUNCTION", "TRIGGER", "SEQUENCE", "SYNONYM", "PACKAGE", "PACKAGE_BODY", "TYPE", "TYPE_BODY"];
|
||||
|
||||
const DATABASE_TYPE_OBJECTS = new Map<DatabaseType, SidebarObjectKind[]>([
|
||||
@@ -32,7 +33,7 @@ const DATABASE_TYPE_OBJECTS = new Map<DatabaseType, SidebarObjectKind[]>([
|
||||
["redshift", POSTGRES_LIKE_OBJECTS],
|
||||
// oracle
|
||||
["oracle", ORACLE_OBJECTS],
|
||||
["dameng", ORACLE_OBJECTS],
|
||||
["dameng", DAMENG_OBJECTS],
|
||||
["oceanbase-oracle", ORACLE_OBJECTS],
|
||||
["xugu", XUGU_OBJECTS],
|
||||
// table and view
|
||||
|
||||
Reference in New Issue
Block a user