mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2026-01-04 17:20:58 +07:00
little unroll some defer operations
This commit is contained in:
@@ -5120,3 +5120,450 @@ do
|
|||||||
assert(c4 and #c4 == 1 and c4[1] == 4)
|
assert(c4 and #c4 == 1 and c4[1] == 4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local f0, f1, f2, f3, f4 = evo.id(5)
|
||||||
|
|
||||||
|
evo.set(f0, evo.CONSTRUCT, function()
|
||||||
|
return 42
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f1, evo.CONSTRUCT, function(a1)
|
||||||
|
return a1
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f2, evo.CONSTRUCT, function(a1, a2)
|
||||||
|
return a1 + a2
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f3, evo.CONSTRUCT, function(a1, a2, a3)
|
||||||
|
return a1 + a2 + a3
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f4, evo.CONSTRUCT, function(a1, a2, a3, a4)
|
||||||
|
return a1 + a2 + a3 + a4
|
||||||
|
end)
|
||||||
|
|
||||||
|
do
|
||||||
|
local e1 = evo.id()
|
||||||
|
evo.set(e1, f0)
|
||||||
|
evo.set(e1, f1, 1)
|
||||||
|
evo.set(e1, f2, 1, 2)
|
||||||
|
evo.set(e1, f3, 1, 2, 3)
|
||||||
|
evo.set(e1, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.id()
|
||||||
|
evo.insert(e1, f0)
|
||||||
|
evo.insert(e1, f1, 1)
|
||||||
|
evo.insert(e1, f2, 1, 2)
|
||||||
|
evo.insert(e1, f3, 1, 2, 3)
|
||||||
|
evo.insert(e1, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.id()
|
||||||
|
evo.multi_insert(e1, { f0, f1, f2, f3, f4 })
|
||||||
|
evo.assign(e1, f0)
|
||||||
|
evo.assign(e1, f1, 1)
|
||||||
|
evo.assign(e1, f2, 1, 2)
|
||||||
|
evo.assign(e1, f3, 1, 2, 3)
|
||||||
|
evo.assign(e1, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1, e2, e3, e4 = evo.id(4)
|
||||||
|
evo.multi_insert(e1, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e2, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e3, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e4, { f1, f2, f3, f4 })
|
||||||
|
evo.remove(e1, f0, f1)
|
||||||
|
evo.remove(e2, f0, f1, f2)
|
||||||
|
evo.remove(e3, f0, f1, f2, f3)
|
||||||
|
evo.remove(e4, f0, f1, f2, f3, f4)
|
||||||
|
assert(evo.get(e1, f1) == nil and evo.get(e1, f2) == true and evo.get(e1, f3) == true and evo.get(e1, f4) == true)
|
||||||
|
assert(evo.get(e2, f1) == nil and evo.get(e2, f2) == nil and evo.get(e2, f3) == true and evo.get(e2, f4) == true)
|
||||||
|
assert(evo.get(e3, f1) == nil and evo.get(e3, f2) == nil and evo.get(e3, f3) == nil and evo.get(e3, f4) == true)
|
||||||
|
assert(evo.get(e4, f1) == nil and evo.get(e4, f2) == nil and evo.get(e4, f3) == nil and evo.get(e4, f4) == nil)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1, e2 = evo.id(2)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.set(e1, f0)
|
||||||
|
evo.set(e1, f1, 1)
|
||||||
|
evo.set(e1, f2, 1, 2)
|
||||||
|
evo.set(e1, f3, 1, 2, 3)
|
||||||
|
evo.set(e1, f4, 1, 2, 3, 4)
|
||||||
|
evo.set(e2, f0)
|
||||||
|
evo.set(e2, f1, 1)
|
||||||
|
evo.set(e2, f2, 1, 2)
|
||||||
|
evo.set(e2, f3, 1, 2, 3)
|
||||||
|
evo.set(e2, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1, e2 = evo.id(2)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.insert(e1, f0)
|
||||||
|
evo.insert(e1, f1, 1)
|
||||||
|
evo.insert(e1, f2, 1, 2)
|
||||||
|
evo.insert(e1, f3, 1, 2, 3)
|
||||||
|
evo.insert(e1, f4, 1, 2, 3, 4)
|
||||||
|
evo.insert(e2, f0)
|
||||||
|
evo.insert(e2, f1, 1)
|
||||||
|
evo.insert(e2, f2, 1, 2)
|
||||||
|
evo.insert(e2, f3, 1, 2, 3)
|
||||||
|
evo.insert(e2, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1, e2 = evo.id(2)
|
||||||
|
evo.multi_insert(e1, { f0, f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e2, { f0, f1, f2, f3, f4 })
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.assign(e1, f0)
|
||||||
|
evo.assign(e1, f1, 1)
|
||||||
|
evo.assign(e1, f2, 1, 2)
|
||||||
|
evo.assign(e1, f3, 1, 2, 3)
|
||||||
|
evo.assign(e1, f4, 1, 2, 3, 4)
|
||||||
|
evo.assign(e2, f0)
|
||||||
|
evo.assign(e2, f1, 1)
|
||||||
|
evo.assign(e2, f2, 1, 2)
|
||||||
|
evo.assign(e2, f3, 1, 2, 3)
|
||||||
|
evo.assign(e2, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1, e2, e3, e4 = evo.id(4)
|
||||||
|
evo.multi_insert(e1, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e2, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e3, { f1, f2, f3, f4 })
|
||||||
|
evo.multi_insert(e4, { f1, f2, f3, f4 })
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.remove(e1, f1)
|
||||||
|
evo.remove(e2, f1, f2)
|
||||||
|
evo.remove(e3, f1, f2, f3)
|
||||||
|
evo.remove(e4, f1, f2, f3, f4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == nil and evo.get(e1, f2) == true and evo.get(e1, f3) == true and evo.get(e1, f4) == true)
|
||||||
|
assert(evo.get(e2, f1) == nil and evo.get(e2, f2) == nil and evo.get(e2, f3) == true and evo.get(e2, f4) == true)
|
||||||
|
assert(evo.get(e3, f1) == nil and evo.get(e3, f2) == nil and evo.get(e3, f3) == nil and evo.get(e3, f4) == true)
|
||||||
|
assert(evo.get(e4, f1) == nil and evo.get(e4, f2) == nil and evo.get(e4, f3) == nil and evo.get(e4, f4) == nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local fa, f0, f1, f2, f3, f4 = evo.id(6)
|
||||||
|
local q0 = evo.query():include(fa):build()
|
||||||
|
|
||||||
|
evo.set(f0, evo.CONSTRUCT, function()
|
||||||
|
return 42
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f1, evo.CONSTRUCT, function(a1)
|
||||||
|
return a1
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f2, evo.CONSTRUCT, function(a1, a2)
|
||||||
|
return a1 + a2
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f3, evo.CONSTRUCT, function(a1, a2, a3)
|
||||||
|
return a1 + a2 + a3
|
||||||
|
end)
|
||||||
|
|
||||||
|
evo.set(f4, evo.CONSTRUCT, function(a1, a2, a3, a4)
|
||||||
|
return a1 + a2 + a3 + a4
|
||||||
|
end)
|
||||||
|
|
||||||
|
do
|
||||||
|
local e1 = evo.entity():set(fa):build()
|
||||||
|
local e2 = evo.entity():set(fa):build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f0)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f1, 1)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f2, 1, 2)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f3, 1, 2, 3)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_set(q0, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity():set(fa):build()
|
||||||
|
local e2 = evo.entity():set(fa):build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f0)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f1, 1)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f2, 1, 2)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f3, 1, 2, 3)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity():set(fa):build()
|
||||||
|
local e2 = evo.entity():set(fa):build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f0, 0)
|
||||||
|
evo.batch_assign(q0, f0)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f1, 0)
|
||||||
|
evo.batch_assign(q0, f1, 1)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f2, 0, 0)
|
||||||
|
evo.batch_assign(q0, f2, 1, 2)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f3, 0, 0, 0)
|
||||||
|
evo.batch_assign(q0, f3, 1, 2, 3)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_insert(q0, f4, 0, 0, 0, 0)
|
||||||
|
evo.batch_assign(q0, f4, 1, 2, 3, 4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f0) == 42)
|
||||||
|
assert(evo.get(e2, f0) == 42)
|
||||||
|
assert(evo.get(e1, f1) == 1)
|
||||||
|
assert(evo.get(e1, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e1, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
|
||||||
|
assert(evo.get(e2, f1) == 1)
|
||||||
|
assert(evo.get(e2, f2) == 1 + 2)
|
||||||
|
assert(evo.get(e2, f3) == 1 + 2 + 3)
|
||||||
|
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:build()
|
||||||
|
local e2 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_remove(q0)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, fa) == true)
|
||||||
|
assert(evo.get(e2, fa) == true)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:build()
|
||||||
|
local e2 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_remove(q0, f1)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == nil)
|
||||||
|
assert(evo.get(e2, f1) == nil)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:build()
|
||||||
|
local e2 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_remove(q0, f1, f2)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == nil)
|
||||||
|
assert(evo.get(e2, f1) == nil)
|
||||||
|
assert(evo.get(e1, f2) == nil)
|
||||||
|
assert(evo.get(e2, f2) == nil)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:set(f3, 1, 2, 3)
|
||||||
|
:build()
|
||||||
|
local e2 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:set(f3, 1, 2, 3)
|
||||||
|
:build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_remove(q0, f1, f2, f3)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == nil)
|
||||||
|
assert(evo.get(e2, f1) == nil)
|
||||||
|
assert(evo.get(e1, f2) == nil)
|
||||||
|
assert(evo.get(e2, f2) == nil)
|
||||||
|
assert(evo.get(e1, f3) == nil)
|
||||||
|
assert(evo.get(e2, f3) == nil)
|
||||||
|
end
|
||||||
|
do
|
||||||
|
local e1 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:set(f3, 1, 2, 3)
|
||||||
|
:set(f4, 1, 2, 3, 4)
|
||||||
|
:build()
|
||||||
|
local e2 = evo.entity()
|
||||||
|
:set(fa)
|
||||||
|
:set(f1, 1)
|
||||||
|
:set(f2, 1, 2)
|
||||||
|
:set(f3, 1, 2, 3)
|
||||||
|
:set(f4, 1, 2, 3, 4)
|
||||||
|
:build()
|
||||||
|
assert(evo.defer())
|
||||||
|
evo.batch_remove(q0, f1, f2, f3, f4)
|
||||||
|
assert(evo.commit())
|
||||||
|
assert(evo.get(e1, f1) == nil)
|
||||||
|
assert(evo.get(e2, f1) == nil)
|
||||||
|
assert(evo.get(e1, f2) == nil)
|
||||||
|
assert(evo.get(e2, f2) == nil)
|
||||||
|
assert(evo.get(e1, f3) == nil)
|
||||||
|
assert(evo.get(e2, f3) == nil)
|
||||||
|
assert(evo.get(e1, f4) == nil)
|
||||||
|
assert(evo.get(e2, f4) == nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
360
evolved.lua
360
evolved.lua
@@ -2339,8 +2339,28 @@ local function __defer_set(entity, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2350,7 +2370,26 @@ __defer_ops[__defer_op.set] = function(bytes, index)
|
|||||||
local entity = bytes[index + 0]
|
local entity = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.set(entity, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local set = evolved.set
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
set(entity, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
set(entity, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
set(entity, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
set(entity, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
set(entity, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2368,8 +2407,28 @@ local function __defer_assign(entity, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2379,7 +2438,26 @@ __defer_ops[__defer_op.assign] = function(bytes, index)
|
|||||||
local entity = bytes[index + 0]
|
local entity = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.assign(entity, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local assign = evolved.assign
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
assign(entity, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
assign(entity, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
assign(entity, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
assign(entity, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
assign(entity, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2397,8 +2475,28 @@ local function __defer_insert(entity, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2408,7 +2506,26 @@ __defer_ops[__defer_op.insert] = function(bytes, index)
|
|||||||
local entity = bytes[index + 0]
|
local entity = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.insert(entity, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local insert = evolved.insert
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
insert(entity, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
insert(entity, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
insert(entity, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
insert(entity, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
insert(entity, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2425,8 +2542,28 @@ local function __defer_remove(entity, ...)
|
|||||||
bytecode[length + 2] = entity
|
bytecode[length + 2] = entity
|
||||||
bytecode[length + 3] = fragment_count
|
bytecode[length + 3] = fragment_count
|
||||||
|
|
||||||
for i = 1, fragment_count do
|
if fragment_count == 0 then
|
||||||
bytecode[length + 3 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif fragment_count == 1 then
|
||||||
|
local f1 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
elseif fragment_count == 2 then
|
||||||
|
local f1, f2 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
elseif fragment_count == 3 then
|
||||||
|
local f1, f2, f3 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
bytecode[length + 6] = f3
|
||||||
|
else
|
||||||
|
local f1, f2, f3 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
bytecode[length + 6] = f3
|
||||||
|
for i = 4, fragment_count do
|
||||||
|
bytecode[length + 3 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 3 + fragment_count
|
__defer_length = length + 3 + fragment_count
|
||||||
@@ -2435,7 +2572,26 @@ end
|
|||||||
__defer_ops[__defer_op.remove] = function(bytes, index)
|
__defer_ops[__defer_op.remove] = function(bytes, index)
|
||||||
local entity = bytes[index + 0]
|
local entity = bytes[index + 0]
|
||||||
local fragment_count = bytes[index + 1]
|
local fragment_count = bytes[index + 1]
|
||||||
evolved.remove(entity, __table_unpack(bytes, index + 2, index + 1 + fragment_count))
|
|
||||||
|
local remove = evolved.remove
|
||||||
|
|
||||||
|
if fragment_count == 0 then
|
||||||
|
-- nothing
|
||||||
|
elseif fragment_count == 1 then
|
||||||
|
local f1 = bytes[index + 2]
|
||||||
|
remove(entity, f1)
|
||||||
|
elseif fragment_count == 2 then
|
||||||
|
local f1, f2 = bytes[index + 2], bytes[index + 3]
|
||||||
|
remove(entity, f1, f2)
|
||||||
|
elseif fragment_count == 3 then
|
||||||
|
local f1, f2, f3 = bytes[index + 2], bytes[index + 3], bytes[index + 4]
|
||||||
|
remove(entity, f1, f2, f3)
|
||||||
|
else
|
||||||
|
local f1, f2, f3 = bytes[index + 2], bytes[index + 3], bytes[index + 4]
|
||||||
|
remove(entity, f1, f2, f3,
|
||||||
|
__table_unpack(bytes, index + 5, index + 1 + fragment_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 2 + fragment_count
|
return 2 + fragment_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2611,8 +2767,28 @@ local function __defer_batch_set(query, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2622,7 +2798,26 @@ __defer_ops[__defer_op.batch_set] = function(bytes, index)
|
|||||||
local query = bytes[index + 0]
|
local query = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.batch_set(query, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local batch_set = evolved.batch_set
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
batch_set(query, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
batch_set(query, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
batch_set(query, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_set(query, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_set(query, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2640,8 +2835,28 @@ local function __defer_batch_assign(query, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2651,7 +2866,26 @@ __defer_ops[__defer_op.batch_assign] = function(bytes, index)
|
|||||||
local query = bytes[index + 0]
|
local query = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.batch_assign(query, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local batch_assign = evolved.batch_assign
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
batch_assign(query, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
batch_assign(query, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
batch_assign(query, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_assign(query, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_assign(query, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2669,8 +2903,28 @@ local function __defer_batch_insert(query, fragment, ...)
|
|||||||
bytecode[length + 3] = fragment
|
bytecode[length + 3] = fragment
|
||||||
bytecode[length + 4] = argument_count
|
bytecode[length + 4] = argument_count
|
||||||
|
|
||||||
for i = 1, argument_count do
|
if argument_count == 0 then
|
||||||
bytecode[length + 4 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = select(1, ...)
|
||||||
|
bytecode[length + 5] = a1
|
||||||
|
bytecode[length + 6] = a2
|
||||||
|
bytecode[length + 7] = a3
|
||||||
|
for i = 4, argument_count do
|
||||||
|
bytecode[length + 4 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 4 + argument_count
|
__defer_length = length + 4 + argument_count
|
||||||
@@ -2680,7 +2934,26 @@ __defer_ops[__defer_op.batch_insert] = function(bytes, index)
|
|||||||
local query = bytes[index + 0]
|
local query = bytes[index + 0]
|
||||||
local fragment = bytes[index + 1]
|
local fragment = bytes[index + 1]
|
||||||
local argument_count = bytes[index + 2]
|
local argument_count = bytes[index + 2]
|
||||||
evolved.batch_insert(query, fragment, __table_unpack(bytes, index + 3, index + 2 + argument_count))
|
|
||||||
|
local batch_insert = evolved.batch_insert
|
||||||
|
|
||||||
|
if argument_count == 0 then
|
||||||
|
batch_insert(query, fragment)
|
||||||
|
elseif argument_count == 1 then
|
||||||
|
local a1 = bytes[index + 3]
|
||||||
|
batch_insert(query, fragment, a1)
|
||||||
|
elseif argument_count == 2 then
|
||||||
|
local a1, a2 = bytes[index + 3], bytes[index + 4]
|
||||||
|
batch_insert(query, fragment, a1, a2)
|
||||||
|
elseif argument_count == 3 then
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_insert(query, fragment, a1, a2, a3)
|
||||||
|
else
|
||||||
|
local a1, a2, a3 = bytes[index + 3], bytes[index + 4], bytes[index + 5]
|
||||||
|
batch_insert(query, fragment, a1, a2, a3,
|
||||||
|
__table_unpack(bytes, index + 6, index + 2 + argument_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 3 + argument_count
|
return 3 + argument_count
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2697,8 +2970,28 @@ local function __defer_batch_remove(query, ...)
|
|||||||
bytecode[length + 2] = query
|
bytecode[length + 2] = query
|
||||||
bytecode[length + 3] = fragment_count
|
bytecode[length + 3] = fragment_count
|
||||||
|
|
||||||
for i = 1, fragment_count do
|
if fragment_count == 0 then
|
||||||
bytecode[length + 3 + i] = select(i, ...)
|
-- nothing
|
||||||
|
elseif fragment_count == 1 then
|
||||||
|
local f1 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
elseif fragment_count == 2 then
|
||||||
|
local f1, f2 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
elseif fragment_count == 3 then
|
||||||
|
local f1, f2, f3 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
bytecode[length + 6] = f3
|
||||||
|
else
|
||||||
|
local f1, f2, f3 = select(1, ...)
|
||||||
|
bytecode[length + 4] = f1
|
||||||
|
bytecode[length + 5] = f2
|
||||||
|
bytecode[length + 6] = f3
|
||||||
|
for i = 4, fragment_count do
|
||||||
|
bytecode[length + 3 + i] = select(i, ...)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__defer_length = length + 3 + fragment_count
|
__defer_length = length + 3 + fragment_count
|
||||||
@@ -2707,7 +3000,26 @@ end
|
|||||||
__defer_ops[__defer_op.batch_remove] = function(bytes, index)
|
__defer_ops[__defer_op.batch_remove] = function(bytes, index)
|
||||||
local query = bytes[index + 0]
|
local query = bytes[index + 0]
|
||||||
local fragment_count = bytes[index + 1]
|
local fragment_count = bytes[index + 1]
|
||||||
evolved.batch_remove(query, __table_unpack(bytes, index + 2, index + 1 + fragment_count))
|
|
||||||
|
local batch_remove = evolved.batch_remove
|
||||||
|
|
||||||
|
if fragment_count == 0 then
|
||||||
|
-- nothing
|
||||||
|
elseif fragment_count == 1 then
|
||||||
|
local f1 = bytes[index + 2]
|
||||||
|
batch_remove(query, f1)
|
||||||
|
elseif fragment_count == 2 then
|
||||||
|
local f1, f2 = bytes[index + 2], bytes[index + 3]
|
||||||
|
batch_remove(query, f1, f2)
|
||||||
|
elseif fragment_count == 3 then
|
||||||
|
local f1, f2, f3 = bytes[index + 2], bytes[index + 3], bytes[index + 4]
|
||||||
|
batch_remove(query, f1, f2, f3)
|
||||||
|
else
|
||||||
|
local f1, f2, f3 = bytes[index + 2], bytes[index + 3], bytes[index + 4]
|
||||||
|
batch_remove(query, f1, f2, f3,
|
||||||
|
__table_unpack(bytes, index + 5, index + 1 + fragment_count))
|
||||||
|
end
|
||||||
|
|
||||||
return 2 + fragment_count
|
return 2 + fragment_count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user