[Checkins]
SVN: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/
optimize search the database where it can provide class
property for the searching.
Charith Paranaliyanage
paranaliyanage at gmail.com
Thu Jul 10 04:29:00 EDT 2008
Log message for revision 88158:
optimize search the database where it can provide class property for the searching.
Changed:
U Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/database/metadata.py
U Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/interfaces.py
U Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/student.py
U Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/utils.py
U Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/tests/test_zope.py
-=-
Modified: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/database/metadata.py
===================================================================
--- Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/database/metadata.py 2008-07-10 08:27:25 UTC (rev 88157)
+++ Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/database/metadata.py 2008-07-10 08:29:00 UTC (rev 88158)
@@ -5,6 +5,7 @@
from zope.component import getUtility
from zope.component import getUtilitiesFor
from zope.app.catalog.interfaces import ICatalog
+from zope.app.catalog.attribute import AttributeIndex
from zope.app.intid import IIntIds
import zc.relation.interfaces
@@ -88,13 +89,25 @@
for iname, index in catalog.items():
if isinstance(index, AllIndex):
if index.interface.__name__ == klassname:
- interface = index.interface
results = catalog.apply({iname:(1,1)})
obj_list = [intids.getObject(result) for result in results]
return obj_list
return None
+ def getFromIndex(self, klass, property, lowerbound='A', upperbound='Z'):
+ catalogs = getUtilitiesFor(ICatalog)
+ intids = getUtility(IIntIds)
+ for name, catalog in catalogs:
+ for iname, index in catalog.items():
+ if isinstance(index, AttributeIndex)and index.field_name == property and index.interface.__name__ == klass:
+ results = catalog.apply({iname:(lowerbound, upperbound)})
+ obj_list = [intids.getObject(result).name for result in results]
+ return obj_list
+
+ return None
+
+
def get_class(self, klassname):
"""Returns a MetaType instance for the class."""
return self.classes[klassname]
Modified: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/interfaces.py
===================================================================
--- Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/interfaces.py 2008-07-10 08:27:25 UTC (rev 88157)
+++ Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/interfaces.py 2008-07-10 08:29:00 UTC (rev 88158)
@@ -36,8 +36,8 @@
"""A Student object"""
name = TextLine(title=u"Student Name")
+ country = Attribute('student country')
-
class IMentor(Interface):
"""A Mentor object"""
Modified: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/student.py
===================================================================
--- Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/student.py 2008-07-10 08:27:25 UTC (rev 88157)
+++ Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/sample/student.py 2008-07-10 08:29:00 UTC (rev 88158)
@@ -1,6 +1,6 @@
# -*- coding: UTF-8 -*-
from zope.interface import implements
-from zope.interface import Interface
+from zope.interface import Interface, Attribute
import persistent
from ocql.testing.sample.interfaces import IStudent
@@ -26,6 +26,7 @@
implements(IStudent)
name = u''
+ country = None
def __repr__(self):
return "%s <%s>" % (self.__class__.__name__, self.name)
Modified: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/utils.py
===================================================================
--- Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/utils.py 2008-07-10 08:27:25 UTC (rev 88157)
+++ Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/testing/utils.py 2008-07-10 08:29:00 UTC (rev 88158)
@@ -11,6 +11,7 @@
from zope.app.catalog.catalog import Catalog
from zope.app.catalog.interfaces import ICatalog
from zope.app.catalog.field import FieldIndex
+from zope.app.catalog.attribute import AttributeIndex
from ocql.database.index import AllIndex
from zope.app.intid import IntIds
@@ -70,6 +71,7 @@
cat['proj_descr'] = FieldIndex('description', IProject)
cat['student_name'] = FieldIndex('name', IStudent)
+ cat['student_country'] = FieldIndex('country', IStudent)
cat['mentor_name'] = FieldIndex('name', IMentor)
@@ -91,16 +93,19 @@
s1 = Student()
s1.name = u"Charith"
+ s1.country = "Sri Lanka"
id = intids.register(s1)
cat.index_doc(id, s1)
s2 = Student()
s2.name = u"Jane"
+ s2.country = "USA"
id = intids.register(s2)
cat.index_doc(id, s2)
s3 = Student()
s3.name = u"Ann"
+ s3.country = "Hungary"
id = intids.register(s3)
cat.index_doc(id, s3)
Modified: Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/tests/test_zope.py
===================================================================
--- Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/tests/test_zope.py 2008-07-10 08:27:25 UTC (rev 88157)
+++ Sandbox/adamg/ocql/branches/optimize-with-index/src/ocql/tests/test_zope.py 2008-07-10 08:29:00 UTC (rev 88158)
@@ -147,6 +147,30 @@
self.doit(query, qo, set(["Save the world"]))
+ symbols = SymbolContainer()
+ #
+ # Filtering --one result using optimization
+ #
+ # set [ c in IStudent , c.country="USA" | c.name]
+ #
+ query = "[c in IStudent , c.country=USA | c.name]"
+ qo = Query(
+ metadata, symbols,
+ set,
+ [
+ In(
+ metadata, symbols,
+ Identifier(metadata,symbols,'c'),
+ Identifier(metadata,symbols, 'IStudent')),
+ Eq(
+ metadata,symbols,
+ Identifier(metadata, symbols, 'c.country'),
+ Identifier(metadata, symbols, '"USA"'))
+ ], Identifier(metadata, symbols, 'c.name'))
+
+ self.doit(query, qo, set(metadata.getFromIndex('IStudent', 'country', 'USA', 'USA')))
+
+
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
return unittest.TestSuite((
More information about the Checkins
mailing list