summaryrefslogtreecommitdiffstats
path: root/queued.lua
diff options
context:
space:
mode:
Diffstat (limited to 'queued.lua')
-rw-r--r--queued.lua96
1 files changed, 0 insertions, 96 deletions
diff --git a/queued.lua b/queued.lua
deleted file mode 100644
index d244e61..0000000
--- a/queued.lua
+++ /dev/null
@@ -1,96 +0,0 @@
---
--- This file is part of lem-postgres.
--- Copyright 2011 Emil Renner Berthing
---
--- lem-postgres is free software: you can redistribute it and/or
--- modify it under the terms of the GNU General Public License as
--- published by the Free Software Foundation, either version 3 of
--- the License, or (at your option) any later version.
---
--- lem-postgres is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with lem-postgres. If not, see <http://www.gnu.org/licenses/>.
---
-
-local utils = require 'lem.utils'
-local postgres = require 'lem.postgres'
-
-local QConnection = {}
-QConnection.__index = QConnection
-
-function QConnection:close()
- local ok, err = self.conn:close()
- for i = 1, self.n - 1 do
- self[i]:wakeup()
- self[i] = nil
- end
- return ok, err
-end
-QConnection.__gc = QConnection.close
-
-do
- local remove = table.remove
- local newsleeper = utils.sleeper
-
- local function lock(self)
- local n = self.n
- if n == 0 then
- self.n = 1
- else
- local sleeper = newsleeper()
- self[n] = sleeper
- self.n = n + 1
- sleeper:sleep()
- end
- return self.conn
- end
- QConnection.lock = lock
-
- local function unlock(self, ...)
- local n = self.n - 1
- self.n = n
- if n > 0 then
- remove(self, 1):wakeup()
- end
- return ...
- end
- QConnection.unlock = unlock
-
- local function wrap(method)
- return function(self, ...)
- return unlock(self, method(lock(self), ...))
- end
- end
-
- local Connection = postgres.Connection
- QConnection.exec = wrap(Connection.exec)
- QConnection.prepare = wrap(Connection.prepare)
- QConnection.run = wrap(Connection.run)
-end
-
-local qconnect
-do
- local setmetatable = setmetatable
- local connect = postgres.connect
-
- function qconnect(...)
- local conn, err = connect(...)
- if not conn then return nil, err end
-
- return setmetatable({
- n = 0,
- conn = conn,
- }, QConnection)
- end
-end
-
-return {
- QConnection = QConnection,
- connect = qconnect,
-}
-
--- vim: ts=2 sw=2 noet: