plyql
Version:
A SQL-like interface for Plywood
185 lines (184 loc) • 5.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var plywood_1 = require("plywood");
var datasets_1 = require("./datasets");
var DB_NAME = 'plyql1';
var schemataData = [
{
"CATALOG_NAME": "def",
"SCHEMA_NAME": "information_schema",
"DEFAULT_CHARACTER_SET_NAME": "utf8",
"DEFAULT_COLLATION_NAME": "utf8_general_ci",
"SQL_PATH": null
},
{
"CATALOG_NAME": "def",
"SCHEMA_NAME": DB_NAME,
"DEFAULT_CHARACTER_SET_NAME": "utf8",
"DEFAULT_COLLATION_NAME": "utf8_general_ci",
"SQL_PATH": null
}
];
var tablesData = [
{
"TABLE_CATALOG": "def",
"TABLE_SCHEMA": "information_schema",
"TABLE_NAME": "COLUMNS",
"TABLE_TYPE": "SYSTEM VIEW",
"ENGINE": "InnoDB",
"VERSION": 10,
"ROW_FORMAT": "Dynamic",
"TABLE_ROWS": null,
"AVG_ROW_LENGTH": 0,
"DATA_LENGTH": 16384,
"MAX_DATA_LENGTH": 0,
"INDEX_LENGTH": 0,
"DATA_FREE": 141557760,
"AUTO_INCREMENT": null,
"CREATE_TIME": null,
"UPDATE_TIME": null,
"CHECK_TIME": null,
"TABLE_COLLATION": "utf8_general_ci",
"CHECKSUM": null,
"CREATE_OPTIONS": "max_rows=2789",
"TABLE_COMMENT": ''
},
{
"TABLE_CATALOG": "def",
"TABLE_SCHEMA": "information_schema",
"TABLE_NAME": "SCHEMATA",
"TABLE_TYPE": "SYSTEM VIEW",
"ENGINE": "MEMORY",
"VERSION": 10,
"ROW_FORMAT": "Fixed",
"TABLE_ROWS": null,
"AVG_ROW_LENGTH": 3464,
"DATA_LENGTH": 0,
"MAX_DATA_LENGTH": 16738048,
"INDEX_LENGTH": 0,
"DATA_FREE": 0,
"AUTO_INCREMENT": null,
"CREATE_TIME": null,
"UPDATE_TIME": null,
"CHECK_TIME": null,
"TABLE_COLLATION": "utf8_general_ci",
"CHECKSUM": null,
"CREATE_OPTIONS": "max_rows=4843",
"TABLE_COMMENT": ''
},
{
"TABLE_CATALOG": "def",
"TABLE_SCHEMA": "information_schema",
"TABLE_NAME": "TABLES",
"TABLE_TYPE": "SYSTEM VIEW",
"ENGINE": "MEMORY",
"VERSION": 10,
"ROW_FORMAT": "Fixed",
"TABLE_ROWS": null,
"AVG_ROW_LENGTH": 9441,
"DATA_LENGTH": 0,
"MAX_DATA_LENGTH": 16757775,
"INDEX_LENGTH": 0,
"DATA_FREE": 0,
"AUTO_INCREMENT": null,
"CREATE_TIME": null,
"UPDATE_TIME": null,
"CHECK_TIME": null,
"TABLE_COLLATION": "utf8_general_ci",
"CHECKSUM": null,
"CREATE_OPTIONS": "max_rows=1777",
"TABLE_COMMENT": ''
}
];
function addExternalToTables(source) {
tablesData.push({
"TABLE_CATALOG": "def",
"TABLE_SCHEMA": DB_NAME,
"TABLE_NAME": source,
"TABLE_TYPE": "BASE TABLE",
"ENGINE": "InnoDB",
"VERSION": 10,
"ROW_FORMAT": "Dynamic",
"TABLE_ROWS": 1e7,
"AVG_ROW_LENGTH": 1337,
"DATA_LENGTH": 90832896,
"MAX_DATA_LENGTH": 0,
"INDEX_LENGTH": 0,
"DATA_FREE": 6291456,
"AUTO_INCREMENT": null,
"CREATE_TIME": null,
"UPDATE_TIME": null,
"CHECK_TIME": null,
"TABLE_COLLATION": "utf8_general_ci",
"CHECKSUM": null,
"CREATE_OPTIONS": '',
"TABLE_COMMENT": ''
});
}
var columnsData = datasets_1.getData('columns');
function getDataType(type) {
switch (type) {
case 'BOOLEAN': return 'tinyint';
case 'STRING': return 'varchar';
case 'SET/STRING': return 'varchar';
case 'NUMBER': return 'double';
case 'TIME': return 'timestamp';
default: return 'varchar';
}
}
function getColumnType(type) {
switch (type) {
case 'BOOLEAN': return 'tinyint(1)';
case 'STRING': return 'varchar(255)';
case 'SET/STRING': return 'varchar(255)';
case 'NUMBER': return 'double';
case 'TIME': return 'timestamp';
default: return 'varchar(255)';
}
}
function addExternalToColumns(source, external, mysqlTypes) {
var attributes = external.attributes;
for (var i = 0; i < attributes.length; i++) {
var attribute = attributes[i];
columnsData.push({
"TABLE_CATALOG": "def",
"TABLE_SCHEMA": DB_NAME,
"TABLE_NAME": source,
"COLUMN_NAME": attribute.name,
"ORDINAL_POSITION": i + 1,
"COLUMN_DEFAULT": null,
"IS_NULLABLE": "YES",
"DATA_TYPE": mysqlTypes ? getDataType(attribute.type) : attribute.type,
"CHARACTER_MAXIMUM_LENGTH": 255,
"CHARACTER_OCTET_LENGTH": 1020,
"NUMERIC_PRECISION": null,
"NUMERIC_SCALE": null,
"DATETIME_PRECISION": null,
"CHARACTER_SET_NAME": "utf8mb4",
"COLLATION_NAME": "utf8mb4_bin",
"COLUMN_TYPE": mysqlTypes ? getColumnType(attribute.type) : attribute.type,
"COLUMN_KEY": '',
"EXTRA": '',
"PRIVILEGES": "select",
"COLUMN_COMMENT": attribute.nativeType || '',
"GENERATION_EXPRESSION": ''
});
}
}
function addExternal(source, external, mysqlTypes) {
addExternalToTables(source);
addExternalToColumns(source, external, mysqlTypes);
}
exports.addExternal = addExternal;
function getSchemataDataset() {
return plywood_1.Dataset.fromJS(schemataData);
}
exports.getSchemataDataset = getSchemataDataset;
function getTablesDataset() {
return plywood_1.Dataset.fromJS(tablesData);
}
exports.getTablesDataset = getTablesDataset;
function getColumnsDataset() {
return plywood_1.Dataset.fromJS(columnsData);
}
exports.getColumnsDataset = getColumnsDataset;