这是一个基于 TiDB MySQL 语法解析器的一个工具集,目前提供以下功能
- SQL 指纹
- 数据库库表对比: 对比两个数据库的库表差异,并生成源库到目标库对应的差异( DDL) 语句
git clone https://github.com/sjjian/sql-calculator
cd sql-calculator
go build -mod vendor
指定 SQL 生成 SQL 指纹,支持子查询
>> ./sql-calculator fp --help
SQL Fingerprint - Replace all expression value of the SQL with ?
Usage:
fp [SQL content](string) [flags]
Examples:
./sql-calculator fp "update tb1 set a = "2" where a = "3" and b = 4
Output:
UPDATE `tb1` SET `a`=? WHERE `a`=? AND `b`=?
Flags:
-h, --help help for fp
SOAR(https://github.com/XiaoMi/soar/blob/dev/cmd/soar/soar.go) 使用的是 percona 的 fingerprint (https://github.com/percona/go-mysql/blob/master/query/query.go#L151) 这个库是基于字符串匹配,无法处理子查询的情况。相比来说基于词法解析的方式实现能够支持更复杂的语句。
- 表:增,删
- 字段: 增,删,改
模拟数据库的 ddl 执行得到数据库结构
vb := NewVirtualDB("")
vb.ExecSQL("create database db1")
vb.ExecSQL("use db1")
vb.ExecSQL("create table t1(id int)")
vb.ExecSQL("alter table db1.t1 add column name varchar(255);")
vb.Text()
/*
output:
CREATE DATABASE `db1`;
CREATE TABLE `db1`.`t1` (`id` INT,`name` VARCHAR(255));
*/