Author: lgiessmann Date: Wed Apr 6 16:53:10 2011 New Revision: 422
Log: TM-SPARQL: fixed a bug when there is a greater amount of variables in filters contained in one select-group
Modified: trunk/src/TM-SPARQL/sparql.lisp trunk/src/unit_tests/sparql_test.lisp
Modified: trunk/src/TM-SPARQL/sparql.lisp ============================================================================== --- trunk/src/TM-SPARQL/sparql.lisp (original) +++ trunk/src/TM-SPARQL/sparql.lisp Wed Apr 6 16:53:10 2011 @@ -413,7 +413,7 @@
(defgeneric process-filters (construct) (:documentation "Processes all filters by calling invoke-filter.") - (:method ((construct SPARQL-Query)) + (:method ((construct SPARQL-Query)) (dolist (filter (filters construct)) (let* ((filter-variable-names (get-variables-from-filter-string filter)) @@ -423,20 +423,19 @@ (make-variable-values construct var-name filter-variable-values))) (setf filter-variable-values (cast-variable-values construct filter-variable-values)) - (dolist (filter (filters construct)) - (let ((true-values nil)) - (dolist (var-elem filter-variable-values) - (when (eval (read-from-string (to-lisp-code var-elem filter))) - (map 'list #'(lambda(list-elem) - (push list-elem true-values)) - var-elem))) - (let ((values-to-remove - (return-false-values filter-variable-values - (remove-duplicates true-values - :test #'variable-list=)))) - (dolist (to-del values-to-remove) - (delete-rows-by-value construct (getf to-del :variable-name) - (getf to-del :variable-value)))))))) + (let ((true-values nil)) + (dolist (var-elem filter-variable-values) + (when (eval (read-from-string (to-lisp-code var-elem filter))) + (map 'list #'(lambda(list-elem) + (push list-elem true-values)) + var-elem))) + (let ((values-to-remove + (return-false-values filter-variable-values + (remove-duplicates true-values + :test #'variable-list=)))) + (dolist (to-del values-to-remove) + (delete-rows-by-value construct (getf to-del :variable-name) + (getf to-del :variable-value))))))) construct))
Modified: trunk/src/unit_tests/sparql_test.lisp ============================================================================== --- trunk/src/unit_tests/sparql_test.lisp (original) +++ trunk/src/unit_tests/sparql_test.lisp Wed Apr 6 16:53:10 2011 @@ -2406,7 +2406,8 @@ "SELECT * WHERE { http://some.where/tmsparql/author/goethe ?pred1 ?obj1. FILTER isLITERAL(?obj1) && !isLITERAL(?pred1) && ?obj1 = 'von Goethe' || ?obj1 = 82 - FILTER ?pred1 = $pred1 && $obj1 = $obj1 && ?pred1 != ?obj1" + FILTER ?pred1 = $pred1 && $obj1 = $obj1 && ?pred1 != ?obj1 + FILTER ?obj1 >= 82 || ?obj1 = 'von Goethe'" "}")) (r-1 (tm-sparql:result (make-instance 'TM-SPARQL:SPARQL-Query :query q-1)))) ;(is-true (= (length r-1) 2))