feat: metona-sqlark v0.1.12 — 前端TypeScript关系型数据库

- 4种存储引擎:Memory / IndexedDB / OPFS / Hybrid
- 完整SQL支持:SELECT/INSERT/UPDATE/DELETE/JOIN/GROUP BY/HAVING/DISTINCT
- Query Builder链式API + TypeScript泛型支持
- 聚合函数:COUNT/SUM/AVG/MIN/MAX
- 事务、插件系统(14 hooks)、发布订阅、数据迁移、导入导出
- React/Vue框架集成
- 264个测试用例,93.46%覆盖率
- 零运行时依赖
This commit is contained in:
thzxx
2026-07-26 15:00:01 +08:00
commit e2a590c5b1
60 changed files with 16359 additions and 0 deletions
+152
View File
@@ -0,0 +1,152 @@
/**
* metona-sqlark SQL Token Types — 词法单元定义
* @module sql/tokens
*/
// ---------------------------------------------------------------------------
// Token 类型枚举
// ---------------------------------------------------------------------------
export enum TokenType {
// 关键字
SELECT = 'SELECT',
FROM = 'FROM',
WHERE = 'WHERE',
INSERT = 'INSERT',
INTO = 'INTO',
VALUES = 'VALUES',
UPDATE = 'UPDATE',
SET = 'SET',
DELETE = 'DELETE',
CREATE = 'CREATE',
TABLE = 'TABLE',
DROP = 'DROP',
ORDER = 'ORDER',
BY = 'BY',
ASC = 'ASC',
DESC = 'DESC',
LIMIT = 'LIMIT',
OFFSET = 'OFFSET',
AND = 'AND',
OR = 'OR',
NOT = 'NOT',
LIKE = 'LIKE',
IN = 'IN',
PRIMARY = 'PRIMARY',
KEY = 'KEY',
UNIQUE = 'UNIQUE',
DEFAULT = 'DEFAULT',
NULL = 'NULL',
TRUE = 'TRUE',
FALSE = 'FALSE',
// JOIN 相关
INNER = 'INNER',
LEFT = 'LEFT',
RIGHT = 'RIGHT',
CROSS = 'CROSS',
JOIN = 'JOIN',
ON = 'ON',
AS = 'AS',
OUTER = 'OUTER',
// 聚合
GROUP = 'GROUP',
HAVING = 'HAVING',
COUNT = 'COUNT',
SUM = 'SUM',
AVG = 'AVG',
MIN = 'MIN',
MAX = 'MAX',
DISTINCT = 'DISTINCT',
// 标识符 & 字面量
IDENTIFIER = 'IDENTIFIER',
STRING = 'STRING',
NUMBER = 'NUMBER',
// 运算符 & 分隔符
COMMA = 'COMMA',
LPAREN = 'LPAREN',
RPAREN = 'RPAREN',
SEMICOLON = 'SEMICOLON',
EQ = 'EQ',
NEQ = 'NEQ',
GT = 'GT',
GTE = 'GTE',
LT = 'LT',
LTE = 'LTE',
STAR = 'STAR',
DOT = 'DOT',
// 特殊
EOF = 'EOF',
ILLEGAL = 'ILLEGAL',
}
// ---------------------------------------------------------------------------
// Token
// ---------------------------------------------------------------------------
export interface Token {
type: TokenType;
value: string;
position: number; // 在源码中的位置
}
// ---------------------------------------------------------------------------
// 关键字映射
// ---------------------------------------------------------------------------
export const KEYWORDS: Record<string, TokenType> = {
'SELECT': TokenType.SELECT,
'FROM': TokenType.FROM,
'WHERE': TokenType.WHERE,
'INSERT': TokenType.INSERT,
'INTO': TokenType.INTO,
'VALUES': TokenType.VALUES,
'UPDATE': TokenType.UPDATE,
'SET': TokenType.SET,
'DELETE': TokenType.DELETE,
'CREATE': TokenType.CREATE,
'TABLE': TokenType.TABLE,
'DROP': TokenType.DROP,
'ORDER': TokenType.ORDER,
'BY': TokenType.BY,
'ASC': TokenType.ASC,
'DESC': TokenType.DESC,
'LIMIT': TokenType.LIMIT,
'OFFSET': TokenType.OFFSET,
'AND': TokenType.AND,
'OR': TokenType.OR,
'NOT': TokenType.NOT,
'LIKE': TokenType.LIKE,
'IN': TokenType.IN,
'PRIMARY': TokenType.PRIMARY,
'KEY': TokenType.KEY,
'UNIQUE': TokenType.UNIQUE,
'DEFAULT': TokenType.DEFAULT,
'NULL': TokenType.NULL,
'TRUE': TokenType.TRUE,
'FALSE': TokenType.FALSE,
// JOIN
'INNER': TokenType.INNER,
'LEFT': TokenType.LEFT,
'RIGHT': TokenType.RIGHT,
'CROSS': TokenType.CROSS,
'JOIN': TokenType.JOIN,
'ON': TokenType.ON,
'AS': TokenType.AS,
'OUTER': TokenType.OUTER,
// 聚合
'GROUP': TokenType.GROUP,
'HAVING': TokenType.HAVING,
'COUNT': TokenType.COUNT,
'SUM': TokenType.SUM,
'AVG': TokenType.AVG,
'MIN': TokenType.MIN,
'MAX': TokenType.MAX,
'DISTINCT': TokenType.DISTINCT,
};