103 lines
1.5 KiB
Lua
103 lines
1.5 KiB
Lua
local bson = require "bson"
|
|
|
|
local sub = bson.encode_order( "hello", 1, "world", 2 )
|
|
|
|
do
|
|
-- check decode encode_order
|
|
local d = bson.decode(sub)
|
|
assert(d.hello == 1 )
|
|
assert(d.world == 2 )
|
|
end
|
|
|
|
local function tbl_next(...)
|
|
print("--- next.a", ...)
|
|
local k, v = next(...)
|
|
print("--- next.b", k, v)
|
|
return k, v
|
|
end
|
|
|
|
local function tbl_pairs(obj)
|
|
return tbl_next, obj.__data, nil
|
|
end
|
|
|
|
local obj_a = {
|
|
__data = {
|
|
["1"] = 2,
|
|
["3"] = 4,
|
|
["5"] = 6,
|
|
}
|
|
}
|
|
|
|
setmetatable(
|
|
obj_a,
|
|
{
|
|
__index = obj_a.__data,
|
|
__pairs = tbl_pairs,
|
|
}
|
|
)
|
|
|
|
local obj_b = {
|
|
__data = {
|
|
["7"] = 8,
|
|
["9"] = 10,
|
|
["11"] = obj_a,
|
|
}
|
|
}
|
|
|
|
setmetatable(
|
|
obj_b,
|
|
{
|
|
__index = obj_b.__data,
|
|
__pairs = tbl_pairs,
|
|
}
|
|
)
|
|
|
|
local metaarray = setmetatable({ n = 5 }, {
|
|
__len = function(self) return self.n end,
|
|
__index = function(self, idx) return tostring(idx) end,
|
|
})
|
|
|
|
b = bson.encode {
|
|
a = 1,
|
|
b = true,
|
|
c = bson.null,
|
|
d = { 1,2,3,4 },
|
|
e = bson.binary "hello",
|
|
f = bson.regex ("*","i"),
|
|
g = bson.regex "hello",
|
|
h = bson.date (os.time()),
|
|
i = bson.timestamp(os.time()),
|
|
j = bson.objectid(),
|
|
k = { a = false, b = true },
|
|
l = {},
|
|
m = bson.minkey,
|
|
n = bson.maxkey,
|
|
o = sub,
|
|
p = 2^32-1,
|
|
q = obj_b,
|
|
r = metaarray,
|
|
}
|
|
|
|
print "\n[before replace]"
|
|
t = b:decode()
|
|
|
|
for k, v in pairs(t) do
|
|
print(k,type(v))
|
|
end
|
|
|
|
for k,v in ipairs(t.r) do
|
|
print(k,v)
|
|
end
|
|
|
|
b:makeindex()
|
|
b.a = 2
|
|
b.b = false
|
|
b.h = bson.date(os.time())
|
|
b.i = bson.timestamp(os.time())
|
|
b.j = bson.objectid()
|
|
|
|
print "\n[after replace]"
|
|
t = b:decode()
|
|
|
|
print("o.hello", bson.type(t.o.hello))
|