Public
Edited
Feb 2, 2023
1 fork
3 stars
Insert cell
Insert cell
db = new DoltDatabaseClient({
host: "https://www.dolthub.com",
owner: "dolthub",
repo: "SHAQ"
})
Insert cell
db
SELECT * FROM teams WHERE league_id IN (0, 1)
Insert cell
Insert cell
class DoltDatabaseClient {
constructor({
host = "https://www.dolthub.com",
owner, // e.g., "dolthub"
repo, // e.g., "SHAQ"
branch = "main",
origin = `${host}/api/v1alpha1/${owner}/${repo}/${branch}`
}) {
this.origin = `${origin}`;
}
async sql(strings, ...args) {
if (strings.length > 1) throw new Error("query parameters not supported");
return fetch(`${this.origin}?${new URLSearchParams({q: strings[0]})}`)
.then(response => response.json())
.then(formatResults);
}
}
Insert cell
function formatResults({query_execution_status, query_execution_message, schema, rows}) {
if (query_execution_status !== "Success") throw new Error(query_execution_message);
return Object.assign(
rows.map(row => {
for (const {columnName, columnType} of schema) {
row[columnName] = formatValue(row[columnName], columnType);
}
return row;
}),
{columns: schema.map(({columnName}) => columnName)}
);
}
Insert cell
// https://docs.dolthub.com/interfaces/sql/sql-support/data-description
function formatValue(value, type) {
switch (type) {
case "TINYINT": return value === "1"; // boolean?
case "INT": case "DOUBLE": case "FLOAT": return +value;
case "DATETIME": return new Date(value.replace(" ", "T") + "Z");
case "DATE": return new Date(value);
default: return value;
}
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more