Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
12fcb95b9d | ||
7eee72b053 | |||
183beb1286 |
48
db.go
48
db.go
@ -70,6 +70,20 @@ func makeDBObject(conn *db.DB, tx *db.Tx) map[string]any {
|
||||
panic(vm.NewGoError(r.Error))
|
||||
}
|
||||
},
|
||||
"querya": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args, conn, tx, _ := initDBArgs(argsIn, vm, 1)
|
||||
var r *db.QueryResult
|
||||
if tx != nil {
|
||||
r = tx.Query(args.Str(0), args.Array(1)...)
|
||||
} else {
|
||||
r = conn.Query(args.Str(0), args.Array(1)...)
|
||||
}
|
||||
if r.Error == nil {
|
||||
return vm.ToValue(makeQueryResult(r, r.SliceResults()))
|
||||
} else {
|
||||
panic(vm.NewGoError(r.Error))
|
||||
}
|
||||
},
|
||||
"query1": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args, conn, tx, _ := initDBArgs(argsIn, vm, 1)
|
||||
var r *db.QueryResult
|
||||
@ -84,6 +98,28 @@ func makeDBObject(conn *db.DB, tx *db.Tx) map[string]any {
|
||||
panic(vm.NewGoError(r.Error))
|
||||
}
|
||||
},
|
||||
"query1a": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args, conn, tx, _ := initDBArgs(argsIn, vm, 1)
|
||||
var r *db.QueryResult
|
||||
if tx != nil {
|
||||
r = tx.Query(args.Str(0), args.Array(1)...)
|
||||
} else {
|
||||
r = conn.Query(args.Str(0), args.Array(1)...)
|
||||
}
|
||||
if r.Error == nil {
|
||||
a := r.SliceResults()
|
||||
if len(a) > 0 && len(a[0]) > 0 {
|
||||
list := make([]any, len(a))
|
||||
for i := 0; i < len(a); i++ {
|
||||
list[i] = a[i][0]
|
||||
}
|
||||
return vm.ToValue(makeQueryResult(r, list))
|
||||
}
|
||||
return vm.ToValue(makeQueryResult(r, nil))
|
||||
} else {
|
||||
panic(vm.NewGoError(r.Error))
|
||||
}
|
||||
},
|
||||
"query11": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args, conn, tx, _ := initDBArgs(argsIn, vm, 1)
|
||||
var r *db.QueryResult
|
||||
@ -97,7 +133,7 @@ func makeDBObject(conn *db.DB, tx *db.Tx) map[string]any {
|
||||
if len(a) > 0 && len(a[0]) > 0 {
|
||||
return vm.ToValue(makeQueryResult(r, a[0][0]))
|
||||
}
|
||||
return vm.ToValue(nil)
|
||||
return vm.ToValue(makeQueryResult(r, nil))
|
||||
} else {
|
||||
panic(vm.NewGoError(r.Error))
|
||||
}
|
||||
@ -186,7 +222,15 @@ func makeDBObject(conn *db.DB, tx *db.Tx) map[string]any {
|
||||
if u.FileExists(tryFile) {
|
||||
erDesc = u.ReadFileN(tryFile)
|
||||
}
|
||||
if err := dao.MakeDBFromDesc(conn, erDesc, logger); err == nil {
|
||||
if err := dao.MakeDBFromDesc(conn, erDesc+`
|
||||
|
||||
_deleted
|
||||
table v30 PK
|
||||
id v30 PK
|
||||
time dt ct
|
||||
owner v30 I
|
||||
data t
|
||||
`, logger); err == nil {
|
||||
return nil
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
|
31
db.ts
31
db.ts
@ -7,6 +7,7 @@ export default {
|
||||
makeER,
|
||||
query,
|
||||
query1,
|
||||
query1a,
|
||||
query11,
|
||||
exec,
|
||||
insert,
|
||||
@ -20,10 +21,12 @@ export default {
|
||||
|
||||
function get(dbName: string): DB { return null as any }
|
||||
function setDefault(dbName: string): void { }
|
||||
function make(descFileOrContent: string): Array<Object> { return null as any }
|
||||
function make(descFileOrContent: string): Object[] { return null as any }
|
||||
function makeER(outputFile: string, descFileOrContent: string): void { }
|
||||
function query(sql: string, ...args: any): QueryResult { return null as any }
|
||||
function querya(sql: string, ...args: any): QueryResultA { return null as any }
|
||||
function query1(sql: string, ...args: any): QueryResult1 { return null as any }
|
||||
function query1a(sql: string, ...args: any): QueryResult1A { return null as any }
|
||||
function query11(sql: string, ...args: any): QueryResult11 { return null as any }
|
||||
function exec(sql: string, ...args: any): ExecResult { return null as any }
|
||||
function insert(table: string, data: Object): ExecResult { return null as any }
|
||||
@ -35,9 +38,10 @@ function begin(): Tx { return null as any }
|
||||
function makeInKeys(numKeys: number): string { return '' }
|
||||
|
||||
interface DB {
|
||||
make(descFileOrContent: string): Array<Object>
|
||||
make(descFileOrContent: string): Object[]
|
||||
query(sql: string, ...args: any): QueryResult
|
||||
query1(sql: string, ...args: any): QueryResult1
|
||||
query1a(sql: string, ...args: any): QueryResult1A
|
||||
query11(sql: string, ...args: any): QueryResult11
|
||||
exec(sql: string, ...args: any): ExecResult
|
||||
insert(table: string, data: Object): ExecResult
|
||||
@ -52,6 +56,7 @@ interface DB {
|
||||
interface Tx {
|
||||
query(sql: string, ...args: any): QueryResult
|
||||
query1(sql: string, ...args: any): QueryResult1
|
||||
query1a(sql: string, ...args: any): QueryResult1A
|
||||
query11(sql: string, ...args: any): QueryResult11
|
||||
exec(sql: string, ...args: any): ExecResult
|
||||
insert(table: string, data: Object): ExecResult
|
||||
@ -64,25 +69,37 @@ interface Tx {
|
||||
|
||||
interface QueryResult {
|
||||
sql: string
|
||||
args: Array<any>
|
||||
result: Array<Object>
|
||||
args: any[]
|
||||
result: Object[]
|
||||
}
|
||||
|
||||
interface QueryResultA {
|
||||
sql: string
|
||||
args: any[]
|
||||
result: any[][]
|
||||
}
|
||||
|
||||
interface QueryResult1 {
|
||||
sql: string
|
||||
args: Array<any>
|
||||
args: any[]
|
||||
result: Object
|
||||
}
|
||||
|
||||
interface QueryResult1A {
|
||||
sql: string
|
||||
args: any[]
|
||||
result: any[]
|
||||
}
|
||||
|
||||
interface QueryResult11 {
|
||||
sql: string
|
||||
args: Array<any>
|
||||
args: any[]
|
||||
result: any
|
||||
}
|
||||
|
||||
interface ExecResult {
|
||||
sql: string
|
||||
args: Array<any>
|
||||
args: any[]
|
||||
id: number
|
||||
changes: number
|
||||
}
|
||||
|
14
db_test.js
14
db_test.js
@ -1,13 +1,19 @@
|
||||
import db from 'apigo.cc/gojs/db'
|
||||
|
||||
function main(testUserName){
|
||||
function main(testUserName) {
|
||||
db.setDefault('sqlite://test.db')
|
||||
db.make(`
|
||||
User
|
||||
User // {api} {select:isValid=1}
|
||||
id i AI
|
||||
name t
|
||||
name v100 // [i]
|
||||
password v100 // [p] {-}
|
||||
age i // [n]
|
||||
sex v10 // [s:Female,Male]
|
||||
memo t // [t]
|
||||
isValid b // [c]
|
||||
version ubi //
|
||||
`)
|
||||
db.insert('User', {name: testUserName})
|
||||
db.insert('User', { name: testUserName })
|
||||
let user = db.query1('SELECT * FROM User').result
|
||||
return user
|
||||
}
|
||||
|
16
go.mod
16
go.mod
@ -1,14 +1,14 @@
|
||||
module apigo.cc/gojs/db
|
||||
|
||||
go 1.18
|
||||
go 1.21
|
||||
|
||||
require (
|
||||
apigo.cc/gojs v0.0.6
|
||||
github.com/ssgo/dao v0.1.5
|
||||
apigo.cc/gojs v0.0.12
|
||||
github.com/ssgo/dao v0.1.7
|
||||
github.com/ssgo/db v1.7.11
|
||||
github.com/ssgo/log v1.7.7
|
||||
github.com/ssgo/u v1.7.11
|
||||
modernc.org/sqlite v1.34.1
|
||||
github.com/ssgo/u v1.7.13
|
||||
modernc.org/sqlite v1.34.4
|
||||
)
|
||||
|
||||
require (
|
||||
@ -27,9 +27,9 @@ require (
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||
github.com/ssgo/config v1.7.9 // indirect
|
||||
github.com/ssgo/standard v1.7.7 // indirect
|
||||
github.com/ssgo/tool v0.4.27 // indirect
|
||||
golang.org/x/sys v0.27.0 // indirect
|
||||
golang.org/x/text v0.20.0 // indirect
|
||||
github.com/ssgo/tool v0.4.28 // indirect
|
||||
golang.org/x/sys v0.28.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
|
||||
modernc.org/libc v1.55.3 // indirect
|
||||
|
Loading…
Reference in New Issue
Block a user