コード例 #1
0
ファイル: main.py プロジェクト: mtchavez/whitepy
def entry_upvote(entry_id):
    try:
        query = wgdb.make_query(g.wdb, arglist=[(0, wgdb.COND_EQUAL, entry_id)])
        rec = wgdb.fetch(g.wdb, query)
    except Exception, e:
        rec = wgdb.create_record(g.wdb, 10)
        wgdb.set_field(g.wdb, rec, 0, entry_id)
コード例 #2
0
def runTest():
	count = 0
	q = wgdb.make_query(db, arglist=[(0,wgdb.COND_EQUAL,"ee")])

	record = wgdb.fetch(db, q);
	while record is not None:
		count += 1
		try:
			record = wgdb.fetch(db, q);
		except wgdb.error:
			record = None
コード例 #3
0
ファイル: main.py プロジェクト: mtchavez/whitepy
def show_entry(entry_id):
    cur = g.db.execute('select id, title, text from entries where id=? order by id desc', (str(entry_id)))
    row = cur.fetchone()
    entry = dict(eid=row[0], title=row[1], text=row[2])
    meta = dict(views=0, upvotes=0, downvotes=0)

    try:
        query = wgdb.make_query(g.wdb, arglist=[(0, wgdb.COND_EQUAL, entry_id)])
        rec = wgdb.fetch(g.wdb, query)
    except Exception, e:
        rec = wgdb.create_record(g.wdb, 10)
        wgdb.set_field(g.wdb, rec, 0, entry_id)
コード例 #4
0
    def make_query(self, matchrec=None, *arg, **kwarg):
        """Create a query object."""
        if isinstance(matchrec, Record):
            matchrec = matchrec.get__rec()

        if self.locking:
            self.start_write() # write lock for parameter encoding
        try:
            query = wgdb.make_query(self._db,
                matchrec, *arg, **kwarg)
        finally:
            if self.locking:
                self.end_write()
        return query
コード例 #5
0
ファイル: whitedb_cache.py プロジェクト: vulogov/zas_proxy
 def _set(self, key, stamp, value):
     l = wgdb.start_read(self.db)
     q = wgdb.make_query(self.db, arglist=[(0, wgdb.COND_EQUAL, key)])
     rec = wgdb.fetch(self.db, q)
     wgdb.end_read(self.db, l)
     wgdb.free_query(self.db, q)
     l = wgdb.start_write(self.db)
     ## Transaction to Cache
     if not rec:
         rec = wgdb.create_record(self.db, 3)
         wgdb.set_field(self.db, rec, 0, key)
     wgdb.set_field(self.db, rec, 1, stamp)
     wgdb.set_field(self.db, rec, 2, value)
     wgdb.end_write(self.db, l)
コード例 #6
0
    def check_matching_rows(self, col, cond, val, expected):
        """Fetch all rows where "col" "cond" "val" is true
            (where cond is a comparison operator - equal, less than etc)
        Check that the val matches the field value in returned records.
        Check that the number of rows matches the expected value"""

        query = wgdb.make_query(self.d, arglist = [(col, cond, val)])

        # XXX: should check rowcount here when it's implemented
        # self.assertEqual(expected, query rowcount)

        cnt = 0
        rec = self.fetch(query)
        while rec is not None:
            dbval = wgdb.get_field(self.d, rec, col)
            self.assertEqual(type(val), type(dbval))
            self.assertEqual(val, dbval)
            cnt += 1
            rec = self.fetch(query)

        self.assertEqual(cnt, expected)
