[tarantool-patches] Re: [PATCH v2 3/3] schema: expose space_mt and index_mt on box.schema table

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Tue May 8 20:33:25 MSK 2018


Hello. Thanks for review!

On 08/05/2018 19:48, Konstantin Osipov wrote:
> * Vladislav Shpilevoy <v.shpilevoy at tarantool.org> [18/05/05 23:23]:
> 
> This branch breaks app/luafun.test.lua

Sorry, just noticed that my auto test-runner script skips app/ directory.

Fixed on the branch. The problem was that luafun expects that space/index
metatable contains __ipairs/__pairs metamethods with not proxy via __index.

@@ -1449,7 +1449,12 @@ box.schema.space_mt = space_mt
  -- up at first in self, and only then into the global mt.
  --
  local function wrap_schema_object_mt(name)
-    local mt = { __index = box.schema[name] }
+    local global_mt = box.schema[name]
+    local mt = {
+        __index = global_mt,
+        __ipairs = global_mt.__ipairs,
+        __pairs = global_mt.__pairs
+    }
      local mt_mt = {}
      mt_mt.__newindex = function(t, k, v)
          mt_mt.__newindex = nil  

> 
>> Users requested to be able to extend spaces individually. The
>> patch was reworked to allow this.
>>
>> On 03/04/2018 19:50, Vladislav Shpilevoy wrote:
>>> This commit allows userland to extend the space and index
>>> metatables with their own functions or even metamethods. Reducing
>>> barriers for this kind of experimentation is vital for user
>>> contribution toward the improvement of Tarantool's API.
>>>
>>> There are 4 metatables available for extending:
>>> box.schema.space_mt - metatable of all spaces;
>>> box.schema.index_mt - base metatable of all indexes - replicated
>>>                        into the vinyl and memtx. See below how.
>>> box.schema.vinyl_index_mt - metatable of all vinyl indexes;
>>> box.schema.memtx_index_mt - metatable of all memtx indexes.
>>>
>>> Closes #3204
> 




More information about the Tarantool-patches mailing list