Esempio n. 1
0
    def optimized_count(self, **kwargs):
        """Return count in optimized manner

        Apple.objects.filter(indice=4).count()
        Apple.objects.optimized_count(indice=4)

        """
        if (len(kwargs) == 0):
            raise MissingKwargs("you must specify the filter clause")
        if (len(kwargs) > 1):
            raise TooManyKwargs()
        # do not care about more than one kwarg
        (key, value) = kwargs.items()[0]
        (nbe, column, qfilter) = tool.parse_kwarg(key)

        agg = 'agg_count'
        agf = agg.split('_')

        agt = util.AggTrigger(util.PG_BACKEND, self.model._meta.db_table,
                              column)

        if nbe == 1:
            agf = agg
        elif nbe == 2:
            agf = agt.agg_function(agg, agf[1])

        cursor = connection.cursor()
        qry = """SELECT {} FROM {} WHERE {} %s"""

        tbname = util.table_name(self.model._meta.db_table, column)
        cursor.execute(qry.format(agf, tbname, qfilter), [value])
        row = cursor.fetchone()
        return row[0]
Esempio n. 2
0
 def test_agg_functions_name(self):
     agg = util.AggTrigger(PGBACKEND, 'book', 'nbpage', ['count'])
     res = agg.functions_name
     self.assertTrue(res, [
         'book_nbpage_insert()', 'book_nbpage_update()',
         'book_nbpage_delete()'
     ])
Esempio n. 3
0
 def test_sql_create_table_twoagg(self):
     """Test with two aggregats
     """
     agg = util.AggTrigger(PGBACKEND, 'book', 'nbpage', ['count', 'min'])
     res = agg.sql_create_table()
     self.assertTrue(isinstance(res, six.string_types))
     self.assertTrue(len(res) > 3)
Esempio n. 4
0
    def test_sql_create_triggers(self):
        agg = util.AggTrigger(PGBACKEND, 'foota', 'foocol', ['agg'])
        res = agg.sql_create_triggers()
        self.assertEqual(len(res), 3)
        self.assertTrue(isinstance(res, list))

        tgnames = [tgn[0] for tgn in res]
        sqls = [tgn[1] for tgn in res]
        self.assertIn("foota_foocol_insert_trigger", tgnames)
        self.assertEqual(sqls[0][:6], "CREATE")
Esempio n. 5
0
    def test_functions_are_present(self):
        agg = util.AggTrigger(PGBACKEND, 'book', 'nbpage', ['count'])
        dbcommands.execute_raw = MagicMock(return_value=0)
        res = agg.functions_are_present()

        funcs = [fun[0] for fun in res]

        self.assertEqual(len(res), 3)
        self.assertEqual(funcs, [
            'book_nbpage_insert()', 'book_nbpage_update()',
            'book_nbpage_delete()'
        ])
Esempio n. 6
0
 def test_sql_drop_triggers(self):
     agg = util.AggTrigger(PGBACKEND, 'foota', 'foocol', ['agg'])
     res = agg.sql_drop_triggers()
     self.assertTrue(isinstance(res, list))
     self.assertEqual(len(res), 3)
Esempio n. 7
0
 def test_agg_table_name(self):
     agg = util.AggTrigger(PGBACKEND, 'foota', 'foocol', ['agg'])
     self.assertTrue(agg.table_name, 'foota_foocol_agg')
Esempio n. 8
0
 def setUp(self):
     self.agg = util.AggTrigger(PGBACKEND, 'foota', 'foocol', ['agg'])
Esempio n. 9
0
 def test_agg_sql_init(self):
     agg = util.AggTrigger(PGBACKEND, 'book', 'nbpage', ['count'])
     res = agg.sql_init()
     self.assertTrue(isinstance(res, six.string_types))
Esempio n. 10
0
 def test_agg_create_objects(self):
     agg = util.AggTrigger(PGBACKEND, 'book', 'nbpage', ['count'])
     dbcommands.execute_raw = MagicMock(return_value=0)
     res = agg.create_objects()
     self.assertEqual(res, 0)