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>
This commit is contained in:
2025-09-27 15:47:28 +08:00
co-authored by Claude
parent 764eccfafd
commit 304d553b3c
113 changed files with 914 additions and 432 deletions
+12 -12
View File
@@ -3,10 +3,10 @@ package sqlgen_test
import (
"testing"
"git.fsdpf.net/go/db/v2/exp"
"git.fsdpf.net/go/db/v2/internal/errors"
"git.fsdpf.net/go/db/v2/internal/sb"
"git.fsdpf.net/go/db/v2/sqlgen"
"git.fsdpf.net/go/db/exp"
"git.fsdpf.net/go/db/internal/errors"
"git.fsdpf.net/go/db/internal/sb"
"git.fsdpf.net/go/db/sqlgen"
"github.com/stretchr/testify/suite"
)
@@ -50,7 +50,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestDialect() {
func (dsgs *deleteSQLGeneratorSuite) TestGenerate() {
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", ""))
SetFrom(exp.NewColumnListExpression("test"))
dsgs.assertCases(
sqlgen.NewDeleteSQLGenerator("test", sqlgen.DefaultDialectOptions()),
@@ -72,7 +72,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withUnsupportedFragment() {
opts := sqlgen.DefaultDialectOptions()
opts.DeleteSQLOrder = []sqlgen.SQLFragmentType{sqlgen.InsertBeingSQLFragment}
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", ""))
SetFrom(exp.NewColumnListExpression("test"))
dsgs.assertCases(
sqlgen.NewDeleteSQLGenerator("test", opts),
@@ -94,7 +94,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withErroredBuilder() {
opts := sqlgen.DefaultDialectOptions()
d := sqlgen.NewDeleteSQLGenerator("test", opts)
dc := exp.NewDeleteClauses().SetFrom(exp.NewIdentifierExpression("", "test", ""))
dc := exp.NewDeleteClauses().SetFrom(exp.NewColumnListExpression("test"))
b := sb.NewSQLBuilder(false).SetError(errors.New("expected error"))
d.Generate(b, dc)
dsgs.assertErrorSQL(b, "db: expected error")
@@ -111,7 +111,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withCommonTables() {
tse := newTestAppendableExpression("select * from foo", emptyArgs, nil, nil)
dc := exp.NewDeleteClauses().SetFrom(exp.NewIdentifierExpression("", "test_cte", ""))
dc := exp.NewDeleteClauses().SetFrom(exp.NewColumnListExpression("test_cte"))
dcCte1 := dc.CommonTablesAppend(exp.NewCommonTableExpression(false, "test_cte", tse))
dcCte2 := dc.CommonTablesAppend(exp.NewCommonTableExpression(true, "test_cte", tse))
@@ -150,7 +150,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withCommonTables() {
func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withWhere() {
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", "")).
SetFrom(exp.NewColumnListExpression("test")).
WhereAppend(exp.NewLiteralExpression(`"a"=?`, 1))
dsgs.assertCases(
sqlgen.NewDeleteSQLGenerator("test", sqlgen.DefaultDialectOptions()),
@@ -166,7 +166,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withOrder() {
opts.SupportsOrderByOnDelete = true
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", "")).
SetFrom(exp.NewColumnListExpression("test")).
SetOrder(exp.NewIdentifierExpression("", "", "c").Desc())
dsgs.assertCases(
@@ -188,7 +188,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withLimit() {
opts.SupportsLimitOnDelete = true
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", "")).
SetFrom(exp.NewColumnListExpression("test")).
SetLimit(1)
dsgs.assertCases(
@@ -210,7 +210,7 @@ func (dsgs *deleteSQLGeneratorSuite) TestGenerate_withReturning() {
opts.SupportsReturn = true
dc := exp.NewDeleteClauses().
SetFrom(exp.NewIdentifierExpression("", "test", "")).
SetFrom(exp.NewColumnListExpression("test")).
SetReturning(exp.NewColumnListExpression("a", "b"))
dsgs.assertCases(