Esempio n. 1
0
    def as_sparql(self):
        """
        Creates the SPARQL for this query. Returns the SPARQL string and list of
        parameters.
        """
        from django.db.models.base import Model

        self.pre_sparql_setup()
        if not self.query.values:
            return "", ()

        # MODIFY_QUERY = """
        # MODIFY GRAPH <%(graph)s>
        # DELETE { <%(uri)s> ?p ?o }
        # INSERT { <%(uri)s> ?p ?o }
        # WHERE { <%(uri)s> ?p ?o };
        # """

        # query = MODIFY_QUERY % {"uri": "x", "graph": "y"}

        qn = self.quote_name_unless_alias
        result = ["UPDATE %s" % qn(table)]
        result.append("SET")
        values, update_params = [], []
        for field, model, val in self.query.values:
            if hasattr(val, "prepare_database_save"):
                val = val.prepare_database_save(field)
            else:
                val = field.get_db_prep_save(val, connection=self.connection)

            # Getting the placeholder for the field.
            if hasattr(field, "get_placeholder"):
                placeholder = field.get_placeholder(val, self.connection)
            else:
                placeholder = "%s"

            if hasattr(val, "evaluate"):
                val = SPARQLEvaluator(val, self.query, allow_joins=False)
            name = field.column
            if hasattr(val, "as_sparql"):
                sparql, params = val.as_sparql(qn, self.connection)
                values.append("%s = %s" % (qn(name), sparql))
                update_params.extend(params)
            elif val is not None:
                values.append("%s = %s" % (qn(name), placeholder))
                update_params.append(val)
            else:
                values.append("%s = NULL" % qn(name))
        if not values:
            return "", ()
        result.append(", ".join(values))
        where, params = self.query.where.as_sparql(qn=qn, connection=self.connection)
        if where:
            result.append("WHERE %s" % where)
        return " ".join(result), tuple(update_params + params)
Esempio n. 2
0
    def as_sparql(self):
        """
        Creates the SPARQL for this query. Returns the SPARQL string and list of
        parameters.
        """
        from django.db.models.base import Model

        self.pre_sparql_setup()
        if not self.query.values:
            return '', ()
        table = self.query.tables[0]
        qn = self.quote_name_unless_alias
        result = ['UPDATE %s' % qn(table)]
        result.append('SET')
        values, update_params = [], []
        for field, model, val in self.query.values:
            if hasattr(val, 'prepare_database_save'):
                val = val.prepare_database_save(field)
            else:
                val = field.get_db_prep_save(val, connection=self.connection)

            # Getting the placeholder for the field.
            if hasattr(field, 'get_placeholder'):
                placeholder = field.get_placeholder(val, self.connection)
            else:
                placeholder = '%s'

            if hasattr(val, 'evaluate'):
                val = SPARQLEvaluator(val, self.query, allow_joins=False)
            name = field.column
            if hasattr(val, 'as_sparql'):
                sparql, params = val.as_sparql(qn, self.connection)
                values.append('%s = %s' % (qn(name), sparql))
                update_params.extend(params)
            elif val is not None:
                values.append('%s = %s' % (qn(name), placeholder))
                update_params.append(val)
            else:
                values.append('%s = NULL' % qn(name))
        if not values:
            return '', ()
        result.append(', '.join(values))
        where, params = self.query.where.as_sparql(qn=qn, connection=self.connection)
        if where:
            result.append('WHERE %s' % where)
        return ' '.join(result), tuple(update_params + params)
Esempio n. 3
0
    def as_sparql(self):
        """
        Creates the SPARQL for this query. Returns the SPARQL string and list of
        parameters.
        """
        from django.db.models.base import Model

        self.pre_sparql_setup()
        if not self.query.values:
            return '', ()
        table = self.query.tables[0]
        qn = self.quote_name_unless_alias
        result = ['UPDATE %s' % qn(table)]
        result.append('SET')
        values, update_params = [], []
        for field, model, val in self.query.values:
            if hasattr(val, 'prepare_database_save'):
                val = val.prepare_database_save(field)
            else:
                val = field.get_db_prep_save(val, connection=self.connection)

            # Getting the placeholder for the field.
            if hasattr(field, 'get_placeholder'):
                placeholder = field.get_placeholder(val, self.connection)
            else:
                placeholder = '%s'

            if hasattr(val, 'evaluate'):
                val = SPARQLEvaluator(val, self.query, allow_joins=False)
            name = field.column
            if hasattr(val, 'as_sparql'):
                sparql, params = val.as_sparql(qn, self.connection)
                values.append('%s = %s' % (qn(name), sparql))
                update_params.extend(params)
            elif val is not None:
                values.append('%s = %s' % (qn(name), placeholder))
                update_params.append(val)
            else:
                values.append('%s = NULL' % qn(name))
        if not values:
            return '', ()
        result.append(', '.join(values))
        where, params = self.query.where.as_sparql(qn=qn, connection=self.connection)
        if where:
            result.append('WHERE %s' % where)
        return ' '.join(result), tuple(update_params + params)
