Skip to content

Commit f9471e2

Browse files
joshhk72anneebpaulambro
authored
[VET-4456] Add DS table endpoints (#307)
* add endpoint * add fake tests --------- Co-authored-by: Annee Barrett <annee.barrett@stardog.com> Co-authored-by: paulambro <99209514+paulambro@users.noreply.github.com>
1 parent 6916961 commit f9471e2

6 files changed

Lines changed: 229 additions & 0 deletions

File tree

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2383,6 +2383,34 @@ Expects the following parameters:
23832383

23842384
Returns [`Promise<HTTP.Body>`](#body)
23852385

2386+
#### <a name="gettables">`dataSources.getTables(conn, name, options)`</a>
2387+
2388+
Retrieve tables
2389+
2390+
Expects the following parameters:
2391+
2392+
- conn ([`Connection`](#connection))
2393+
2394+
- name (`string`)
2395+
2396+
- options (`object`)
2397+
2398+
Returns [`Promise<HTTP.Body>`](#body)
2399+
2400+
#### <a name="gettablemetadata">`dataSources.getTableMetadata(conn, name, options)`</a>
2401+
2402+
Retrieve the named table metadata
2403+
2404+
Expects the following parameters:
2405+
2406+
- conn ([`Connection`](#connection))
2407+
2408+
- name (`string`)
2409+
2410+
- options (`object`)
2411+
2412+
Returns [`Promise<HTTP.Body>`](#body)
2413+
23862414
#### <a name="datasourcequery">DataSourceQuery</a>
23872415

23882416
One of the following values:

lib/dataSources.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,38 @@ const getMetadata = (conn, name, opts = {}) => {
110110
}).then(httpBody);
111111
};
112112

113+
const getTableMetadata = (conn, dsName, opts) => {
114+
const headers = conn.headers();
115+
headers.set('Accept', opts.accept || 'text/turtle');
116+
headers.set('Content-Type', 'application/json');
117+
const body = {
118+
table_name: opts.table_name,
119+
table_type: opts.table_type,
120+
};
121+
if (opts.catalog) {
122+
body.catalog = opts.catalog;
123+
}
124+
if (opts.schema) {
125+
body.schema = opts.schema;
126+
}
127+
128+
return fetch(
129+
conn.request('admin', 'data_sources', dsName, 'table_metadata'),
130+
{
131+
method: 'POST',
132+
body: JSON.stringify(body),
133+
headers,
134+
}
135+
).then(httpBody);
136+
};
137+
138+
const getTables = (conn, name) => {
139+
const headers = conn.headers();
140+
return fetch(conn.request('admin', 'data_sources', name, 'tables'), {
141+
headers,
142+
}).then(httpBody);
143+
};
144+
113145
const updateMetadata = (conn, name, metadata, opts = {}) => {
114146
const headers = conn.headers();
115147
headers.set('Content-Type', opts.contentType || 'text/turtle');
@@ -197,6 +229,8 @@ module.exports = {
197229
add,
198230
available,
199231
getMetadata,
232+
getTableMetadata,
233+
getTables,
200234
info,
201235
list,
202236
listInfo,

lib/index.d.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,6 +1537,24 @@ declare namespace Stardog {
15371537
*/
15381538
function updateMetadata<T>(conn: Connection, name: string, metadata: T, options?: object): Promise<HTTP.Body>;
15391539

1540+
/**
1541+
* Retrieve tables
1542+
*
1543+
* @param {Connection} conn the Stardog server connection
1544+
* @param {string} name the data source name
1545+
* @param {object} options additional options if needed
1546+
*/
1547+
function getTables(conn: Connection, name: string, options: object): Promise<HTTP.Body>;
1548+
1549+
/**
1550+
* Retrieve the named table metadata
1551+
*
1552+
* @param {Connection} conn the Stardog server connection
1553+
* @param {string} name the table name
1554+
* @param {object} options additional options if needed
1555+
*/
1556+
function getTableMetadata(conn: Connection, name: string, options: object): Promise<HTTP.Body>;
1557+
15401558
type DataSourceQuery = string | { query: string, options: object };
15411559

15421560
/**

test/dataSources.spec.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ const dataSourceMetadata = fs.readFileSync(
1010
'utf8'
1111
);
1212

13+
const dataSourceTables = fs.readFileSync(
14+
path.resolve(`${__dirname}/fixtures/data_source_tables.json`),
15+
'utf8'
16+
);
17+
18+
const dataSourceTableMetadata = fs.readFileSync(
19+
path.resolve(`${__dirname}/fixtures/data_source_table_metadata.ttl`),
20+
'utf8'
21+
);
22+
1323
describe('data_sources', () => {
1424
let conn;
1525
const aDSName = 'MyDataSource';
@@ -142,6 +152,33 @@ describe('data_sources', () => {
142152
}));
143153
});
144154

155+
describe('getTables', () => {
156+
it('returns the tables for a data source', () =>
157+
assureExists()
158+
.then(() => dataSources.getTables(conn, aDSName))
159+
.then(res => {
160+
expect(res.status).toBe(200);
161+
expect(res.body).toEqual(dataSourceTables);
162+
}));
163+
});
164+
165+
describe('getTableMetadata', () => {
166+
it('returns the metadata of a table', () =>
167+
assureExists()
168+
.then(() =>
169+
dataSources.getTableMetadata(conn, aDSName, {
170+
table_name: 'table-name',
171+
table_type: 'TABLE',
172+
catalog: 'catalog',
173+
schema: 'schema',
174+
})
175+
)
176+
.then(res => {
177+
expect(res.status).toBe(200);
178+
expect(res.body).toEqual(dataSourceTableMetadata);
179+
}));
180+
});
181+
145182
describe('updateMetadata', () => {
146183
it('updates the metadata of a data source', () =>
147184
assureExists()
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
@prefix tbl: <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/table/> .
2+
@prefix sqlcase: <http://system.stardog.com/registry/vegaSqlDialect/casing/> .
3+
@prefix sdialect: <http://system.stardog.com/registry/vegaSqlDialect/> .
4+
@prefix : <http://api.stardog.com/> .
5+
@prefix tbldef: <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/table#> .
6+
@prefix jdbcmd: <http://system.stardog.com/registry/jdbcDataSourceMetadata/> .
7+
@prefix dc: <http://purl.org/dc/elements/1.1/> .
8+
@prefix ds: <http://system.stardog.com/registry/dataSource/> .
9+
@prefix prov: <http://www.w3.org/ns/prov#> .
10+
@prefix coldef: <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/column#> .
11+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
12+
@prefix swrl: <http://www.w3.org/2003/11/swrl#> .
13+
@prefix sh: <http://www.w3.org/ns/shacl#> .
14+
@prefix qt: <http://system.stardog.com/registry/jdbcDataSource/table/> .
15+
@prefix jdbcds: <http://system.stardog.com/registry/jdbcDataSource/> .
16+
@prefix stardog: <tag:stardog:api:> .
17+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
18+
@prefix md: <http://system.stardog.com/registry/metadata/> .
19+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
20+
@prefix swrlb: <http://www.w3.org/2003/11/swrlb#> .
21+
@prefix so: <https://schema.org/> .
22+
@prefix col: <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/column/> .
23+
@prefix sqldbprd: <http://system.stardog.com/registry/vegaSqlDialect/databaseProduct/> .
24+
@prefix qtdef: <http://system.stardog.com/registry/jdbcDataSource/table/table#> .
25+
@prefix sqlnullc: <http://system.stardog.com/registry/vegaSqlDialect/nullCollation/> .
26+
@prefix tblmd: <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/> .
27+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
28+
@prefix tbltype: <http://system.stardog.com/registry/jdbcDataSource/table/tableType/> .
29+
@prefix sqldb: <http://system.stardog.com/registry/vegaSqlDialect/db/> .
30+
@prefix dialect: <http://system.stardog.com/registry/dataSource/dialect/> .
31+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
32+
@prefix reg: <http://system.stardog.com/registry/> .
33+
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
34+
35+
36+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnDataType "12"^^xsd:int .
37+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:primaryKey "0"^^xsd:int .
38+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnDecimalDigits "6"^^xsd:int .
39+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1> tblmd:indexedColumn <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1-0> .
40+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:column coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 .
41+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnDecimalDigits "0"^^xsd:int .
42+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnName "last_update" ;
43+
col:columnTypeString "timestamp" .
44+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/uniqueKeySet/#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> col:uniqueKey "0"^^xsd:int .
45+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 col:columnTypeString "varchar" .
46+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor col:uniqueKeySet <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/uniqueKeySet/#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> ;
47+
tblmd:rowCount 2.0E2 .
48+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnNullability false .
49+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0-0> tblmd:indexOrdinalPosition "0"^^xsd:int .
50+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnOrdinalPosition "4"^^xsd:int .
51+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0-0> tblmd:indexCardinality 2.0E2 .
52+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1> tblmd:isUnique false .
53+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnSize "10"^^xsd:int .
54+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:column coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 .
55+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnDecimalDigits "0"^^xsd:int .
56+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> tblmd:isUnique true ;
57+
tblmd:indexName "actor_pkey" .
58+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnSize "29"^^xsd:int .
59+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnOrdinalPosition "2"^^xsd:int .
60+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:hasIndex <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> ;
61+
qt:tableType tbltype:TABLE ;
62+
qt:tableName "actor" .
63+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 col:columnNullability false ;
64+
col:columnName "last_name" .
65+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C4 col:columnDataType "93"^^xsd:int .
66+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:column coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 .
67+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0-0> tblmd:indexColumnId "0"^^xsd:int .
68+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor qt:schema "public" .
69+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnName "actor_id" .
70+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1> tblmd:indexType "3" .
71+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnName "first_name" ;
72+
col:columnSize "45"^^xsd:int .
73+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:hasIndex <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1> .
74+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnNullability false .
75+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1> tblmd:indexName "idx_actor_last_name" .
76+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1-0> tblmd:indexColumnId "2"^^xsd:int .
77+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 col:columnOrdinalPosition "3"^^xsd:int .
78+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnTypeString "serial" ;
79+
col:columnDataType "4"^^xsd:int .
80+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 col:columnDataType "12"^^xsd:int ;
81+
col:columnDecimalDigits "0"^^xsd:int .
82+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:column coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 .
83+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> tblmd:indexedColumn <http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0-0> .
84+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor qt:catalog "dvdrental" .
85+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C2 col:columnTypeString "varchar" .
86+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/index#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C0> tblmd:indexType "3" .
87+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C3 col:columnSize "45"^^xsd:int .
88+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1-0> tblmd:indexOrdinalPosition "0"^^xsd:int .
89+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnOrdinalPosition "1"^^xsd:int .
90+
<http://system.stardog.com/registry/jdbcDataSource/tableMetadata/indexedColumn#aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1-0> tblmd:indexCardinality 2.0E2 .
91+
tbldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor tblmd:dataSourceName "aaatest" .
92+
coldef:aaatest%5CTABLE%5Cdvdrental%5Cpublic%5Cactor%5C1 col:columnNullability false .
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[
2+
{
3+
"catalog": "dvdrental",
4+
"schema": "public",
5+
"table_name": "actor",
6+
"table_type": "TABLE"
7+
},
8+
{
9+
"catalog": "dvdrental",
10+
"schema": "public",
11+
"table_name": "actor_actor_id_seq",
12+
"table_type": "SEQUENCE"
13+
},
14+
{
15+
"catalog": "dvdrental",
16+
"schema": "public",
17+
"table_name": "actor_info",
18+
"table_type": "VIEW"
19+
},
20+
]

0 commit comments

Comments
 (0)