package sharding import ( "fmt" "github.com/uole/sqlparser" "testing" ) func TestFormat(t *testing.T) { t.Log(fmt.Sprintf("%.2f%%", 0.5851888*100)) } func TestSharding_Query(t *testing.T) { //sql := "SELECT COUNT(*) FROM aaa" sql := "SELECT uid,SUM(IF(direction='inbound',1,0)) AS inbound_times,SUM(IF(direction='inbound',IF(answer_duration>0,1,0),0)) AS inbound_answer_times,SUM(IF(direction='outbound',1,0)) AS outbound_times,SUM(IF(direction='outbound',IF(answer_duration>0,1,0),0)) AS outbound_answer_times FROM `cdr_logs` WHERE ((`domain` = 'test.cc.echo.me' OR `domain` = 'default') AND `name` <> '') AND (`create_stamp` BETWEEN 1712505600 AND 1712505608) AND `name` IN ('a','b','c') GROUP BY `uid` having uid != '' ORDER BY create_stamp DESC LIMIT 15" stmt, err := sqlparser.Parse(sql) if err != nil { t.Error(err) return } selectStmt, ok := stmt.(*sqlparser.Select) if !ok { t.Error("not select stmt") return } buf := sqlparser.NewTrackedBuffer(nil) sqlparser.NewTableIdent("test").Format(buf) buf.Reset() selectStmt.Format(buf) t.Log("SQL") t.Log(buf.String()) buf.Reset() t.Log("SELECT") selectStmt.SelectExprs.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("FROM") selectStmt.From.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("WHERE") selectStmt.Where.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("ORDER BY") selectStmt.OrderBy.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("GROUP BY") selectStmt.GroupBy.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("LIMIT") selectStmt.Limit.Format(buf) t.Log(buf.String()) buf.Reset() t.Log("Having") selectStmt.Having.Format(buf) t.Log(buf.String()) buf.Reset() }