Skip to content

Latest commit

 

History

History
53 lines (46 loc) · 1.52 KB

README.md

File metadata and controls

53 lines (46 loc) · 1.52 KB

sql-calculator

这是一个基于 TiDB MySQL 语法解析器的一个工具集,目前提供以下功能

  1. SQL 指纹
  2. 数据库库表对比: 对比两个数据库的库表差异,并生成源库到目标库对应的差异( DDL) 语句

编译

git clone https://github.com/sjjian/sql-calculator
cd sql-calculator
go build -mod vendor

SQL 指纹

指定 SQL 生成 SQL 指纹,支持子查询

1. 使用方式

>> ./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

2. 与 SOAR 对比

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) 这个库是基于字符串匹配,无法处理子查询的情况。相比来说基于词法解析的方式实现能够支持更复杂的语句。

数据库库表对比

1. 支持

  • 表:增,删
  • 字段: 增,删,改

virtual db

模拟数据库的 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));
*/