Compare commits

...

13 commits

Author SHA1 Message Date
b4c4d1bb26 use unix line endings for setup.py 2025-10-06 14:11:42 -05:00
dafac32f94 update home page URL for project 2025-10-06 14:11:01 -05:00
bd74701c42 add readme file, to replace old home page
which was at https://sqlalchemy-sa.edbob.org
2025-10-06 14:05:25 -05:00
Lance Edgar
756f0a8e5d bumped version 2010-07-31 20:15:49 -05:00
Lance Edgar
6841f1444a Added tag v0.1b4 for changeset 12904bc2d1e5 2010-07-31 20:09:44 -05:00
Lance Edgar
3ee47ed87f added outer join support...michael was right :)
And once again, thanks to Michael Bayer for forging the way on this one.
The Oracle dialect code was still pretty much copied directly over.
2010-07-31 20:09:17 -05:00
Lance Edgar
8846e9b372 bumped version 2010-06-25 13:01:15 -05:00
Lance Edgar
ef941891e4 Added tag v0.1b3 for changeset faf1f77492bb 2010-06-25 12:59:04 -05:00
Lance Edgar
f7c4a2c2df bumped sqlalchemy requirement
It's been discovered that SQLAlchemy 0.5.2 won't work; some problem with joining the sales log tables.
2010-06-25 12:58:34 -05:00
Lance Edgar
2fd3f190af Bumped version to 0.1b3. 2010-05-28 11:29:49 -05:00
Lance Edgar
c06909f5f4 Added tag v0.1b2 for changeset 610c63f302f7 2010-05-28 11:29:34 -05:00
Lance Edgar
2edda5c7b4 Bumped version to 0.1b2. 2010-05-28 10:34:59 -05:00
Lance Edgar
e1616260af Added tag v0.1b1 for changeset fa58f0f4ac2c 2010-05-28 10:34:37 -05:00
4 changed files with 157 additions and 89 deletions

43
README.md Normal file
View file

