diff src/luan/modules/lucene/Lucene.luan @ 1429:82415c9c0015

move versioning into Lucene
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 24 Nov 2019 23:07:21 -0700
parents a076e89a2879
children f3a417074cea
line wrap: on
line diff
--- a/src/luan/modules/lucene/Lucene.luan	Sun Nov 24 21:02:38 2019 -0700
+++ b/src/luan/modules/lucene/Lucene.luan	Sun Nov 24 23:07:21 2019 -0700
@@ -2,10 +2,13 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
+local pairs = Luan.pairs or error()
 local type = Luan.type or error()
 local set_metatable = Luan.set_metatable or error()
 local Boot = require "luan:Boot.luan"
 local Html = require "luan:Html.luan"
+local Number = require "luan:Number.luan"
+local integer = Number.integer or error()
 local Io = require "luan:Io.luan"
 local uri = Io.uri or error()
 local String = require "luan:String.luan"
@@ -159,6 +162,25 @@
 	end
 	index.restore = Boot.no_security(index.restore)
 
+	function index.update(steps)
+		local version = 0
+		for i in pairs(steps) do
+			if version < i then
+				version = i
+			end
+		end
+		local doc = index.get_document"type:version" or { type="version", version=integer(0) }
+		while doc.version < version do
+			doc.version = integer(doc.version + 1)
+			logger.error("step "..doc.version)
+			index.run_in_transaction( function()
+				local step = steps[doc.version] or error("missing step "..doc.version)
+				step()
+				index.save(doc)
+			end )
+		end
+	end
+
 	local function multi_error()
 		error "multiple lucene instances"
 	end