Skip to content

rashiq/mysql-digest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mysql-digest

A library for computing MySQL query digests, matching the one in MySQL's Performance Schema.

It reimplements MySQL's sql lexer to accurately normalize queries.

Installation

Library

go get github.com/rashiq/mysql-digest

CLI

go install github.com/rashiq/mysql-digest/cmd/mysql-digest@latest

Usage

Library

package main

import (
    "fmt"
    "log"
    digest "github.com/rashiq/mysql-digest"
)

func main() {
    result, _ := digest.Compute("SELECT * FROM users WHERE id = 123")
    fmt.Println(result.Hash) // SHA-256 hash
    fmt.Println(result.Text) // SELECT * FROM `users` WHERE `id` = ?

    // With options
    result, _ = digest.Compute("SELECT * FROM users WHERE id = 123", digest.Options{
        Version: digest.MySQL57, // Produces MD5 hash
        SQLMode: digest.MODE_ANSI_QUOTES,
    })

    d := digest.NewDigester(digest.Options{Version: digest.MySQL84})
    d.Digest("SELECT * FROM t WHERE id = 1")
}

CLI

mysql-digest "SELECT * FROM users WHERE id = 123"

# From file
mysql-digest -f query.sql

# From stdin
echo "SELECT * FROM users WHERE id = 123" | mysql-digest

# Output formats
mysql-digest "SELECT 1" --json
mysql-digest "SELECT 1" --hash-only
mysql-digest "SELECT 1" --text-only

Example output:

DIGEST: 840a880ebd1642e8a0c4926cfbaf7d4da9616b03025a080fafd43a732800fab5
DIGEST_TEXT: SELECT * FROM `users` WHERE `id` = ?

License

MIT License - see LICENSE file.

About

Creates digests exactly like mysql's performance_schema

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages