queries wip

This commit is contained in:
BlackMATov
2024-12-26 23:28:33 +07:00
parent c139682b01
commit e56833e72e
2 changed files with 55 additions and 30 deletions

View File

@@ -665,38 +665,54 @@ do
end end
do do
local f1, f2, f3, f4 = evo.id(4) local f1, f2, f3, f4, f5 = evo.id(5)
local e1 = evo.id()
assert(evo.insert(e1, f1, 41))
local e2 = evo.id()
assert(evo.insert(e2, f1, 41))
assert(evo.insert(e2, f2, 42))
local e3 = evo.id()
assert(evo.insert(e3, f1, 43))
assert(evo.insert(e3, f2, 44))
assert(evo.insert(e3, f3, 45))
local e4 = evo.id()
assert(evo.insert(e4, f1, 45))
assert(evo.insert(e4, f2, 46))
assert(evo.insert(e4, f3, 47))
assert(evo.insert(e4, f4, 48))
local e5 = evo.id()
assert(evo.insert(e5, f1, 49))
assert(evo.insert(e5, f2, 50))
assert(evo.insert(e5, f4, 51))
local e6 = evo.id()
assert(evo.insert(e6, f1, 49))
assert(evo.insert(e6, f2, 50))
assert(evo.insert(e6, f4, 51))
assert(evo.insert(e6, f5, 52))
local q = evo.id() local q = evo.id()
evo.set(q, evo.INCLUDE_LIST, { f2, f1 }) evo.set(q, evo.INCLUDE_LIST, { f2, f1 })
evo.set(q, evo.EXCLUDE_LIST, { f3 }) evo.set(q, evo.EXCLUDE_LIST, { f3 })
do for chunk in evo.execute(q) do
local e1 = evo.id() print(chunk)
assert(evo.insert(e1, f1, 41)) end
local e2 = evo.id() evo.remove(q, evo.EXCLUDE_LIST)
assert(evo.insert(e2, f1, 41))
assert(evo.insert(e2, f2, 42))
local e3 = evo.id() for chunk in evo.execute(q) do
assert(evo.insert(e3, f1, 43)) print(chunk)
assert(evo.insert(e3, f2, 44)) end
assert(evo.insert(e3, f3, 45))
local e4 = evo.id() evo.remove(q, evo.INCLUDE_LIST)
assert(evo.insert(e4, f1, 45))
assert(evo.insert(e4, f2, 46))
assert(evo.insert(e4, f3, 47))
assert(evo.insert(e4, f4, 48))
local e5 = evo.id() for chunk in evo.execute(q) do
assert(evo.insert(e5, f1, 49)) print(chunk)
assert(evo.insert(e5, f2, 50))
assert(evo.insert(e5, f4, 51))
for chunk in evo.execute(q) do
print(chunk)
end
end end
end end

View File

@@ -1172,10 +1172,18 @@ assert(evolved.insert(evolved.INCLUDE_LIST, evolved.CONSTRUCT, function(_, _, in
return include_list or {} return include_list or {}
end)) end))
assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_REMOVE, function(query)
evolved.remove(query, __INCLUDE_SET, __SORTED_INCLUDE_LIST)
end))
assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.CONSTRUCT, function(_, _, exclude_list) assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.CONSTRUCT, function(_, _, exclude_list)
return exclude_list or {} return exclude_list or {}
end)) end))
assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.ON_REMOVE, function(query)
evolved.remove(query, __EXCLUDE_SET, __SORTED_EXCLUDE_LIST)
end))
---@param query evolved.query ---@param query evolved.query
---@param include_list? evolved.entity[] ---@param include_list? evolved.entity[]
assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_SET, function(query, _, include_list) assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_SET, function(query, _, include_list)
@@ -1193,8 +1201,6 @@ assert(evolved.insert(evolved.INCLUDE_LIST, evolved.ON_SET, function(query, _, i
evolved.set(query, __INCLUDE_SET, include_set) evolved.set(query, __INCLUDE_SET, include_set)
evolved.set(query, __SORTED_INCLUDE_LIST, sorted_include_list) evolved.set(query, __SORTED_INCLUDE_LIST, sorted_include_list)
evolved.insert(query, evolved.EXCLUDE_LIST)
end)) end))
---@param query evolved.query ---@param query evolved.query
@@ -1214,8 +1220,6 @@ assert(evolved.insert(evolved.EXCLUDE_LIST, evolved.ON_SET, function(query, _, e
evolved.set(query, __EXCLUDE_SET, exclude_set) evolved.set(query, __EXCLUDE_SET, exclude_set)
evolved.set(query, __SORTED_EXCLUDE_LIST, sorted_exclude_list) evolved.set(query, __SORTED_EXCLUDE_LIST, sorted_exclude_list)
evolved.insert(query, evolved.INCLUDE_LIST)
end)) end))
---@return evolved.execution_stack ---@return evolved.execution_stack
@@ -1242,7 +1246,8 @@ end
---@return evolved.execution_stack ---@return evolved.execution_stack
---@nodiscard ---@nodiscard
local function __acquire_execution_state(query) local function __acquire_execution_state(query)
local exclude_set = evolved.get(query, __EXCLUDE_SET) ---@type table<evolved.fragment, boolean>
local exclude_set = evolved.get(query, __EXCLUDE_SET) or {}
if #__execution_states == 0 then if #__execution_states == 0 then
local stack = __acquire_execution_stack() local stack = __acquire_execution_stack()
@@ -1303,10 +1308,14 @@ end
---@return evolved.execution_state? ---@return evolved.execution_state?
---@nodiscard ---@nodiscard
function evolved.execute(query) function evolved.execute(query)
---@type evolved.fragment[]?, evolved.fragment[]?
local include_list, exclude_list = evolved.get(query, local include_list, exclude_list = evolved.get(query,
__SORTED_INCLUDE_LIST, __SORTED_EXCLUDE_LIST) __SORTED_INCLUDE_LIST, __SORTED_EXCLUDE_LIST)
if not include_list or #include_list == 0 then include_list = include_list or {}
exclude_list = exclude_list or {}
if #include_list == 0 then
return __execution_iterator, nil return __execution_iterator, nil
end end