Skip to content

Commit

Permalink
improve performece
Browse files Browse the repository at this point in the history
  • Loading branch information
baxiry committed Jun 23, 2024
1 parent 009a717 commit f44dce2
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 63 deletions.
31 changes: 16 additions & 15 deletions engine/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,53 @@ import (

// ok
func HandleQueries(query string) string {
switch gjson.Get(query, "action").String() {
parsedQuery := gjson.Parse(query)
switch parsedQuery.Get("action").String() {

// database actions
case "findOne":
return db.findOne(query)
return db.findOne(parsedQuery)

case "findMany":
return db.findMany(query)
return db.findMany(parsedQuery)

case "findById":
return db.findById(query)
return db.findById(parsedQuery)

case "insert":
return db.insertOne(query)
return db.insertOne(parsedQuery)

case "insertMany":
return db.insertMany(query)
return db.insertMany(parsedQuery)

// update
case "updateById":
return db.updateById(query)
return db.updateById(parsedQuery)

case "updateOne":
return db.updateOne(query)
return db.updateOne(parsedQuery)

case "updateMany":
return db.updateMany(query)
return db.updateMany(parsedQuery)

case "deleteById":
return db.deleteById(query)
return db.deleteById(parsedQuery)

case "deleteOne":
return db.deleteOne(query)
return db.deleteOne(parsedQuery)

case "deleteMany":
return db.deleteMany(query)
return db.deleteMany(parsedQuery)

case "transaction":
return transaction(query)
return transaction(parsedQuery)

// manage database
case "create_collection":
return createCollection(query)
return createCollection(parsedQuery.Get("collection").String())

case "delete_collection":
return deleteCollection(query)
return deleteCollection(parsedQuery.Get("collection").String())

case "show_collection":
//return showCollections(db.path)
Expand Down
77 changes: 38 additions & 39 deletions engine/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ type matched struct {
}

// deletes Many items
func (db *DB) deleteMany(query string) string {
func (db *DB) deleteMany(query gjson.Result) string {

mtch := gjson.Get(query, "match")
mtch := query.Get("match")

coll := gjson.Get(query, "collection").String()
coll := query.Get("collection").String()

stmt := `select rowid, record from ` + coll

Expand Down Expand Up @@ -62,13 +62,13 @@ func (db *DB) deleteMany(query string) string {
}

// TODO updateMany update document data
func (db *DB) updateMany(query string) (result string) {
func (db *DB) updateMany(query gjson.Result) (result string) {

mtch := gjson.Get(query, "match")
mtch := query.Get("match")

newObj := gjson.Get(query, "data").String()
newObj := query.Get("data").String()

coll := gjson.Get(query, "collection").String()
coll := query.Get("collection").String()

// updates exist value

Expand Down Expand Up @@ -119,13 +119,13 @@ func (db *DB) updateMany(query string) (result string) {
}

// TODO updateOne one update document data
func (db *DB) updateOne(query string) (result string) {
func (db *DB) updateOne(query gjson.Result) (result string) {

mtch := gjson.Get(query, "match")
mtch := query.Get("match")

newObj := gjson.Get(query, "data").String()
newObj := query.Get("data").String()

coll := gjson.Get(query, "collection").String()
coll := query.Get("collection").String()

// updates exist value

Expand Down Expand Up @@ -169,12 +169,13 @@ func (db *DB) updateOne(query string) (result string) {
}

// Update update document data
func (db *DB) updateById(query string) (result string) {
func (db *DB) updateById(query gjson.Result) (result string) {

oldObj := db.findById(query)

id := gjson.Get(query, "_id").String()
newObj := gjson.Get(query, "data").String()
coll := gjson.Get(query, "collection").String()
id := query.Get("_id").String()
newObj := query.Get("data").String()
coll := query.Get("collection").String()

newData := gjson.Get(`[`+oldObj+`,`+newObj+`]`, `@join`).Raw

Expand All @@ -191,22 +192,22 @@ func (db *DB) updateById(query string) (result string) {
}

// Find finds any obs match creteria.
func (db *DB) findMany(query string) (res string) {
func (db *DB) findMany(query gjson.Result) (res string) {

// TODO parse hol qury one time
coll := gjson.Get(query, "collection").String()
coll := query.Get("collection").String()
if coll == "" {
return `{"error":"forgot collection name "}`
}

mtch := gjson.Get(query, "match")
mtch := query.Get("match")

if mtch.String() == "" {

}

skip := gjson.Get(query, "skip").Int()
limit := gjson.Get(query, "limit").Int()
skip := query.Get("skip").Int()
limit := query.Get("limit").Int()
if limit == 0 {
limit = 100 // what is default setting ?
}
Expand Down Expand Up @@ -251,7 +252,7 @@ func (db *DB) findMany(query string) (res string) {
// TODO aggrigate here

// remove|rename some fields
flds := gjson.Get(query, "fields")
flds := query.Get("fields")
listData = fields(listData, flds)

records := "["
Expand All @@ -268,11 +269,9 @@ func (db *DB) findMany(query string) (res string) {
}

// Finds first obj match creteria.
func (db *DB) findOne(query string) (res string) {
coll := gjson.Get(query, "collection").String()

mtch := gjson.Get(query, "match")
skip := gjson.Get(query, "skip").Int()
func (db *DB) findOne(query gjson.Result) (res string) {
coll := query.Get("collection").String()
skip := query.Get("skip").Int()

// TODO are skyp useful here ?

Expand All @@ -284,6 +283,7 @@ func (db *DB) findOne(query string) (res string) {
}
defer rows.Close()

mtch := query.Get("match")
record := ""
for rows.Next() {
if skip != 0 {
Expand All @@ -308,10 +308,9 @@ func (db *DB) findOne(query string) (res string) {
}

// delete
func (db *DB) deleteOne(query string) string {
func (db *DB) deleteOne(query gjson.Result) string {

coll := gjson.Get(query, "collection").String()
mtch := gjson.Get(query, "match")
coll := query.Get("collection").String()

stmt := `select rowid, record from ` + coll

Expand All @@ -322,7 +321,7 @@ func (db *DB) deleteOne(query string) string {

rowid := "0"
record := ""

mtch := query.Get("match")
for rows.Next() {
record = ""
rowid = ""
Expand Down Expand Up @@ -352,9 +351,9 @@ func (db *DB) deleteOne(query string) string {
}

// Finds first obj match creteria.
func (db *DB) findById(query string) (res string) {
coll := gjson.Get(query, "collection").String()
id := gjson.Get(query, "_id").String()
func (db *DB) findById(query gjson.Result) (res string) {
coll := query.Get("collection").String()
id := query.Get("_id").String()

stmt := `select record from ` + coll + ` where rowid = ` + id

Expand All @@ -380,9 +379,9 @@ func (db *DB) findById(query string) (res string) {
}

// Insert
func (db *DB) insertOne(query string) (res string) {
coll := gjson.Get(query, "collection").String()
data := gjson.Get(query, "data").String()
func (db *DB) insertOne(query gjson.Result) (res string) {
coll := query.Get("collection").String()
data := query.Get("data").String()

err := db.insert(coll, data)
if err != nil {
Expand All @@ -393,12 +392,12 @@ func (db *DB) insertOne(query string) (res string) {
}

// delete by id
func (db *DB) deleteById(query string) string {
id := gjson.Get(query, "_id").String()
func (db *DB) deleteById(query gjson.Result) string {
id := query.Get("_id").String()
if id == "" {
return `{"error": "there is no _id"}`
}
coll := gjson.Get(query, "collection").String()
coll := query.Get("collection").String()
if coll == "" {
return `{"error": "there is no collection"}`
}
Expand Down
6 changes: 3 additions & 3 deletions engine/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ func NewDB(dbName string) *DB {
}

// InsertMany inserts list of object at one time
func (db *DB) insertMany(query string) (res string) {
coll := gjson.Get(query, "collection").String()
data := gjson.Get(query, "data").Array()
func (db *DB) insertMany(query gjson.Result) (res string) {
coll := query.Get("collection").String()
data := query.Get("data").Array()

//d := strings.TrimLeft(obj, " ")
// if len(d) == 0 {return fmt.Sprintf("len data is 0 %s\n", d)}
Expand Down
6 changes: 3 additions & 3 deletions engine/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import (

var str = fmt.Sprint

func transaction(query string) string {
func transaction(query gjson.Result) string {

actions := gjson.Get(query, "transaction").Array()
actions := query.Get("transaction").Array()
start := "t " + str(len(actions)) + "\n"
_ = start
for k, v := range actions {

fmt.Println(k, v)
}
return "actions done"
return "not implement yet"
}
8 changes: 5 additions & 3 deletions static/shell.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ <h4>examples</h4>
<p>insertMany inserts many data objects at one time 'bulk'</p>
{action:"insertMany", collection:"test", data:[{name:"jalal", age:23},{name:"akram", age:30},{name:"hasna", age:35}]}

<p> select one object</p>
<p>select one object</p>
{action:"findOne", collection:"users", match:{name:"adam"}}

<p> select objects match conditions</p>
<p>select objects match conditions</p>
{action:"findMany", collection:"users", match:{name:"adam"}}

<p>select objects that match the conditions</p>
Expand All @@ -47,10 +47,12 @@ <h4>examples</h4>

<p>select objects that match any value </p>
{action:"findMany", collection:"users", match:{ age:{$in:[12, 23, 34]}}}
</br>
{action:"findMany", collection:"users", match:{ name:{$in:["akram", "zaid"]}}}

<p>select objects that do not match any value</p>
{action:"findMany", collection:"users", match:{ age:{$in:[12, 23, 34]}}}
{action:"findMany", collection:"users", match:{ age:{$nin:[12, 23, 34]}}}
</br>
{action:"findMany", collection:"users", match:{ name:{$nin:["akram", "zaid"]}}}

<p>select objects that match any conditions</p>
Expand Down

0 comments on commit f44dce2

Please sign in to comment.