Files
db/expressions_test.go
T
whatandClaude 304d553b3c docs: Add CLAUDE.md with codebase guidance
Create comprehensive documentation for future Claude Code instances working in this repository, including:
- Development commands for testing, building, and code quality
- Core architecture overview of the SQL query builder system
- Directory structure and component explanations
- Testing patterns and conventions
- Key dependencies and their purposes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:47:28 +08:00

191 lines
5.8 KiB
Go

package db_test
import (
"testing"
dbv2 "git.fsdpf.net/go/db"
"git.fsdpf.net/go/db/exp"
"github.com/stretchr/testify/suite"
)
type (
dbv2ExpressionsSuite struct {
suite.Suite
}
)
func (ges *dbv2ExpressionsSuite) TestCast() {
ges.Equal(exp.NewCastExpression(dbv2.C("test"), "string"), dbv2.Cast(dbv2.C("test"), "string"))
}
func (ges *dbv2ExpressionsSuite) TestDoNothing() {
ges.Equal(exp.NewDoNothingConflictExpression(), dbv2.DoNothing())
}
func (ges *dbv2ExpressionsSuite) TestDoUpdate() {
ges.Equal(exp.NewDoUpdateConflictExpression("test", dbv2.Record{"a": "b"}), dbv2.DoUpdate("test", dbv2.Record{"a": "b"}))
}
func (ges *dbv2ExpressionsSuite) TestOr() {
e1 := dbv2.C("a").Eq("b")
e2 := dbv2.C("b").Eq(2)
ges.Equal(exp.NewExpressionList(exp.OrType, e1, e2), dbv2.Or(e1, e2))
}
func (ges *dbv2ExpressionsSuite) TestAnd() {
e1 := dbv2.C("a").Eq("b")
e2 := dbv2.C("b").Eq(2)
ges.Equal(exp.NewExpressionList(exp.AndType, e1, e2), dbv2.And(e1, e2))
}
func (ges *dbv2ExpressionsSuite) TestFunc() {
ges.Equal(exp.NewSQLFunctionExpression("count", dbv2.L("*")), dbv2.Func("count", dbv2.L("*")))
}
func (ges *dbv2ExpressionsSuite) TestDISTINCT() {
ges.Equal(exp.NewSQLFunctionExpression("DISTINCT", dbv2.I("col")), dbv2.DISTINCT("col"))
}
func (ges *dbv2ExpressionsSuite) TestCOUNT() {
ges.Equal(exp.NewSQLFunctionExpression("COUNT", dbv2.I("col")), dbv2.COUNT("col"))
}
func (ges *dbv2ExpressionsSuite) TestMIN() {
ges.Equal(exp.NewSQLFunctionExpression("MIN", dbv2.I("col")), dbv2.MIN("col"))
}
func (ges *dbv2ExpressionsSuite) TestMAX() {
ges.Equal(exp.NewSQLFunctionExpression("MAX", dbv2.I("col")), dbv2.MAX("col"))
}
func (ges *dbv2ExpressionsSuite) TestAVG() {
ges.Equal(exp.NewSQLFunctionExpression("AVG", dbv2.I("col")), dbv2.AVG("col"))
}
func (ges *dbv2ExpressionsSuite) TestFIRST() {
ges.Equal(exp.NewSQLFunctionExpression("FIRST", dbv2.I("col")), dbv2.FIRST("col"))
}
func (ges *dbv2ExpressionsSuite) TestLAST() {
ges.Equal(exp.NewSQLFunctionExpression("LAST", dbv2.I("col")), dbv2.LAST("col"))
}
func (ges *dbv2ExpressionsSuite) TestSUM() {
ges.Equal(exp.NewSQLFunctionExpression("SUM", dbv2.I("col")), dbv2.SUM("col"))
}
func (ges *dbv2ExpressionsSuite) TestCOALESCE() {
ges.Equal(exp.NewSQLFunctionExpression("COALESCE", dbv2.I("col"), nil), dbv2.COALESCE(dbv2.I("col"), nil))
}
func (ges *dbv2ExpressionsSuite) TestROW_NUMBER() {
ges.Equal(exp.NewSQLFunctionExpression("ROW_NUMBER"), dbv2.ROW_NUMBER())
}
func (ges *dbv2ExpressionsSuite) TestRANK() {
ges.Equal(exp.NewSQLFunctionExpression("RANK"), dbv2.RANK())
}
func (ges *dbv2ExpressionsSuite) TestDENSE_RANK() {
ges.Equal(exp.NewSQLFunctionExpression("DENSE_RANK"), dbv2.DENSE_RANK())
}
func (ges *dbv2ExpressionsSuite) TestPERCENT_RANK() {
ges.Equal(exp.NewSQLFunctionExpression("PERCENT_RANK"), dbv2.PERCENT_RANK())
}
func (ges *dbv2ExpressionsSuite) TestCUME_DIST() {
ges.Equal(exp.NewSQLFunctionExpression("CUME_DIST"), dbv2.CUME_DIST())
}
func (ges *dbv2ExpressionsSuite) TestNTILE() {
ges.Equal(exp.NewSQLFunctionExpression("NTILE", 1), dbv2.NTILE(1))
}
func (ges *dbv2ExpressionsSuite) TestFIRST_VALUE() {
ges.Equal(exp.NewSQLFunctionExpression("FIRST_VALUE", dbv2.I("col")), dbv2.FIRST_VALUE("col"))
}
func (ges *dbv2ExpressionsSuite) TestLAST_VALUE() {
ges.Equal(exp.NewSQLFunctionExpression("LAST_VALUE", dbv2.I("col")), dbv2.LAST_VALUE("col"))
}
func (ges *dbv2ExpressionsSuite) TestNTH_VALUE() {
ges.Equal(exp.NewSQLFunctionExpression("NTH_VALUE", dbv2.I("col"), 1), dbv2.NTH_VALUE("col", 1))
ges.Equal(exp.NewSQLFunctionExpression("NTH_VALUE", dbv2.I("col"), 1), dbv2.NTH_VALUE(dbv2.C("col"), 1))
}
func (ges *dbv2ExpressionsSuite) TestI() {
ges.Equal(exp.NewIdentifierExpression("s", "t", "c"), dbv2.I("s.t.c"))
}
func (ges *dbv2ExpressionsSuite) TestC() {
ges.Equal(exp.NewIdentifierExpression("", "", "c"), dbv2.C("c"))
}
func (ges *dbv2ExpressionsSuite) TestS() {
ges.Equal(exp.NewIdentifierExpression("s", "", ""), dbv2.S("s"))
}
func (ges *dbv2ExpressionsSuite) TestT() {
ges.Equal(exp.NewIdentifierExpression("", "t", ""), dbv2.T("t"))
}
func (ges *dbv2ExpressionsSuite) TestW() {
ges.Equal(exp.NewWindowExpression(nil, nil, nil, nil), dbv2.W())
ges.Equal(exp.NewWindowExpression(dbv2.I("a"), nil, nil, nil), dbv2.W("a"))
ges.Equal(exp.NewWindowExpression(dbv2.I("a"), dbv2.I("b"), nil, nil), dbv2.W("a", "b"))
ges.Equal(exp.NewWindowExpression(dbv2.I("a"), dbv2.I("b"), nil, nil), dbv2.W("a", "b", "c"))
}
func (ges *dbv2ExpressionsSuite) TestOn() {
ges.Equal(exp.NewJoinOnCondition(dbv2.Ex{"a": "b"}), dbv2.On(dbv2.Ex{"a": "b"}))
}
func (ges *dbv2ExpressionsSuite) TestUsing() {
ges.Equal(exp.NewJoinUsingCondition("a", "b"), dbv2.Using("a", "b"))
}
func (ges *dbv2ExpressionsSuite) TestL() {
ges.Equal(exp.NewLiteralExpression("? + ?", 1, 2), dbv2.L("? + ?", 1, 2))
}
func (ges *dbv2ExpressionsSuite) TestLiteral() {
ges.Equal(exp.NewLiteralExpression("? + ?", 1, 2), dbv2.Literal("? + ?", 1, 2))
}
func (ges *dbv2ExpressionsSuite) TestV() {
ges.Equal(exp.NewLiteralExpression("?", "a"), dbv2.V("a"))
}
func (ges *dbv2ExpressionsSuite) TestRange() {
ges.Equal(exp.NewRangeVal("a", "b"), dbv2.Range("a", "b"))
}
func (ges *dbv2ExpressionsSuite) TestStar() {
ges.Equal(exp.NewLiteralExpression("*"), dbv2.Star())
}
func (ges *dbv2ExpressionsSuite) TestDefault() {
ges.Equal(exp.Default(), dbv2.Default())
}
func (ges *dbv2ExpressionsSuite) TestLateral() {
ds := dbv2.From("test")
ges.Equal(exp.NewLateralExpression(ds), dbv2.Lateral(ds))
}
func (ges *dbv2ExpressionsSuite) TestAny() {
ds := dbv2.From("test").Select("id")
ges.Equal(exp.NewSQLFunctionExpression("ANY ", ds), dbv2.Any(ds))
}
func (ges *dbv2ExpressionsSuite) TestAll() {
ds := dbv2.From("test").Select("id")
ges.Equal(exp.NewSQLFunctionExpression("ALL ", ds), dbv2.All(ds))
}
func TestDbv2Expressions(t *testing.T) {
suite.Run(t, new(dbv2ExpressionsSuite))
}