예제 #1
0
def get_data_sets_from_sql(model, raw_where_clause, parsed_where_clause=None):
    """
    Gets a data set for the given model,using provided where_clause, using
    raw sql and the QueryParser. Datasets are ordered by id and limited to 10
    entries.

    returns a dataset based on raw execution and a dataset based on parsed execution

    params:
    model - django model being queried
    raw_where_clause - string of sql query to be used for raw data set
    parsed_where_clause - string of sql query to be used for parsed data set
    """
    if not parsed_where_clause:
        parsed_where_clause = raw_where_clause

    raw_sql = "SELECT * FROM {} {} ORDER BY ID LIMIT 10"\
            .format(model._meta.db_table, raw_where_clause)

    parsed_sql = "SELECT * FROM {} {}"\
            .format(model._meta.db_table, parsed_where_clause)
    raw_dataset = model.objects.raw(raw_sql.replace("%", "%%")) # % signs need to be escaped or the connection expects parameters

    f = QueryParser(model, parsed_sql)
    # to debug test_equality_operator error:
    #print parsed_sql, f.where_conditions
    parsed_dataset = f.extend_query(model.objects.order_by('id'))[:10]

    return raw_dataset, parsed_dataset
예제 #2
0
def get_data_sets_from_sql(model, raw_where_clause, parsed_where_clause=None):
    """
    Gets a data set for the given model,using provided where_clause, using
    raw sql and the QueryParser. Datasets are ordered by id and limited to 10
    entries.

    returns a dataset based on raw execution and a dataset based on parsed execution

    params:
    model - django model being queried
    raw_where_clause - string of sql query to be used for raw data set
    parsed_where_clause - string of sql query to be used for parsed data set
    """
    if not parsed_where_clause:
        parsed_where_clause = raw_where_clause

    raw_sql = "SELECT * FROM {} {} ORDER BY ID LIMIT 10"\
            .format(model._meta.db_table, raw_where_clause)

    parsed_sql = "SELECT * FROM {} {}"\
            .format(model._meta.db_table, parsed_where_clause)
    raw_dataset = model.objects.raw(
        raw_sql.replace("%", "%%")
    )  # % signs need to be escaped or the connection expects parameters

    f = QueryParser(model, parsed_sql)
    # to debug test_equality_operator error:
    #print parsed_sql, f.where_conditions
    parsed_dataset = f.extend_query(model.objects.order_by('id'))[:10]

    return raw_dataset, parsed_dataset
예제 #3
0
 def test_geo_query_new(self, **kwargs):
     sql = "WHERE point within buffer(-122.246, 37.896, 1000)" #return all photos within 1,000 meters
     f = QueryParser(Photo, sql)
     parsed_dataset = f.extend_query(Photo.objects.order_by('id'))
     #expect two photos to return 
     self.assertEqual(len(parsed_dataset), 2)
     
     sql = "WHERE point WITHIN buffer(-122.246, 37.896, 10)" #return all photos within 10 meters
     f = QueryParser(Photo, sql)
     parsed_dataset = f.extend_query(Photo.objects.order_by('id'))
     #expect 1 photo to return 
     self.assertEqual(len(parsed_dataset), 1)
예제 #4
0
    def test_geo_query_new(self, **kwargs):
        sql = "WHERE point within buffer(-122.246, 37.896, 1000)"  #return all photos within 1,000 meters
        f = QueryParser(Photo, sql)
        parsed_dataset = f.extend_query(Photo.objects.order_by('id'))
        #expect two photos to return
        self.assertEqual(len(parsed_dataset), 2)

        sql = "WHERE point WITHIN buffer(-122.246, 37.896, 10)"  #return all photos within 10 meters
        f = QueryParser(Photo, sql)
        parsed_dataset = f.extend_query(Photo.objects.order_by('id'))
        #expect 1 photo to return
        self.assertEqual(len(parsed_dataset), 1)
예제 #5
0
    def compare_sql(self, model, raw_where, parsed_where=None):
        raw_dataset, parsed_dataset = get_data_sets_from_sql(
            model, raw_where, parsed_where)
        n = 0
        for r, p in zip(raw_dataset, parsed_dataset):
            n += 1
            self.assertEqual(r.id, p.id)

        if n == 0:
            raw_count = len(list(raw_dataset))
            parsed_count = len(list(parsed_dataset))

            # output incorrectly parsed SQL and raise failure error:
            if not parsed_where:
                parsed_where = raw_where
            parsed_sql = "SELECT * FROM {} {}".format(model._meta.db_table,
                                                      parsed_where)
            f = QueryParser(model, parsed_where)
            self.fail("No results to compare - raw:{} parsed:{};\n\
                Where clause '{}' parsed to: '{}'".format(
                raw_count, parsed_count, parsed_where, f.where_conditions))