Esempio n. 4
0
    def as_sparql(self):
        """
        Creates the SPARQL for this query. Returns the SPARQL string and list of
        parameters.
        """
        from django.db.models.base import Model

        self.pre_sparql_setup()
        if not self.query.values:
            return '', ()

# MODIFY_QUERY = """
# MODIFY GRAPH <%(graph)s>
# DELETE { <%(uri)s> ?p ?o }
# INSERT { <%(uri)s> ?p ?o }
# WHERE { <%(uri)s> ?p ?o };
# """

# query = MODIFY_QUERY % {"uri": "x", "graph": "y"}

        qn = self.quote_name_unless_alias
        qn2 = self.connection.ops.quote_predicate
        qn3 = self.connection.ops.quote_subject
        graph = self.query.model._meta.graph
        result = ['MODIFY GRAPH %s' % qn3(graph)]
        insert, insert_params = [], []
        where, where_params = [], []
        uri = self.query.where.as_sparql(qn=qn, connection=self.connection)[1][0]  # FIXME: remove this magic numbers

        for field, model, val in self.query.values:
            if hasattr(val, 'prepare_database_save'):
                val = val.prepare_database_save(field)
            else:
                val = field.get_db_prep_save(val, connection=self.connection)

            if not val:
                continue

            # # Getting the placeholder for the field.
            # if hasattr(field, 'get_placeholder'):
            #     placeholder = field.get_placeholder(val, self.connection)
            # else:
            #     placeholder = '%s'

            if hasattr(val, 'evaluate'):
                val = SPARQLEvaluator(val, self.query, allow_joins=False)
            name = field.column
            if hasattr(val, 'as_sparql'):
                sparql, params = val.as_sparql(qn, self.connection)
                insert.append('%s %s' % (qn(name), sparql))
                insert_params.extend(params)
            elif val is not None:
                # insert.append('%s %s' % (qn2(field, name), placeholder))
                insert.append('%s' % qn2(field, name))
                insert_params.append(val)
            else:
                insert.append('%s NULL' % qn(name))

            predicate, where_value, insert_value = qn2(field, name), qn(name), val
            where.append(predicate)
            where_params.append(where_value)

        insert[0] = "%s %s" % (uri, insert[0])
        where[0] = "%s %s" % (uri, where[0])

        if not insert:
            return '', ()
        result.append('DELETE { %s }' % '; '.join(where))
        result.append('INSERT { %s }' % '; '.join(insert))
        result.append('WHERE { %s }' % '; '.join(where))

        return ' '.join(result), tuple(where_params + insert_params + where_params)
Esempio n. 5
0
    def as_sparql(self):
        """
        Creates the SPARQL for this query. Returns the SPARQL string and list of
        parameters.
        """
        from django.db.models.base import Model

        self.pre_sparql_setup()
        if not self.query.values:
            return '', ()


# MODIFY_QUERY = """
# MODIFY GRAPH <%(graph)s>
# DELETE { <%(uri)s> ?p ?o }
# INSERT { <%(uri)s> ?p ?o }
# WHERE { <%(uri)s> ?p ?o };
# """

# query = MODIFY_QUERY % {"uri": "x", "graph": "y"}

        qn = self.quote_name_unless_alias
        qn2 = self.connection.ops.quote_predicate
        qn3 = self.connection.ops.quote_subject
        graph = self.query.model._meta.graph
        result = ['MODIFY GRAPH %s' % qn3(graph)]
        insert, insert_params = [], []
        where, where_params = [], []
        uri = self.query.where.as_sparql(qn=qn, connection=self.connection)[1][
            0]  # FIXME: remove this magic numbers

        for field, model, val in self.query.values:
            if hasattr(val, 'prepare_database_save'):
                val = val.prepare_database_save(field)
            else:
                val = field.get_db_prep_save(val, connection=self.connection)

            if not val:
                continue

            # # Getting the placeholder for the field.
            # if hasattr(field, 'get_placeholder'):
            #     placeholder = field.get_placeholder(val, self.connection)
            # else:
            #     placeholder = '%s'

            if hasattr(val, 'evaluate'):
                val = SPARQLEvaluator(val, self.query, allow_joins=False)
            name = field.column
            if hasattr(val, 'as_sparql'):
                sparql, params = val.as_sparql(qn, self.connection)
                insert.append('%s %s' % (qn(name), sparql))
                insert_params.extend(params)
            elif val is not None:
                # insert.append('%s %s' % (qn2(field, name), placeholder))
                insert.append('%s' % qn2(field, name))
                insert_params.append(val)
            else:
                insert.append('%s NULL' % qn(name))

            predicate, where_value, insert_value = qn2(field,
                                                       name), qn(name), val
            where.append(predicate)
            where_params.append(where_value)

        insert[0] = "%s %s" % (uri, insert[0])
        where[0] = "%s %s" % (uri, where[0])

        if not insert:
            return '', ()
        result.append('DELETE { %s }' % '; '.join(where))
        result.append('INSERT { %s }' % '; '.join(insert))
        result.append('WHERE { %s }' % '; '.join(where))

        return ' '.join(result), tuple(where_params + insert_params +
                                       where_params)