コード例 #7
0
    def test_params(self):
        """Test encoding parameters"""

        marker = "This is a marker"
        s1 = "ctGXioJeeUkTrxiSGaWxqFujCyWHJkmveMQXEnrHAMomjuPjKqUHlUtCVjOT"
        s2 = "zjXNNGYUBjmdCrLaAaKv"
        s3 = "GRvWOVYBMObOzWPqVFCt"
        s4 = "#eNijRGUJbuHoJEMxRUCQ"
        s5 = "http://example.com/?UQCOtBzWkdipHplZqwQF"
        s6 = "KqKVvVhVcxbLssirtydJ"
        s7 = "xsd:Name"

        # this row shouldn't be returned by the queries (except
        # the NULL query)
        rec0 = wgdb.create_record(self.d, 15)
        wgdb.set_field(self.d, rec0, 0, "This is not a marker")

        # this row should be returned by the queries
        rec = wgdb.create_record(self.d, 15)
        wgdb.set_field(self.d, rec, 0, marker)
        
        # CHARTYPE
        wgdb.set_field(self.d, rec, 1, "Z", wgdb.CHARTYPE)
        # DATETYPE
        wgdb.set_field(self.d, rec, 2, datetime.date(1943, 2, 28))
        # DOUBLETYPE
        wgdb.set_field(self.d, rec, 3, 105819.387451)
        # FIXPOINTTYPE
        wgdb.set_field(self.d, rec, 4, 783.799, wgdb.FIXPOINTTYPE)
        # INTTYPE
        wgdb.set_field(self.d, rec, 5, -871043)
        # NULLTYPE
        wgdb.set_field(self.d, rec, 7, None)
        # RECORDTYPE
        wgdb.set_field(self.d, rec, 8, rec0)
        # STRTYPE
        wgdb.set_field(self.d, rec, 9, s1)
        wgdb.set_field(self.d, rec, 10, s2, wgdb.STRTYPE)
        wgdb.set_field(self.d, rec, 11, s3, ext_str="en")
        # TIMETYPE
        wgdb.set_field(self.d, rec, 12, datetime.time(11, 22, 33))
        # URITYPE
        wgdb.set_field(self.d, rec, 13, s4, wgdb.URITYPE, s5)
        # XMLLITERALTYPE
        wgdb.set_field(self.d, rec, 14, s6, wgdb.XMLLITERALTYPE, s7)

        # CHARTYPE
        query = wgdb.make_query(self.d,
          arglist = [(1, wgdb.COND_EQUAL, ("Z", wgdb.CHARTYPE))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # DATETYPE
        query = wgdb.make_query(self.d,
          arglist = [(2, wgdb.COND_EQUAL, datetime.date(1943, 2, 28))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # DOUBLETYPE
        query = wgdb.make_query(self.d,
          arglist = [(3, wgdb.COND_EQUAL, 105819.387451)])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # FIXPOINTTYPE
        query = wgdb.make_query(self.d,
          arglist = [(4, wgdb.COND_EQUAL, (783.799, wgdb.FIXPOINTTYPE))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # INTTYPE
        query = wgdb.make_query(self.d,
          arglist = [(5, wgdb.COND_EQUAL, -871043)])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # NULLTYPE
        query = wgdb.make_query(self.d,
          arglist = [(7, wgdb.COND_EQUAL, None)])
        self.assertEqual(query.res_count, 2)
        self.assertIsNotNone(self.fetch(query))
        self.assertIsNotNone(self.fetch(query))
        self.assertIsNone(self.fetch(query))

        # RECORDTYPE
        query = wgdb.make_query(self.d,
          arglist = [(8, wgdb.COND_EQUAL, rec0)])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # STRTYPE
        query = wgdb.make_query(self.d,
          arglist = [(9, wgdb.COND_EQUAL, s1)])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        query = wgdb.make_query(self.d,
          arglist = [(10, wgdb.COND_EQUAL, (s2, wgdb.STRTYPE))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        query = wgdb.make_query(self.d,
          arglist = [(11, wgdb.COND_EQUAL, (s3, wgdb.STRTYPE, "en"))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # TIMETYPE
        query = wgdb.make_query(self.d,
          arglist = [(12, wgdb.COND_EQUAL, datetime.time(11, 22, 33))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # URITYPE
        query = wgdb.make_query(self.d,
          arglist = [(13, wgdb.COND_EQUAL, (s4, wgdb.URITYPE, s5))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))

        # XMLLITERALTYPE
        query = wgdb.make_query(self.d,
          arglist = [(14, wgdb.COND_EQUAL, (s6, wgdb.XMLLITERALTYPE, s7))])
        self.assertEqual(query.res_count, 1)
        rec = self.fetch(query)
        self.assertEqual(wgdb.get_field(self.d, rec, 0), marker)
        self.assertIsNone(self.fetch(query))
コード例 #8
0
    def test_query(self):
        """Tests various queries:
            - read pre-generated content;
            - update content;
            - read updated content;
            - delete rows;
            - check row count after deleting.
        """

        dbsize = 10 # use a fairly small database
        self.make_testdata(dbsize)

        # Content check read queries
        for i in range(dbsize):
            val = str(10 * i)
            self.check_matching_rows(0, wgdb.COND_EQUAL, val, 50*50)

        for i in range(50):
            val = 100 * i
            self.check_matching_rows(1, wgdb.COND_EQUAL, val, dbsize*50)

        for i in range(50):
            val = float(1000 * i)
            self.check_matching_rows(2, wgdb.COND_EQUAL, val, dbsize*50)

        # Update queries
        for i in range(dbsize):
            c1 = str(10 * i)

            query = wgdb.make_query(self.d,
                arglist = [(0, wgdb.COND_EQUAL, c1)])
            rec = self.fetch(query)
            while rec is not None:
                c2 = wgdb.get_field(self.d, rec, 1)
                wgdb.set_field(self.d, rec, 1, c2 - 34555)
                rec = self.fetch(query)

        for i in range(50):
            c2 = 100 * i - 34555

            query = wgdb.make_query(self.d,
                arglist = [(1, wgdb.COND_EQUAL, c2)])
            rec = self.fetch(query)
            while rec is not None:
                c3 = wgdb.get_field(self.d, rec, 2)
                wgdb.set_field(self.d, rec, 2, c3 + 177889.576)
                rec = self.fetch(query)

        for i in range(50):
            c3 = 1000 * i + 177889.576

            query = wgdb.make_query(self.d,
                arglist = [(2, wgdb.COND_EQUAL, c3)])
            rec = self.fetch(query)
            while rec is not None:
                c1val = int(wgdb.get_field(self.d, rec, 0))
                c1 = str(c1val + 99)
                wgdb.set_field(self.d, rec, 0, c1)
                rec = self.fetch(query)

        # Content check read queries, iteration 2
        for i in range(dbsize):
            val = str(10 * i + 99)
            self.check_matching_rows(0, wgdb.COND_EQUAL, val, 50*50)

        for i in range(50):
            val = 100 * i - 34555
            self.check_matching_rows(1, wgdb.COND_EQUAL, val, dbsize*50)

        for i in range(50):
            val = 1000 * i + 177889.576
            self.check_matching_rows(2, wgdb.COND_EQUAL, val, dbsize*50)

        # Delete query
        for i in range(dbsize):
            c1 = str(10 * i + 99)
            arglist = [ (0, wgdb.COND_EQUAL, c1),
                        (1, wgdb.COND_GREATER, -30556), # 10 matching
                        (2, wgdb.COND_LESSTHAN, 217889.575) # 40 matching
            ]
            query = wgdb.make_query(self.d, arglist = arglist)
            rec = self.fetch(query)
            while rec is not None:
                wgdb.delete_record(self.d, rec)
                rec = self.fetch(query)

        # Database scan
        self.check_db_rows(dbsize * (50 * 50 - 10 * 40))