@ -0,0 +1,43 @@
# SQLBase7-SA
SQLBase7-SA is a SQLAlchemy driver/dialect for the Centura SQLBase
database, specifically version 7.5.1.
## About the Project
From what I can tell, SQLBase is still an actively-developed database,
but it is no longer owned by Centura (see
[here](http://en.wikipedia.org/wiki/Gupta_Technologies)). Also, the
current version (according to [this
page](http://www.unify.com/Products/Data_Management/SQLBase/), as of
25 Apr 2010) is 11.5, so I have no idea how useful this project will
be for versions of SQLBase more recent than 7.5.1.
This project exists only for the sake of providing read-only access to
legacy data, specifically that used by the
[CAM32](http://www.camcommerce.com/products/CAM32.aspx) Point of Sale
software. It's possible that it could allow writing data, etc., but I
personally won't be adding any such features unless/until the need
arises.
I don't expect there to be much of anyone using SQLBase 7.5.1 at this
point (besides perhaps other CAM32 users), but if you do happen to
need additional functionality from this project or just have questions
or comments, feel free to drop me a line at lance@edbob.org.
## Downloads
The code is released under the [GNU General Public
License](http://www.gnu.org/licenses/gpl.html), version 3.
It is available at [PyPI](http://pypi.python.org/pypi/SQLBase7-SA), so
the easiest way to get the package is with the command:
# pip install SQLBase7-SA
Again, this project is extremely specific to my needs, so I'm only
building eggs for Python 2.5 and 2.6 at this point. If you happen to
need something else then please contact me.
Copyright © 2010 Lance Edgar <lance@edbob.org>

172
setup.py
View file

@ -1,86 +1,86 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
################################################################################
#
# SQLBase7-SA -- SQLAlchemy driver/dialect for Centura SQLBase v7
# Copyright © 2010 Lance Edgar
#
# This file is part of SQLBase7-SA.
#
# SQLBase7-SA 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.
#
# SQLBase7-SA 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 SQLBase7-SA. If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from setuptools import setup, find_packages
import os
execfile(os.path.join(os.path.dirname(__file__), 'sqlbase7_sa', '_version.py'))
setup(
name = 'SQLBase7-SA',
version = __version__,
author = 'Lance Edgar',
author_email = 'lance@edbob.org',
url = "http://sqlbase7-sa.edbob.org/",
license = "GNU GPL v3",
description = 'SQLAlchemy dialect for Centura SQLBase v7',
long_description = """
SQLBase7-SA - SQLAlchemy dialect for Centura SQLBase v7
-------------------------------------------------------
This package provides a (possibly rudimentary) implementation
of a SQLAlchemy dialect for the Centura SQLBase database
engine. It is only intended (and known) to work with a very
specific version of this database, that version being 7.5.1.
""",
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Plugins',
'Environment :: Win32 (MS Windows)',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Natural Language :: English',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python',
'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
'Topic :: Database',
'Topic :: Software Development :: Libraries :: Python Modules',
],
packages = find_packages(),
install_requires = [
'SQLAlchemy',
],
entry_points = {
# SQLAlchemy 0.5
'sqlalchemy.databases' : [
'sqlbase7 = sqlbase7_sa.sqlbase7_sa05:SQLBase7Dialect_SA05',
],
# SQLAlchemy 0.6
'sqlalchemy.dialects' : [
'sqlbase7 = sqlbase7_sa.sqlbase7_sa06:SQLBase7Dialect_SA06_pyodbc',
],
},
test_suite = 'sqlbase7_sa.tests',
)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
################################################################################
#
# SQLBase7-SA -- SQLAlchemy driver/dialect for Centura SQLBase v7
# Copyright © 2010 Lance Edgar
#
# This file is part of SQLBase7-SA.
#
# SQLBase7-SA 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.
#
# SQLBase7-SA 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 SQLBase7-SA. If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from setuptools import setup, find_packages
import os
execfile(os.path.join(os.path.dirname(__file__), 'sqlbase7_sa', '_version.py'))
setup(
name = 'SQLBase7-SA',
version = __version__,
author = 'Lance Edgar',
author_email = 'lance@edbob.org',
url = "https://forgejo.wuttaproject.org/rattail/sqlbase7-sa",
license = "GNU GPL v3",
description = 'SQLAlchemy dialect for Centura SQLBase v7',
long_description = """
SQLBase7-SA - SQLAlchemy dialect for Centura SQLBase v7
-------------------------------------------------------
This package provides a (possibly rudimentary) implementation
of a SQLAlchemy dialect for the Centura SQLBase database
engine. It is only intended (and known) to work with a very
specific version of this database, that version being 7.5.1.
""",
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Plugins',
'Environment :: Win32 (MS Windows)',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Natural Language :: English',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python',
'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
'Topic :: Database',
'Topic :: Software Development :: Libraries :: Python Modules',
],
packages = find_packages(),
install_requires = [
'SQLAlchemy>0.5.2',
],
entry_points = {
# SQLAlchemy 0.5
'sqlalchemy.databases' : [
'sqlbase7 = sqlbase7_sa.sqlbase7_sa05:SQLBase7Dialect_SA05',
],
# SQLAlchemy 0.6
'sqlalchemy.dialects' : [
'sqlbase7 = sqlbase7_sa.sqlbase7_sa06:SQLBase7Dialect_SA06_pyodbc',
],
},
test_suite = 'sqlbase7_sa.tests',
)

View file

@ -23,4 +23,4 @@
################################################################################
__version__ = '0.1b1'
__version__ = '0.1b5'

View file

@ -26,6 +26,7 @@
from sqlalchemy.engine.default import DefaultDialect
from sqlalchemy import types, and_
from sqlalchemy.sql.expression import Join
from sqlalchemy.sql import visitors, operators, ClauseElement
import sqlalchemy
@ -56,7 +57,12 @@ class SQLBase7Compiler(CompilerBase):
return self.process(join.left, **kwargs) + ", " + self.process(join.right, **kwargs)
def visit_select(self, select, **kwargs):
froms = select._get_display_froms()
if self.stack and 'from' in self.stack[-1]:
existingfroms = self.stack[-1]['from']
else:
existingfroms = None
froms = select._get_display_froms(existingfroms)
whereclause = self._get_join_whereclause(froms)
if whereclause is not None:
select = select.where(whereclause)
@ -71,7 +77,16 @@ class SQLBase7Compiler(CompilerBase):
clauses = []
def visit_join(join):
clauses.append(join.onclause)
if join.isouter:
def visit_binary(binary):
if binary.operator == operators.eq:
if binary.left.table is join.right:
binary.left = _OuterJoinColumn(binary.left)
elif binary.right.table is join.right:
binary.right = _OuterJoinColumn(binary.right)
clauses.append(visitors.cloned_traverse(join.onclause, {}, {'binary':visit_binary}))
else:
clauses.append(join.onclause)
for j in join.left, join.right:
if isinstance(j, Join):
visit_join(j)
@ -84,6 +99,16 @@ class SQLBase7Compiler(CompilerBase):
return and_(*clauses)
return None
def visit_outer_join_column(self, vc):
return self.process(vc.column) + "(+)"
class _OuterJoinColumn(ClauseElement):
__visit_name__ = 'outer_join_column'
def __init__(self, column):
self.column = column
class SQLBase7Dialect(DefaultDialect):