mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-23 19:43:09 +00:00
bson support meta array
This commit is contained in:
95
test/testbson.lua
Normal file
95
test/testbson.lua
Normal file
@@ -0,0 +1,95 @@
|
||||
local bson = require "bson"
|
||||
|
||||
sub = bson.encode_order( "hello", 1, "world", 2 )
|
||||
|
||||
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))
|
||||
Reference in New Issue
Block a user