mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 23:44:22 +00:00
Replace interface{} with any
This commit is contained in:
@@ -15,8 +15,8 @@ func TestDefaultConfig(t *testing.T) {
|
|||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
got interface{}
|
got any
|
||||||
expected interface{}
|
expected any
|
||||||
}{
|
}{
|
||||||
{"DBPath", cfg.DBURL, "sqlite://lemma.db"},
|
{"DBPath", cfg.DBURL, "sqlite://lemma.db"},
|
||||||
{"WorkDir", cfg.WorkDir, "./data"},
|
{"WorkDir", cfg.WorkDir, "./data"},
|
||||||
@@ -119,8 +119,8 @@ func TestLoad(t *testing.T) {
|
|||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
got interface{}
|
got any
|
||||||
expected interface{}
|
expected any
|
||||||
}{
|
}{
|
||||||
{"IsDevelopment", cfg.IsDevelopment, true},
|
{"IsDevelopment", cfg.IsDevelopment, true},
|
||||||
{"DBURL", cfg.DBURL, "/custom/db/path.db"},
|
{"DBURL", cfg.DBURL, "/custom/db/path.db"},
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ func (s *jwtService) generateToken(userID int, role string, sessionID string, to
|
|||||||
func (s *jwtService) ValidateToken(tokenString string) (*Claims, error) {
|
func (s *jwtService) ValidateToken(tokenString string) (*Claims, error) {
|
||||||
log := getJWTLogger()
|
log := getJWTLogger()
|
||||||
|
|
||||||
token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
|
token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (any, error) {
|
||||||
// Validate the signing method
|
// Validate the signing method
|
||||||
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
|
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||||
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
|
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const (
|
|||||||
// Query represents a SQL query with its parameters
|
// Query represents a SQL query with its parameters
|
||||||
type Query struct {
|
type Query struct {
|
||||||
builder strings.Builder
|
builder strings.Builder
|
||||||
args []interface{}
|
args []any
|
||||||
dbType DBType
|
dbType DBType
|
||||||
pos int // tracks the current placeholder position
|
pos int // tracks the current placeholder position
|
||||||
hasSelect bool
|
hasSelect bool
|
||||||
@@ -35,7 +35,7 @@ type Query struct {
|
|||||||
func NewQuery(dbType DBType) *Query {
|
func NewQuery(dbType DBType) *Query {
|
||||||
return &Query{
|
return &Query{
|
||||||
dbType: dbType,
|
dbType: dbType,
|
||||||
args: make([]interface{}, 0),
|
args: make([]any, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ func (q *Query) Write(s string) *Query {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Placeholder adds a placeholder for a single argument
|
// Placeholder adds a placeholder for a single argument
|
||||||
func (q *Query) Placeholder(arg interface{}) *Query {
|
func (q *Query) Placeholder(arg any) *Query {
|
||||||
q.pos++
|
q.pos++
|
||||||
q.args = append(q.args, arg)
|
q.args = append(q.args, arg)
|
||||||
|
|
||||||
@@ -265,7 +265,7 @@ func (q *Query) Placeholders(n int) *Query {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddArgs adds arguments to the query
|
// AddArgs adds arguments to the query
|
||||||
func (q *Query) AddArgs(args ...interface{}) *Query {
|
func (q *Query) AddArgs(args ...any) *Query {
|
||||||
q.args = append(q.args, args...)
|
q.args = append(q.args, args...)
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
@@ -276,6 +276,6 @@ func (q *Query) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Args returns the query arguments
|
// Args returns the query arguments
|
||||||
func (q *Query) Args() []interface{} {
|
func (q *Query) Args() []any {
|
||||||
return q.args
|
return q.args
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Simple select SQLite",
|
name: "Simple select SQLite",
|
||||||
@@ -65,7 +65,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
return q.Select("id", "name").From("users")
|
return q.Select("id", "name").From("users")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT id, name FROM users",
|
wantSQL: "SELECT id, name FROM users",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Simple select Postgres",
|
name: "Simple select Postgres",
|
||||||
@@ -74,7 +74,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
return q.Select("id", "name").From("users")
|
return q.Select("id", "name").From("users")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT id, name FROM users",
|
wantSQL: "SELECT id, name FROM users",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Select with where SQLite",
|
name: "Select with where SQLite",
|
||||||
@@ -83,7 +83,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT id, name FROM users WHERE id = ?",
|
wantSQL: "SELECT id, name FROM users WHERE id = ?",
|
||||||
wantArgs: []interface{}{1},
|
wantArgs: []any{1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Select with where Postgres",
|
name: "Select with where Postgres",
|
||||||
@@ -92,7 +92,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT id, name FROM users WHERE id = $1",
|
wantSQL: "SELECT id, name FROM users WHERE id = $1",
|
||||||
wantArgs: []interface{}{1},
|
wantArgs: []any{1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Multiple where conditions SQLite",
|
name: "Multiple where conditions SQLite",
|
||||||
@@ -103,7 +103,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
And("role = ").Placeholder("admin")
|
And("role = ").Placeholder("admin")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE active = ? AND role = ?",
|
wantSQL: "SELECT * FROM users WHERE active = ? AND role = ?",
|
||||||
wantArgs: []interface{}{true, "admin"},
|
wantArgs: []any{true, "admin"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Multiple where conditions Postgres",
|
name: "Multiple where conditions Postgres",
|
||||||
@@ -114,7 +114,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
|||||||
And("role = ").Placeholder("admin")
|
And("role = ").Placeholder("admin")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE active = $1 AND role = $2",
|
wantSQL: "SELECT * FROM users WHERE active = $1 AND role = $2",
|
||||||
wantArgs: []interface{}{true, "admin"},
|
wantArgs: []any{true, "admin"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Single placeholder SQLite",
|
name: "Single placeholder SQLite",
|
||||||
@@ -152,7 +152,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = ?",
|
wantSQL: "SELECT * FROM users WHERE id = ?",
|
||||||
wantArgs: []interface{}{42},
|
wantArgs: []any{42},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Single placeholder Postgres",
|
name: "Single placeholder Postgres",
|
||||||
@@ -161,7 +161,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = $1",
|
wantSQL: "SELECT * FROM users WHERE id = $1",
|
||||||
wantArgs: []interface{}{42},
|
wantArgs: []any{42},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Multiple placeholders SQLite",
|
name: "Multiple placeholders SQLite",
|
||||||
@@ -173,7 +173,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
Placeholder("John")
|
Placeholder("John")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = ? AND name = ?",
|
wantSQL: "SELECT * FROM users WHERE id = ? AND name = ?",
|
||||||
wantArgs: []interface{}{42, "John"},
|
wantArgs: []any{42, "John"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Multiple placeholders Postgres",
|
name: "Multiple placeholders Postgres",
|
||||||
@@ -185,7 +185,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
Placeholder("John")
|
Placeholder("John")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = $1 AND name = $2",
|
wantSQL: "SELECT * FROM users WHERE id = $1 AND name = $2",
|
||||||
wantArgs: []interface{}{42, "John"},
|
wantArgs: []any{42, "John"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Placeholders for IN SQLite",
|
name: "Placeholders for IN SQLite",
|
||||||
@@ -197,7 +197,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
AddArgs(1, 2, 3)
|
AddArgs(1, 2, 3)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
||||||
wantArgs: []interface{}{1, 2, 3},
|
wantArgs: []any{1, 2, 3},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Placeholders for IN Postgres",
|
name: "Placeholders for IN Postgres",
|
||||||
@@ -209,7 +209,7 @@ func TestPlaceholders(t *testing.T) {
|
|||||||
AddArgs(1, 2, 3)
|
AddArgs(1, 2, 3)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id IN ($1, $2, $3)",
|
wantSQL: "SELECT * FROM users WHERE id IN ($1, $2, $3)",
|
||||||
wantArgs: []interface{}{1, 2, 3},
|
wantArgs: []any{1, 2, 3},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Simple where",
|
name: "Simple where",
|
||||||
@@ -247,7 +247,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
return q.Select("*").From("users").Where("id = ").Placeholder(1)
|
return q.Select("*").From("users").Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = ?",
|
wantSQL: "SELECT * FROM users WHERE id = ?",
|
||||||
wantArgs: []interface{}{1},
|
wantArgs: []any{1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Where with And",
|
name: "Where with And",
|
||||||
@@ -258,7 +258,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
And("active = ").Placeholder(true)
|
And("active = ").Placeholder(true)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = ? AND active = ?",
|
wantSQL: "SELECT * FROM users WHERE id = ? AND active = ?",
|
||||||
wantArgs: []interface{}{1, true},
|
wantArgs: []any{1, true},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Where with Or",
|
name: "Where with Or",
|
||||||
@@ -269,7 +269,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
Or("id = ").Placeholder(2)
|
Or("id = ").Placeholder(2)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id = ? OR id = ?",
|
wantSQL: "SELECT * FROM users WHERE id = ? OR id = ?",
|
||||||
wantArgs: []interface{}{1, 2},
|
wantArgs: []any{1, 2},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Where with parentheses",
|
name: "Where with parentheses",
|
||||||
@@ -283,7 +283,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
Write(")")
|
Write(")")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
||||||
wantArgs: []interface{}{true, 1, 2},
|
wantArgs: []any{true, 1, 2},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Where with StartGroup and EndGroup",
|
name: "Where with StartGroup and EndGroup",
|
||||||
@@ -297,7 +297,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
Write(")")
|
Write(")")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
||||||
wantArgs: []interface{}{true, 1, 2},
|
wantArgs: []any{true, 1, 2},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Where with nested groups",
|
name: "Where with nested groups",
|
||||||
@@ -311,7 +311,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
And("created_at > ").Placeholder("2020-01-01")
|
And("created_at > ").Placeholder("2020-01-01")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE (active = ? OR role = ?) AND created_at > ?",
|
wantSQL: "SELECT * FROM users WHERE (active = ? OR role = ?) AND created_at > ?",
|
||||||
wantArgs: []interface{}{true, "admin", "2020-01-01"},
|
wantArgs: []any{true, "admin", "2020-01-01"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "WhereIn",
|
name: "WhereIn",
|
||||||
@@ -322,7 +322,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
|||||||
AddArgs(1, 2, 3)
|
AddArgs(1, 2, 3)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
||||||
wantArgs: []interface{}{1, 2, 3},
|
wantArgs: []any{1, 2, 3},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Inner join",
|
name: "Inner join",
|
||||||
@@ -362,7 +362,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
|||||||
Join(db.InnerJoin, "workspaces w", "w.user_id = u.id")
|
Join(db.InnerJoin, "workspaces w", "w.user_id = u.id")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id",
|
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Left join",
|
name: "Left join",
|
||||||
@@ -373,7 +373,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
|||||||
Join(db.LeftJoin, "workspaces w", "w.user_id = u.id")
|
Join(db.LeftJoin, "workspaces w", "w.user_id = u.id")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT u.*, w.name FROM users u LEFT JOIN workspaces w ON w.user_id = u.id",
|
wantSQL: "SELECT u.*, w.name FROM users u LEFT JOIN workspaces w ON w.user_id = u.id",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Multiple joins",
|
name: "Multiple joins",
|
||||||
@@ -385,7 +385,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
|||||||
Join(db.LeftJoin, "settings s", "s.user_id = u.id")
|
Join(db.LeftJoin, "settings s", "s.user_id = u.id")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT u.*, w.name, s.role FROM users u INNER JOIN workspaces w ON w.user_id = u.id LEFT JOIN settings s ON s.user_id = u.id",
|
wantSQL: "SELECT u.*, w.name, s.role FROM users u INNER JOIN workspaces w ON w.user_id = u.id LEFT JOIN settings s ON s.user_id = u.id",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Join with where",
|
name: "Join with where",
|
||||||
@@ -397,7 +397,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
|||||||
Where("u.active = ").Placeholder(true)
|
Where("u.active = ").Placeholder(true)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id WHERE u.active = ?",
|
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id WHERE u.active = ?",
|
||||||
wantArgs: []interface{}{true},
|
wantArgs: []any{true},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,7 +426,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Order by",
|
name: "Order by",
|
||||||
@@ -435,7 +435,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
return q.Select("*").From("users").OrderBy("name ASC")
|
return q.Select("*").From("users").OrderBy("name ASC")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users ORDER BY name ASC",
|
wantSQL: "SELECT * FROM users ORDER BY name ASC",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Order by multiple columns",
|
name: "Order by multiple columns",
|
||||||
@@ -444,7 +444,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
return q.Select("*").From("users").OrderBy("name ASC", "created_at DESC")
|
return q.Select("*").From("users").OrderBy("name ASC", "created_at DESC")
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users ORDER BY name ASC, created_at DESC",
|
wantSQL: "SELECT * FROM users ORDER BY name ASC, created_at DESC",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Limit",
|
name: "Limit",
|
||||||
@@ -453,7 +453,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
return q.Select("*").From("users").Limit(10)
|
return q.Select("*").From("users").Limit(10)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users LIMIT 10",
|
wantSQL: "SELECT * FROM users LIMIT 10",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Limit and offset",
|
name: "Limit and offset",
|
||||||
@@ -462,7 +462,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
return q.Select("*").From("users").Limit(10).Offset(20)
|
return q.Select("*").From("users").Limit(10).Offset(20)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users LIMIT 10 OFFSET 20",
|
wantSQL: "SELECT * FROM users LIMIT 10 OFFSET 20",
|
||||||
wantArgs: []interface{}{},
|
wantArgs: []any{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Complete query with all clauses",
|
name: "Complete query with all clauses",
|
||||||
@@ -476,7 +476,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
|||||||
Offset(20)
|
Offset(20)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT * FROM users WHERE active = ? ORDER BY name ASC LIMIT 10 OFFSET 20",
|
wantSQL: "SELECT * FROM users WHERE active = ? ORDER BY name ASC LIMIT 10 OFFSET 20",
|
||||||
wantArgs: []interface{}{true},
|
wantArgs: []any{true},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,7 +505,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Insert SQLite",
|
name: "Insert SQLite",
|
||||||
@@ -516,7 +516,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
AddArgs("John", "john@example.com")
|
AddArgs("John", "john@example.com")
|
||||||
},
|
},
|
||||||
wantSQL: "INSERT INTO users (name, email) VALUES (?, ?)",
|
wantSQL: "INSERT INTO users (name, email) VALUES (?, ?)",
|
||||||
wantArgs: []interface{}{"John", "john@example.com"},
|
wantArgs: []any{"John", "john@example.com"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Insert Postgres",
|
name: "Insert Postgres",
|
||||||
@@ -527,7 +527,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
AddArgs("John", "john@example.com")
|
AddArgs("John", "john@example.com")
|
||||||
},
|
},
|
||||||
wantSQL: "INSERT INTO users (name, email) VALUES ($1, $2)",
|
wantSQL: "INSERT INTO users (name, email) VALUES ($1, $2)",
|
||||||
wantArgs: []interface{}{"John", "john@example.com"},
|
wantArgs: []any{"John", "john@example.com"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Update SQLite",
|
name: "Update SQLite",
|
||||||
@@ -539,7 +539,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
Where("id = ").Placeholder(1)
|
Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "UPDATE users SET name = ?, email = ? WHERE id = ?",
|
wantSQL: "UPDATE users SET name = ?, email = ? WHERE id = ?",
|
||||||
wantArgs: []interface{}{"John", "john@example.com", 1},
|
wantArgs: []any{"John", "john@example.com", 1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Update Postgres",
|
name: "Update Postgres",
|
||||||
@@ -551,7 +551,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
Where("id = ").Placeholder(1)
|
Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "UPDATE users SET name = $1, email = $2 WHERE id = $3",
|
wantSQL: "UPDATE users SET name = $1, email = $2 WHERE id = $3",
|
||||||
wantArgs: []interface{}{"John", "john@example.com", 1},
|
wantArgs: []any{"John", "john@example.com", 1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Delete SQLite",
|
name: "Delete SQLite",
|
||||||
@@ -560,7 +560,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "DELETE FROM users WHERE id = ?",
|
wantSQL: "DELETE FROM users WHERE id = ?",
|
||||||
wantArgs: []interface{}{1},
|
wantArgs: []any{1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Delete Postgres",
|
name: "Delete Postgres",
|
||||||
@@ -569,7 +569,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
|||||||
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
||||||
},
|
},
|
||||||
wantSQL: "DELETE FROM users WHERE id = $1",
|
wantSQL: "DELETE FROM users WHERE id = $1",
|
||||||
wantArgs: []interface{}{1},
|
wantArgs: []any{1},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -598,7 +598,7 @@ func TestHavingClause(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Simple having",
|
name: "Simple having",
|
||||||
@@ -610,7 +610,7 @@ func TestHavingClause(t *testing.T) {
|
|||||||
Having("count > ").Placeholder(5)
|
Having("count > ").Placeholder(5)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > ?",
|
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > ?",
|
||||||
wantArgs: []interface{}{5},
|
wantArgs: []any{5},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Having with multiple conditions",
|
name: "Having with multiple conditions",
|
||||||
@@ -623,7 +623,7 @@ func TestHavingClause(t *testing.T) {
|
|||||||
And("COUNT(*) > ").Placeholder(3)
|
And("COUNT(*) > ").Placeholder(3)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department HAVING avg_salary > ? AND COUNT(*) > ?",
|
wantSQL: "SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department HAVING avg_salary > ? AND COUNT(*) > ?",
|
||||||
wantArgs: []interface{}{50000, 3},
|
wantArgs: []any{50000, 3},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Having with postgres placeholders",
|
name: "Having with postgres placeholders",
|
||||||
@@ -635,7 +635,7 @@ func TestHavingClause(t *testing.T) {
|
|||||||
Having("count > ").Placeholder(5)
|
Having("count > ").Placeholder(5)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > $1",
|
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > $1",
|
||||||
wantArgs: []interface{}{5},
|
wantArgs: []any{5},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -664,7 +664,7 @@ func TestComplexQueries(t *testing.T) {
|
|||||||
dbType db.DBType
|
dbType db.DBType
|
||||||
buildFn func(*db.Query) *db.Query
|
buildFn func(*db.Query) *db.Query
|
||||||
wantSQL string
|
wantSQL string
|
||||||
wantArgs []interface{}
|
wantArgs []any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Complex select with join and where",
|
name: "Complex select with join and where",
|
||||||
@@ -680,7 +680,7 @@ func TestComplexQueries(t *testing.T) {
|
|||||||
Limit(10)
|
Limit(10)
|
||||||
},
|
},
|
||||||
wantSQL: "SELECT u.id, u.name, COUNT(w.id) as workspace_count FROM users u LEFT JOIN workspaces w ON w.user_id = u.id WHERE u.active = ? GROUP BY u.id, u.name HAVING COUNT(w.id) > ? ORDER BY workspace_count DESC LIMIT 10",
|
wantSQL: "SELECT u.id, u.name, COUNT(w.id) as workspace_count FROM users u LEFT JOIN workspaces w ON w.user_id = u.id WHERE u.active = ? GROUP BY u.id, u.name HAVING COUNT(w.id) > ? ORDER BY workspace_count DESC LIMIT 10",
|
||||||
wantArgs: []interface{}{true, 0},
|
wantArgs: []any{true, 0},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func NewScanner(db *sql.DB, dbType DBType) *Scanner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// QueryRow executes a query and scans the result into a struct
|
// QueryRow executes a query and scans the result into a struct
|
||||||
func (s *Scanner) QueryRow(dest interface{}, q *Query) error {
|
func (s *Scanner) QueryRow(dest any, q *Query) error {
|
||||||
row := s.db.QueryRow(q.String(), q.Args()...)
|
row := s.db.QueryRow(q.String(), q.Args()...)
|
||||||
|
|
||||||
// Handle primitive types
|
// Handle primitive types
|
||||||
@@ -46,7 +46,7 @@ func (s *Scanner) QueryRow(dest interface{}, q *Query) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Query executes a query and scans multiple results into a slice of structs
|
// Query executes a query and scans multiple results into a slice of structs
|
||||||
func (s *Scanner) Query(dest interface{}, q *Query) error {
|
func (s *Scanner) Query(dest any, q *Query) error {
|
||||||
rows, err := s.db.Query(q.String(), q.Args()...)
|
rows, err := s.db.Query(q.String(), q.Args()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -57,7 +57,7 @@ func (s *Scanner) Query(dest interface{}, q *Query) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scanStruct scans a single row into a struct
|
// scanStruct scans a single row into a struct
|
||||||
func scanStruct(row *sql.Row, dest interface{}) error {
|
func scanStruct(row *sql.Row, dest any) error {
|
||||||
v := reflect.ValueOf(dest)
|
v := reflect.ValueOf(dest)
|
||||||
if v.Kind() != reflect.Ptr {
|
if v.Kind() != reflect.Ptr {
|
||||||
return fmt.Errorf("dest must be a pointer")
|
return fmt.Errorf("dest must be a pointer")
|
||||||
@@ -67,7 +67,7 @@ func scanStruct(row *sql.Row, dest interface{}) error {
|
|||||||
return fmt.Errorf("dest must be a pointer to a struct")
|
return fmt.Errorf("dest must be a pointer to a struct")
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := make([]interface{}, 0, v.NumField())
|
fields := make([]any, 0, v.NumField())
|
||||||
|
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
field := v.Field(i)
|
field := v.Field(i)
|
||||||
@@ -80,7 +80,7 @@ func scanStruct(row *sql.Row, dest interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scanStructs scans multiple rows into a slice of structs
|
// scanStructs scans multiple rows into a slice of structs
|
||||||
func scanStructs(rows *sql.Rows, dest interface{}) error {
|
func scanStructs(rows *sql.Rows, dest any) error {
|
||||||
v := reflect.ValueOf(dest)
|
v := reflect.ValueOf(dest)
|
||||||
if v.Kind() != reflect.Ptr {
|
if v.Kind() != reflect.Ptr {
|
||||||
return fmt.Errorf("dest must be a pointer")
|
return fmt.Errorf("dest must be a pointer")
|
||||||
@@ -95,7 +95,7 @@ func scanStructs(rows *sql.Rows, dest interface{}) error {
|
|||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
newElem := reflect.New(elemType).Elem()
|
newElem := reflect.New(elemType).Elem()
|
||||||
fields := make([]interface{}, 0, newElem.NumField())
|
fields := make([]any, 0, newElem.NumField())
|
||||||
|
|
||||||
for i := 0; i < newElem.NumField(); i++ {
|
for i := 0; i < newElem.NumField(); i++ {
|
||||||
field := newElem.Field(i)
|
field := newElem.Field(i)
|
||||||
@@ -129,7 +129,7 @@ func NewScannerEx(db *sql.DB, dbType DBType) *ScannerEx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// QueryRow executes a query and scans the result into a struct
|
// QueryRow executes a query and scans the result into a struct
|
||||||
func (s *ScannerEx) QueryRow(dest interface{}, q *Query) error {
|
func (s *ScannerEx) QueryRow(dest any, q *Query) error {
|
||||||
row := s.db.QueryRow(q.String(), q.Args()...)
|
row := s.db.QueryRow(q.String(), q.Args()...)
|
||||||
|
|
||||||
// Get column names
|
// Get column names
|
||||||
@@ -141,7 +141,7 @@ func (s *ScannerEx) QueryRow(dest interface{}, q *Query) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Query executes a query and scans multiple results into a slice of structs
|
// Query executes a query and scans multiple results into a slice of structs
|
||||||
func (s *ScannerEx) Query(dest interface{}, q *Query) error {
|
func (s *ScannerEx) Query(dest any, q *Query) error {
|
||||||
rows, err := s.db.Query(q.String(), q.Args()...)
|
rows, err := s.db.Query(q.String(), q.Args()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -189,7 +189,7 @@ func toSnakeCase(s string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scanStructTags scans a single row into a struct using field tags
|
// scanStructTags scans a single row into a struct using field tags
|
||||||
func scanStructTags(row *sql.Row, dest interface{}) error {
|
func scanStructTags(row *sql.Row, dest any) error {
|
||||||
v := reflect.ValueOf(dest)
|
v := reflect.ValueOf(dest)
|
||||||
if v.Kind() != reflect.Ptr {
|
if v.Kind() != reflect.Ptr {
|
||||||
return fmt.Errorf("dest must be a pointer")
|
return fmt.Errorf("dest must be a pointer")
|
||||||
@@ -199,7 +199,7 @@ func scanStructTags(row *sql.Row, dest interface{}) error {
|
|||||||
return fmt.Errorf("dest must be a pointer to a struct")
|
return fmt.Errorf("dest must be a pointer to a struct")
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := make([]interface{}, 0, v.NumField())
|
fields := make([]any, 0, v.NumField())
|
||||||
|
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
field := v.Field(i)
|
field := v.Field(i)
|
||||||
@@ -212,7 +212,7 @@ func scanStructTags(row *sql.Row, dest interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scanStructsTags scans multiple rows into a slice of structs using field tags
|
// scanStructsTags scans multiple rows into a slice of structs using field tags
|
||||||
func scanStructsTags(rows *sql.Rows, dest interface{}) error {
|
func scanStructsTags(rows *sql.Rows, dest any) error {
|
||||||
v := reflect.ValueOf(dest)
|
v := reflect.ValueOf(dest)
|
||||||
if v.Kind() != reflect.Ptr {
|
if v.Kind() != reflect.Ptr {
|
||||||
return fmt.Errorf("dest must be a pointer")
|
return fmt.Errorf("dest must be a pointer")
|
||||||
@@ -243,8 +243,8 @@ func scanStructsTags(rows *sql.Rows, dest interface{}) error {
|
|||||||
fieldMap := getFieldMap(elemType)
|
fieldMap := getFieldMap(elemType)
|
||||||
|
|
||||||
// Prepare values slice for each scan
|
// Prepare values slice for each scan
|
||||||
values := make([]interface{}, len(columns))
|
values := make([]any, len(columns))
|
||||||
scanFields := make([]interface{}, len(columns))
|
scanFields := make([]any, len(columns))
|
||||||
for i := range values {
|
for i := range values {
|
||||||
scanFields[i] = &values[i]
|
scanFields[i] = &values[i]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ func (h *Handler) AdminUpdateUser() http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Track what's being updated for logging
|
// Track what's being updated for logging
|
||||||
updates := make(map[string]interface{})
|
updates := make(map[string]any)
|
||||||
|
|
||||||
if req.Email != "" {
|
if req.Email != "" {
|
||||||
user.Email = req.Email
|
user.Email = req.Email
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ func TestFileHandlers_Integration(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
method string
|
method string
|
||||||
path string
|
path string
|
||||||
body interface{}
|
body any
|
||||||
}{
|
}{
|
||||||
{"list files", http.MethodGet, baseURL, nil},
|
{"list files", http.MethodGet, baseURL, nil},
|
||||||
{"get file", http.MethodGet, baseURL + "/test.md", nil},
|
{"get file", http.MethodGet, baseURL + "/test.md", nil},
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ func TestGitHandlers_Integration(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
method string
|
method string
|
||||||
path string
|
path string
|
||||||
body interface{}
|
body any
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "commit without token",
|
name: "commit without token",
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func NewHandler(db db.Database, s storage.Manager) *Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// respondJSON is a helper to send JSON responses
|
// respondJSON is a helper to send JSON responses
|
||||||
func respondJSON(w http.ResponseWriter, data interface{}) {
|
func respondJSON(w http.ResponseWriter, data any) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
if err := json.NewEncoder(w).Encode(data); err != nil {
|
if err := json.NewEncoder(w).Encode(data); err != nil {
|
||||||
respondError(w, "Failed to encode response", http.StatusInternalServerError)
|
respondError(w, "Failed to encode response", http.StatusInternalServerError)
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ func (h *testHarness) createTestUser(t *testing.T, email, password string, role
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *testHarness) newRequest(t *testing.T, method, path string, body interface{}) *http.Request {
|
func (h *testHarness) newRequest(t *testing.T, method, path string, body any) *http.Request {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
var reqBody []byte
|
var reqBody []byte
|
||||||
@@ -246,7 +246,7 @@ func (h *testHarness) addCSRFCookie(t *testing.T, req *http.Request) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// makeRequest is the main helper for making JSON requests
|
// makeRequest is the main helper for making JSON requests
|
||||||
func (h *testHarness) makeRequest(t *testing.T, method, path string, body interface{}, testUser *testUser) *httptest.ResponseRecorder {
|
func (h *testHarness) makeRequest(t *testing.T, method, path string, body any, testUser *testUser) *httptest.ResponseRecorder {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
req := h.newRequest(t, method, path, body)
|
req := h.newRequest(t, method, path, body)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func (m MockDirInfo) Size() int64 { return m.size }
|
|||||||
func (m MockDirInfo) Mode() fs.FileMode { return m.mode }
|
func (m MockDirInfo) Mode() fs.FileMode { return m.mode }
|
||||||
func (m MockDirInfo) ModTime() time.Time { return m.modTime }
|
func (m MockDirInfo) ModTime() time.Time { return m.modTime }
|
||||||
func (m MockDirInfo) IsDir() bool { return m.isDir }
|
func (m MockDirInfo) IsDir() bool { return m.isDir }
|
||||||
func (m MockDirInfo) Sys() interface{} { return nil }
|
func (m MockDirInfo) Sys() any { return nil }
|
||||||
|
|
||||||
type mockFS struct {
|
type mockFS struct {
|
||||||
// Record operations for verification
|
// Record operations for verification
|
||||||
|
|||||||
Reference in New Issue
Block a user