1 # -*- coding: utf-8 -*-
2 ##############################################################################
4 # mojo, a Python library for implementing document based databases
5 # Copyright (C) 2013-2014 by Javier Sancho Fernandez <jsf at jsancho dot org>
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ##############################################################################
22 from database import Database
25 class Connection(object):
29 Constraint = dbutils.Constraint
30 Literal = dbutils.Literal
32 def __init__(self, serializer=None, *args, **kwargs):
33 if serializer is None:
35 self.serializer = msgpack
37 self.serializer = serializer
39 def __getattr__(self, db_name):
40 return Database(self, db_name)
42 def __getitem__(self, *args, **kwargs):
43 return self.__getattr__(*args, **kwargs)
46 return "Connection(%s)" % self._db_con
48 def _get_databases(self):
51 def database_names(self):
53 return [str(x) for x in self._get_databases()]
57 def _get_tables(self, db_name):
60 def collection_names(self, db_name):
62 return list(set([str(x.split('$')[0]) for x in filter(lambda x: '$' in x, self._get_tables(db_name))]))
66 def _count_rows(self, db_name, table_name):
69 def _count(self, db_name, table_name):
71 return self._count_rows(db_name, table_name + '$_id')
75 def _create_database(self, db_name):
78 def _create_table(self, db_name, table_name, fields):
79 # [{'name': 'id', 'type': 'char', 'size': 20, 'primary': True}]
82 def _get_cursor(self, query):
85 def _next(self, db_name, cursor):
88 def _insert(self, db_name, table_name, values):
97 def savepoint(self, name):
100 def commit_savepoint(self, name):
103 def rollback_savepoint(self, name):