@supercat1337/mysql-schema-parser
v1.2.1
Published
A library for parsing and working with MySQL database schema metadata.
Maintainers
Readme
@supercat1337/mysql-schema-parser
A library for parsing and working with MySQL database schema metadata.
Installation
npm install @supercat1337/mysql-schema-parserUsage
import fs from 'node:fs';
import path from 'node:path';
import * as url from 'url';
import { parseMySQLSchema } from '@supercat1337/mysql-schema-parser';
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
// Parse schema from JSON file
const db = parseMySQLSchema(
JSON.parse(fs.readFileSync(path.join(__dirname, 'data.json'), 'utf-8'))
);
console.log(db);API Reference
Main Functions
parseMySQLSchema(schema: ColumnMetadataRaw[]): MySQLDatabase
Parses MySQL schema metadata into a structured MySQLDatabase object.
enrichWithStatistics(db: MySQLDatabase, indexes: IndexStatisticsRaw[]): void
Adds index statistics (from INFORMATION_SCHEMA.STATISTICS) to an existing MySQLDatabase object.
Enables advanced index analysis and improved CREATE TABLE generation (composite keys, FULLTEXT, SPATIAL, etc.).
Classes
MySQLDatabase
- ... (existing methods)
loadIndexStatistics(indexesStats: IndexStatisticsRaw[]): void– internal, used byenrichWithStatistics.
MySQLTable
- ... (existing methods)
addIndexStatistics(idxRaw: IndexStatisticsRaw): void– adds index info.getIndexes(): Map<string, IndexStatistics[]>– returns all indexes.getIndex(indexName: string): IndexStatistics[] | null– returns index columns.getIndexCardinality(indexName: string): number | null– returns cardinality.getPrimaryKey(): string[] | null– returns an array of primary key column names (ordered) or null if none.
MySQLTableColumn
- ... (unchanged)
Types
IndexStatisticsRaw– raw index metadata fromINFORMATION_SCHEMA.STATISTICS.IndexStatistics– normalized camelCase version.
Example with Statistics
import { parseMySQLSchema, enrichWithStatistics } from '@supercat1337/mysql-schema-parser';
const columns = await db.query(
`SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'mydb'`
);
const dbSchema = parseMySQLSchema(columns);
const indexes = await db.query(
`SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'mydb'`
);
enrichWithStatistics(dbSchema, indexes);
const usersTable = dbSchema.tables.get('users');
console.log(usersTable.getPrimaryKey()); // '["id"]'
console.log(usersTable.getIndexCardinality('idx_email')); // e.g. 15234
// Generate CREATE TABLE with composite indexes and special types
console.log(usersTable.generateCreateTableQuery());Features
- Parse raw MySQL schema metadata into structured objects
- Generate CREATE TABLE statements from metadata
- Type-safe access to database schema information
- Comprehensive column metadata representation
- Helper methods for common column checks (PK, nullable, etc.)
License
MIT
