diff options
68 files changed, 671 insertions, 469 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 05259f6d6..2cb98c926 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,11 @@ -# The container images used in this pipeline are built from this -# GitLab project: https://gitlab.gnome.org/GNOME/tracker-oci-images +include: + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/ci-fairy.yml" + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/alpine.yml' + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/fedora.yml' + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/290b79e0e78eab67a83766f4e9691be554fc4afd/templates/ubuntu.yml' variables: + MESON_TEST_TIMEOUT_MULTIPLIER: 3 # These can be used to see verbose log output from the functional-tests. # See HACKING.md for more information. TRACKER_DEBUG: "" @@ -10,25 +14,228 @@ variables: MESON_TEST_EXTRA_ARGS: "" stages: + - review + - prepare + - build - test - analysis - website -.test_template: &test - stage: test +.check-template: &check + extends: + - .fdo.ci-fairy + artifacts: + expire_in: 1 week + paths: + - check-junit-report.xml + reports: + junit: check-junit-report.xml + +check-commit-log: + variables: + GIT_DEPTH: "100" + stage: review + script: + - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ; + then + ci-fairy check-commits --junit-xml=check-junit-report.xml ; + else + echo "Not a merge request" ; + fi + <<: *check + +check-merge-request: + variables: + GIT_STRATEGY: none + stage: review + script: + - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ; + then + ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-junit-report.xml ; + else + echo "Not a merge request" ; + fi + <<: *check + +.tracker.fedora@common: + variables: + BASE_TAG: '2021-05-15.9' + FDO_UPSTREAM_REPO: GNOME/tracker + FDO_DISTRIBUTION_PACKAGES: 'clang clang-analyzer gcovr git libasan libubsan python3-gobject python3-pip umockdev-devel xmlto' + FDO_DISTRIBUTION_EXEC: | + dnf install -y 'dnf-command(builddep)' && + dnf builddep -y tracker tracker-miners --setopt=install_weak_deps=False && + dnf clean all && + pip3 install beautifulsoup4 mkdocs mkdocs-cinder tap.py meson + +.tracker.ubuntu@common: + variables: + BASE_TAG: '2021-05-15.5' + FDO_UPSTREAM_REPO: GNOME/tracker + FDO_DISTRIBUTION_PACKAGES: 'python3-tap umockdev libumockdev-dev upower asciidoc-base git' + FDO_DISTRIBUTION_EXEC: | + export DEBIAN_FRONTEND=noninteractive && + sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list && + apt-get -yq update && apt-get -yq upgrade && + apt-get -yq build-dep tracker tracker-miners + +.tracker.alpine@common: + variables: + BASE_TAG: '2021-05-15.5' + FDO_UPSTREAM_REPO: GNOME/tracker + FDO_DISTRIBUTION_PACKAGES: 'alpine-sdk asciidoc bash-completion dbus dbus-dev git glib-dev gobject-introspection-dev gtk-doc icu-dev json-glib-dev libsoup-dev libxml2-dev meson py3-gobject3 py3-setuptools py3-tappy sqlite-dev vala' +.tracker.fedora:34@x86_64: + extends: .tracker.fedora@common + variables: + FDO_DISTRIBUTION_VERSION: 34 + FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" + +.tracker.fedora:rawhide@x86_64: + extends: .tracker.fedora@common + variables: + FDO_DISTRIBUTION_VERSION: rawhide + FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" + +.tracker.fedora:34@aarch64: + extends: .tracker.fedora@common + variables: + FDO_DISTRIBUTION_VERSION: 34 + FDO_DISTRIBUTION_TAG: "aarch64-${BASE_TAG}" + tags: + - aarch64 + +.tracker.ubuntu:rolling@x86_64: + extends: .tracker.ubuntu@common + variables: + FDO_DISTRIBUTION_VERSION: rolling + FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" + +.tracker.alpine:edge@x86_64: + extends: .tracker.alpine@common + variables: + FDO_DISTRIBUTION_VERSION: edge + FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" + +build-fedora-container@x86_64: + extends: + - .fdo.container-build@fedora + - .tracker.fedora:34@x86_64 + stage: prepare + variables: + GIT_STRATEGY: none + needs: + - check-commit-log + - check-merge-request + +build-fedora-rawhide-container@x86_64: + extends: + - .fdo.container-build@fedora + - .tracker.fedora:rawhide@x86_64 + stage: prepare + variables: + GIT_STRATEGY: none + needs: + - check-commit-log + - check-merge-request + +build-fedora-container@aarch64: + extends: + - .fdo.container-build@fedora + - .tracker.fedora:34@aarch64 + stage: prepare + variables: + GIT_STRATEGY: none + needs: + - check-commit-log + - check-merge-request + +build-ubuntu-container@x86_64: + extends: + - .fdo.container-build@ubuntu + - .tracker.ubuntu:rolling@x86_64 + stage: prepare + variables: + GIT_STRATEGY: none + needs: + - check-commit-log + - check-merge-request + +build-alpine-container@x86_64: + extends: + - .fdo.container-build@alpine + - .tracker.alpine:edge@x86_64 + stage: prepare + variables: + GIT_STRATEGY: none + needs: + - check-commit-log + - check-merge-request + +.build-template: &build + stage: build + script: + - meson . build -Db_lto=true -Db_coverage=true -Dsystemd_user_services=false -Dtests_tap_protocol=true --prefix /usr + - ninja -C build + artifacts: + expire_in: 1 day + paths: + - build + +build-fedora@x86_64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:34@x86_64 + needs: + - build-fedora-container@x86_64 + <<: *build + +build-fedora-rawhide@x86_64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 + needs: + - build-fedora-rawhide-container@x86_64 + <<: *build + +build-fedora@aarch64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:34@aarch64 + needs: + - build-fedora-container@aarch64 + allow_failure: true + <<: *build + +build-ubuntu-rolling@x86_64: + extends: + - .fdo.distribution-image@ubuntu + - .tracker.ubuntu:rolling@x86_64 + needs: + - build-ubuntu-container@x86_64 + <<: *build + +build-alpine-edge@x86_64: + extends: + - .fdo.distribution-image@alpine + - .tracker.alpine:edge@x86_64 + needs: + - build-alpine-container@x86_64 + <<: *build + +.test-template: &test + stage: test + variables: + G_SLICE: "always-malloc" + MALLOC_CHECK_: "3" script: - - mkdir build - cd build - - meson .. -Db_lto=true -Db_coverage=true -Dsystemd_user_services=false -Dtests_tap_protocol=true - - ninja - | # Remove the many "CI_" variables from the environment. Meson dumps the # whole environment for every failed test, and that gives a whole # screenful of junk each time unless we strip these. unset $(env|grep -o '^CI_[^=]*') - env LANG=C.UTF-8 LC_ALL=C.UTF-8 dbus-run-session eatmydata meson test --print-errorlogs ${MESON_TEST_EXTRA_ARGS} - + env LANG=C.UTF-8 LC_ALL=C.UTF-8 dbus-run-session meson test --print-errorlogs ${MESON_TEST_EXTRA_ARGS} after_script: - | echo "Distribution: " @@ -42,51 +249,78 @@ stages: echo "MESON_TEST_EXTRA_ARGS: ${MESON_TEST_EXTRA_ARGS}" echo echo "These values can be set at https://gitlab.gnome.org/GNOME/tracker/pipelines/new" - artifacts: + expire_in: 1 day when: always paths: - - build/meson-logs/testlog.txt + - build reports: junit: "build/meson-logs/testlog.junit.xml" +test-fedora@x86_64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:34@x86_64 + needs: + - build-fedora@x86_64 + <<: *test -test-alpine-edge: - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/alpine:edge +test-fedora-rawhide@x86_64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 + needs: + - build-fedora-rawhide@x86_64 <<: *test -test-fedora-latest: - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/fedora:latest +test-fedora@aarch64: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:34@aarch64 + needs: + - build-fedora@aarch64 + allow_failure: true <<: *test -test-ubuntu-rolling: - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/ubuntu:rolling +test-ubuntu@x86_64: + extends: + - .fdo.distribution-image@ubuntu + - .tracker.ubuntu:rolling@x86_64 + needs: + - build-ubuntu-rolling@x86_64 <<: *test -test-fedora-rawhide: - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/fedora:rawhide +test-alpine@x86_64: + extends: + - .fdo.distribution-image@alpine + - .tracker.alpine:edge@x86_64 + needs: + - build-alpine-edge@x86_64 <<: *test coverage-analysis: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 stage: analysis - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/fedora:latest allow_failure: true script: - - mkdir -p coverage-build/coveragereport - - cd coverage-build - - meson .. -Db_lto=true -Db_coverage=true - - ninja - - env LANG=C.UTF-8 LC_ALL=C.UTF-8 dbus-run-session eatmydata meson test --print-errorlogs ${MESON_TEST_EXTRA_ARGS} + - cd build + - mkdir -p coveragereport - gcovr --html-details --print-summary --root=.. --exclude=../docs/reference --exclude=../tests --exclude=../utils --exclude=../examples --output coveragereport/index.html coverage: '/^lines: (\d+\.\d+\%)/' artifacts: when: always paths: - - coverage-build/coveragereport + - build/coveragereport + needs: + - test-fedora@x86_64 coverity: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 stage: analysis - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/fedora:latest allow_failure: true script: - curl https://scan.coverity.com/download/linux64 --data "token=$COVERITY_TOKEN&project=Tracker" --output /tmp/coverity_tool.tgz @@ -100,19 +334,38 @@ coverity: --form token=$COVERITY_TOKEN --form email=carlosg@gnome.org --form file=@cov-int.tar.gz --form version="`git describe --tags`" --form description="gitlab CI build" + needs: + - build-fedora-rawhide-container@x86_64 only: - master + except: + changes: + - po/*.po + +static-scan: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 + stage: analysis + needs: + - build-fedora-rawhide-container@x86_64 + script: + - meson --buildtype=debug _scan_build + - ninja -C _scan_build scan-build + artifacts: + paths: + - _scan_build/meson-logs + allow_failure: true pages: + extends: + - .fdo.distribution-image@fedora + - .tracker.fedora:rawhide@x86_64 stage: website - image: registry.gitlab.gnome.org/gnome/tracker-oci-images/amd64/fedora:latest - dependencies: [] - before_script: - - pip3 install beautifulsoup4 mkdocs mkdocs-cinder script: - export install_prefix="$(pwd)/tracker-install" # Build tracker and install. - - mkdir build; pushd build; meson .. --prefix="$install_prefix"; ninja install; popd + - mkdir website-build; pushd website-build; meson .. --prefix="$install_prefix"; ninja; ninja install; popd # Build tracker-miners and install any documentation from there as well. - .gitlab-ci/checkout-tracker-miners.sh - pushd extra/tracker-miners; mkdir build; pushd build; env PKG_CONFIG_PATH="$install_prefix/lib64/pkgconfig" meson .. --prefix="$install_prefix"; ninja install; popd; popd @@ -124,6 +377,8 @@ pages: artifacts: paths: - public + needs: + - build-fedora-rawhide-container@x86_64 only: - master - /^sam\/website.*$/ diff --git a/.gitlab-ci/checkout-tracker-miners.sh b/.gitlab-ci/checkout-tracker-miners.sh index bf1ea0b5b..a3647660a 100755 --- a/.gitlab-ci/checkout-tracker-miners.sh +++ b/.gitlab-ci/checkout-tracker-miners.sh @@ -5,7 +5,7 @@ tracker_target= mkdir extra cd extra -git clone https://gitlab.gnome.org/GNOME/tracker-miners.git +git clone --depth 1 https://gitlab.gnome.org/GNOME/tracker-miners.git if [ $? -ne 0 ]; then echo Checkout failed diff --git a/docs/design/contentfw-structural-view.dot b/docs/design/contentfw-structural-view.dot deleted file mode 100644 index 33e667b95..000000000 --- a/docs/design/contentfw-structural-view.dot +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Structural view of Content Framework - * - * Generate PNG with: dot -Tpng tracker-structural-view.dot - * View the diagram: dotty tracker-structural-view.dot -*/ - -digraph G { - - graph [size="640,480"]; - node [shape=box, style=filled, fontsize=11]; - edge [fontsize=11]; - - { rank=source - app [label="<<process>>\n\napplication"]; - } - - subgraph cluster0 { - label="Content Framework" - - qsparql [label="<<library>>\n\nQsparql"]; - libthumbnailer [label="<<library>>\n\nlibthumbnailer"]; - libcontentaction [label="<<library>>\n\nlibcontentaction"]; - trackerutils [label="<<command-line>>\n\ntracker-utils"]; - tracker [label="<<library>>\n\ntracker\n(see detailed diagram)"]; - - trackerextract [label="<<process>>\n\ntracker-extract"]; - libtrackerextract [label="<<library>>\n\nlibtracker-extract"]; - trackerextract -> libtrackerextract [label="<<links>>"]; - - trackerminerfs [label="<<process>>\n\ntracker-miner-fs"]; - libtrackerminer [label="<<library>>\n\nlibtracker-miner"]; - - tumbler [label="<<process>>\n\ntumbler"]; - - {rank=same; tracker; trackerminerfs; libtrackerextract}; - - libthumbnailer -> tumbler [label="<<D-Bus>>"] - qsparql -> tracker [label="<<link>>"] - - trackerminerfs -> trackerextract [label="<<D-Bus>>"] - trackerminerfs -> libtrackerminer [label="<<Implements>>"] - trackerminerfs -> tracker [label="<<link>>"] - - trackerutils -> tracker [label="<<D-Bus>>"] - trackerutils -> trackerminerfs [label="<<D-Bus>>"] - - } - - { - rank=sink - extractionlibs [label="<<libraries>>\n\nextraction-libraries"]; - gstreamer [label="<<library>>\n\ngstreamer"]; - libhal [label="<<library>>\n\nlibhal"]; - libquill [label="<<library>>\n\nlibquill"]; - libplayback [label="<<library>>\n\nlibplayback"]; - sqlite [label="<<library>>\n\nsqlite" ]; - - gio [label="<<library>>\n\nGIO"]; - inotify [label="<<kernel>>\n\ninotify"]; - gio -> inotify; - } - - app -> qsparql [label="<<link>>"] - app -> libthumbnailer [label="<<link>>"] - app -> libcontentaction [label="<<link>>"] - - trackerextract -> extractionlibs [label="<<link>>"] - trackerextract -> gstreamer [label="<<link>>"] - trackerextract -> libplayback [label="<<link>>"] - -// trackerstore -> libhal [label="<<link>>"] -// trackerminerfs -> libhal [label="<<link>>"] - - trackerminerfs -> gio [label="<<link>>"] - - tumbler -> libquill [label="<<link>>"] - tracker -> sqlite - -} diff --git a/docs/design/tracker-miner-fs.dia b/docs/design/tracker-miner-fs.dia Binary files differdeleted file mode 100644 index 66d1b5103..000000000 --- a/docs/design/tracker-miner-fs.dia +++ /dev/null diff --git a/docs/design/tracker-store.dia b/docs/design/tracker-store.dia Binary files differdeleted file mode 100644 index 515d5ae9b..000000000 --- a/docs/design/tracker-store.dia +++ /dev/null diff --git a/docs/design/tracker-structural-view.dot b/docs/design/tracker-structural-view.dot deleted file mode 100644 index 38994a563..000000000 --- a/docs/design/tracker-structural-view.dot +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Structural view of tracker - * - * Generate PNG with: dot -Tpng tracker-structural-view.dot - * View the diagram: dotty tracker-structural-view.dot -*/ - -digraph G { - - graph [size="640,480"]; - node [shape=box, style=filled, fontsize=11]; - edge [fontsize=11]; - - { rank=source - qsparql [label="<<library>>\n\nQSparql"]; - } - - subgraph cluster0 { - label="Tracker" - - libtrackersparql [label="<<library>>\n\nlibtracker-sparql"] - store [label="<<process>>\n\ntracker-store"] - libtrackerdata [label="<<library>>\n\nlibtracker-data"] - } - - { - rank=sink - sqlite [label="<<library>>\n\nsqlite" ]; - } - - qsparql -> libtrackersparql [label="<<link>>"] - libtrackersparql -> store [label="<<DBus>>\n(write)"] - libtrackersparql -> libtrackerdata [label="<<link>>\n(read)"] - store -> libtrackerdata [label="<<link>>"] - libtrackerdata -> sqlite [label="<<link>>"] - - - -} diff --git a/docs/reference/libtracker-sparql/examples.xml b/docs/reference/libtracker-sparql/examples.xml index 7c475fd06..b0d1c0ef8 100644 --- a/docs/reference/libtracker-sparql/examples.xml +++ b/docs/reference/libtracker-sparql/examples.xml @@ -35,9 +35,12 @@ </para> <para> - Once you end up with the query, remember to call <function><link linkend="g-object-unref">g_object_unref</link></function> - for the <type><link linkend="TrackerSparqlCursor-struct">TrackerSparqlCursor</link></type>. And the same applies to the - <type><link linkend="TrackerSparqlConnection-struct">TrackerSparqlConnection</link></type> when no longer needed. + The <function><link linkend="tracker-sparql-connection-query-statement">tracker_sparql_connection_query_statement</link></function> + function can be used to obtain a <link linkend="TrackerSparqlStatement">TrackerSparqlStatement</link> object holding a prepared SPARQL + query that can then be executed with <function><link linkend="tracker-sparql-statement-execute">tracker_sparql_statement_execute</link></function>. + The query string can contain <systemitem>~name</systemitem> placeholders which can be replaced with arbitrary values before query execution with the + <function><link linkend="tracker-sparql-statement-bind-string">tracker_sparql_statement_bind_string</link></function> and similar functions. + This allows parsing the query string only once and to execute it multiple times with different parameters with potentially significant performance gains. </para> <para> @@ -133,4 +136,3 @@ </chapter> </part> - diff --git a/docs/reference/libtracker-sparql/examples/readonly-example.c b/docs/reference/libtracker-sparql/examples/readonly-example.c index 3759e5299..2aafd7e0d 100644 --- a/docs/reference/libtracker-sparql/examples/readonly-example.c +++ b/docs/reference/libtracker-sparql/examples/readonly-example.c @@ -5,6 +5,7 @@ int main (int argc, const char **argv) GError *error = NULL; TrackerSparqlConnection *connection; TrackerSparqlCursor *cursor; + TrackerSparqlStatement *stmt; const gchar *query = "SELECT nie:url(?u) WHERE { ?u a nfo:FileDataObject }"; connection = tracker_sparql_connection_bus_new ("org.freedesktop.Tracker3.Miner.Files", NULL, NULL, &error); @@ -18,9 +19,9 @@ int main (int argc, const char **argv) /* Make a synchronous query to the store */ cursor = tracker_sparql_connection_query (connection, - query, - NULL, - &error); + query, + NULL, + &error); if (error) { /* Some error happened performing the query, not good */ @@ -49,6 +50,42 @@ int main (int argc, const char **argv) g_object_unref (cursor); } + /* Prepare the statement with tracker_sparql_connection_query_statement */ + stmt = tracker_sparql_connection_query_statement (connection, + query, + NULL, + &error); + + if (error) { + /* Some error happened performing the query, not good */ + g_printerr ("Couldn't query the Tracker Store: '%s'", + error->message); + g_clear_error (&error); + + return 1; + } + + /* Executes the SPARQL query with the currently bound values and get new cursor */ + cursor = tracker_sparql_statement_execute (stmt, NULL, &error); + + /* Check results... */ + if (!cursor) { + g_print ("No results found :-/\n"); + } else { + gint i = 0; + + /* Iterate, synchronously, the results... */ + while (tracker_sparql_cursor_next (cursor, NULL, &error)) { + g_print ("Result [%d]: %s\n", + i++, + tracker_sparql_cursor_get_string (cursor, 0, NULL)); + } + + g_print ("A total of '%d' results were found\n", i); + + g_object_unref (cursor); + } + g_object_unref (connection); return 0; diff --git a/docs/reference/libtracker-sparql/libtracker-sparql.types b/docs/reference/libtracker-sparql/libtracker-sparql.types index 6b77ba0e7..6bfc99f9d 100644 --- a/docs/reference/libtracker-sparql/libtracker-sparql.types +++ b/docs/reference/libtracker-sparql/libtracker-sparql.types @@ -1,5 +1,3 @@ -#include <libtracker-sparql/tracker-sparql.h> - tracker_endpoint_get_type tracker_endpoint_dbus_get_type tracker_endpoint_http_get_type diff --git a/docs/tools/ttlresource2xml.c b/docs/tools/ttlresource2xml.c index 953366938..784680446 100644 --- a/docs/tools/ttlresource2xml.c +++ b/docs/tools/ttlresource2xml.c @@ -442,7 +442,7 @@ print_class_hierarchy (FILE *f, { GPtrArray *strings; gchar *id; - gint i; + gsize i; strings = class_get_parent_hierarchy_strings (klass, ontology); @@ -481,7 +481,7 @@ print_flag (FILE *f, g_fprintf (f, "<alt>%s</alt>", flag_description); g_fprintf (f, "</inlinemediaobject>"); g_fprintf (f, "</link>"); -}; +} static void print_property_table (FILE *f, diff --git a/docs/website/faq.md b/docs/website/faq.md index ce5aedc4c..8370cb64d 100644 --- a/docs/website/faq.md +++ b/docs/website/faq.md @@ -7,7 +7,7 @@ It's a search engine, and a database. Tracker Miner FS indexes content from your home directory automatically, so applications can provide instant search results when you need them. -See the [overview](overview) for more information. +See the [overview](../overview) for more information. ## What files will Tracker index? diff --git a/docs/website/overview.md b/docs/website/overview.md index 8a1fd6d2f..5d73dd0b8 100644 --- a/docs/website/overview.md +++ b/docs/website/overview.md @@ -107,5 +107,9 @@ search application powered by Xapian. targets very large-scale workloads. It has a much heavier footprint compared to Tracker. +[ripgrep-all](https://phiresky.github.io/blog/2019/rga--ripgrep-for-zip-targz-docx-odt-epub-jpg/) +is a commandline tool that can search for text within many types of file, and +caches extracted data between runs. + See the Wikipedia article on [Desktop search](https://en.wikipedia.org/wiki/Desktop_search) for more information. diff --git a/meson.build b/meson.build index 44e8fbbfc..b142b1835 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project('tracker', 'c', 'vala', meson_version: '>=0.51', default_options: [ 'c_std=c99', - 'warning_level=3']) + 'warning_level=2']) gnome = import('gnome') i18n = import('i18n') @@ -321,7 +321,6 @@ build_root = meson.current_build_dir() po_subdir = join_paths(source_root, 'po') tracker_internal_libs_dir = join_paths(get_option('prefix'), get_option('libdir'), 'tracker-' + tracker_api_version) -tracker_install_rpath = ':'.join([tracker_internal_libs_dir, libdir]) # NOTE: We don't use ${TRACKER_API_VERSION} because other content like # the ontology is installed to the same location. diff --git a/src/libtracker-common/tracker-language.c b/src/libtracker-common/tracker-language.c index 42bac1176..b57f24df2 100644 --- a/src/libtracker-common/tracker-language.c +++ b/src/libtracker-common/tracker-language.c @@ -83,7 +83,7 @@ static void language_set_property (GObject *object, const GValue *value, GParamSpec *pspec); -G_DEFINE_TYPE_WITH_PRIVATE (TrackerLanguage, tracker_language, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerLanguage, tracker_language, G_TYPE_OBJECT) static void tracker_language_class_init (TrackerLanguageClass *klass) diff --git a/src/libtracker-common/tracker-term-utils.c b/src/libtracker-common/tracker-term-utils.c index a6d5d3a97..713b8d797 100644 --- a/src/libtracker-common/tracker-term-utils.c +++ b/src/libtracker-common/tracker-term-utils.c @@ -80,7 +80,7 @@ fd_term_dimensions (gint fd, guint *cols, guint *rows) { - struct winsize ws = {}; + struct winsize ws = { 0 }; if (ioctl(fd, TIOCGWINSZ, &ws) < 0) { *cols = 0; diff --git a/src/libtracker-data/tracker-class.c b/src/libtracker-data/tracker-class.c index c3fcdd2cd..8ad1df4a8 100644 --- a/src/libtracker-data/tracker-class.c +++ b/src/libtracker-data/tracker-class.c @@ -52,7 +52,7 @@ struct _TrackerClassPrivate { static void class_finalize (GObject *object); -G_DEFINE_TYPE_WITH_PRIVATE (TrackerClass, tracker_class, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerClass, tracker_class, G_TYPE_OBJECT) static void tracker_class_class_init (TrackerClassClass *klass) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index b2e774ee8..775f561a0 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -1204,6 +1204,17 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager, return; } + if (!tracker_property_get_indexed (property)) { + g_critical ("%s: nrl:secondaryindex only applies to nrl:indexed properties", ontology_path); + return; + } + + if (tracker_property_get_multiple_values (property) || + tracker_property_get_multiple_values (secondary_index)) { + g_critical ("%s: nrl:secondaryindex cannot be applied to properties with nrl:maxCardinality higher than one", ontology_path); + return; + } + tracker_property_set_secondary_index (property, secondary_index); } else if (g_strcmp0 (predicate, TRACKER_PREFIX_NRL "fulltextIndexed") == 0) { TrackerProperty *property; @@ -1757,15 +1768,6 @@ tracker_data_ontology_process_changes_post_import (GPtrArray *seen_classes, } static void -tracker_data_ontology_free_seen (GPtrArray *seen) -{ - if (seen) { - g_ptr_array_foreach (seen, (GFunc) g_object_unref, NULL); - g_ptr_array_free (seen, TRUE); - } -} - -static void load_ontology_file (TrackerDataManager *manager, GFile *file, gboolean in_update, @@ -3663,8 +3665,8 @@ setup_interface_cb (TrackerDBManager *db_manager, guint flags; if (!tracker_data_manager_initialize_iface (data_manager, iface, &error)) { - g_critical ("Could not set up interface %p: %s", - iface, error->message); + g_critical ("Could not set up interface : %s", + error->message); g_error_free (error); } @@ -3994,8 +3996,8 @@ tracker_data_manager_initable_init (GInitable *initable, GError *n_error = NULL; gboolean transaction_started = FALSE; - seen_classes = g_ptr_array_new (); - seen_properties = g_ptr_array_new (); + seen_classes = g_ptr_array_new_with_free_func (g_object_unref); + seen_properties = g_ptr_array_new_with_free_func (g_object_unref); g_debug ("Applying ontologies from %s to existing database", g_file_peek_path (manager->ontology_location)); @@ -4131,8 +4133,8 @@ tracker_data_manager_initable_init (GInitable *initable, g_warning ("%s", ontology_error->message); g_error_free (ontology_error); - tracker_data_ontology_free_seen (seen_classes); - tracker_data_ontology_free_seen (seen_properties); + g_clear_pointer (&seen_classes, g_ptr_array_unref); + g_clear_pointer (&seen_properties, g_ptr_array_unref); tracker_data_ontology_import_finished (manager); /* as we're processing an ontology change, @@ -4188,8 +4190,8 @@ tracker_data_manager_initable_init (GInitable *initable, g_warning ("%s", ontology_error->message); g_error_free (ontology_error); - tracker_data_ontology_free_seen (seen_classes); - tracker_data_ontology_free_seen (seen_properties); + g_clear_pointer (&seen_classes, g_ptr_array_unref); + g_clear_pointer (&seen_properties, g_ptr_array_unref); tracker_data_ontology_import_finished (manager); /* as we're processing an ontology change, @@ -4306,8 +4308,8 @@ tracker_data_manager_initable_init (GInitable *initable, g_warning ("%s", ontology_error->message); g_error_free (ontology_error); - tracker_data_ontology_free_seen (seen_classes); - tracker_data_ontology_free_seen (seen_properties); + g_clear_pointer (&seen_classes, g_ptr_array_unref); + g_clear_pointer (&seen_properties, g_ptr_array_unref); tracker_data_ontology_import_finished (manager); /* as we're processing an ontology change, @@ -4341,8 +4343,8 @@ tracker_data_manager_initable_init (GInitable *initable, write_ontologies_gvdb (manager, TRUE /* overwrite */, NULL); } - tracker_data_ontology_free_seen (seen_classes); - tracker_data_ontology_free_seen (seen_properties); + g_clear_pointer (&seen_classes, g_ptr_array_unref); + g_clear_pointer (&seen_properties, g_ptr_array_unref); /* Reset the is_new flag for all classes and properties */ tracker_data_ontology_import_finished (manager); diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 3091c05e8..cbd2fc46a 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -87,12 +87,12 @@ struct _TrackerDataUpdateBufferProperty { const gchar *name; GValue value; guint delete_all_values : 1; + guint delete_value : 1; }; struct _TrackerDataUpdateBufferTable { gboolean insert; gboolean delete_row; - gboolean delete_value; gboolean multiple_values; TrackerClass *class; /* TrackerDataUpdateBufferProperty */ @@ -139,7 +139,7 @@ enum { PROP_MANAGER }; -G_DEFINE_TYPE (TrackerData, tracker_data, G_TYPE_OBJECT); +G_DEFINE_TYPE (TrackerData, tracker_data, G_TYPE_OBJECT) static void cache_insert_value (TrackerData *data, const gchar *table_name, @@ -641,7 +641,6 @@ cache_delete_all_values (TrackerData *data, property.delete_all_values = TRUE; table = cache_ensure_table (data, table_name, TRUE); - table->delete_value = TRUE; g_array_append_val (table->properties, property); } @@ -656,12 +655,12 @@ cache_delete_value (TrackerData *data, TrackerDataUpdateBufferProperty property = { 0 }; property.name = field_name; + property.delete_value = TRUE; g_value_init (&property.value, G_VALUE_TYPE (value)); g_value_copy (value, &property.value); table = cache_ensure_table (data, table_name, multiple_values); - table->delete_value = TRUE; g_array_append_val (table->properties, property); } @@ -833,12 +832,12 @@ tracker_data_resource_buffer_flush (TrackerData *data, for (i = 0; i < table->properties->len; i++) { property = &g_array_index (table->properties, TrackerDataUpdateBufferProperty, i); - if (table->delete_value && property->delete_all_values) { + if (property->delete_all_values) { stmt = tracker_db_interface_create_vstatement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error, "DELETE FROM \"%s\".\"%s\" WHERE ID = ?", database, table_name); - } else if (table->delete_value) { + } else if (property->delete_value) { /* delete rows for multiple value properties */ stmt = tracker_db_interface_create_vstatement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error, "DELETE FROM \"%s\".\"%s\" WHERE ID = ? AND \"%s\" = ?", @@ -969,7 +968,7 @@ tracker_data_resource_buffer_flush (TrackerData *data, for (i = 0; i < table->properties->len; i++) { property = &g_array_index (table->properties, TrackerDataUpdateBufferProperty, i); - if (table->delete_value) { + if (property->delete_value) { /* just set value to NULL for single value properties */ tracker_db_statement_bind_null (stmt, param++); } else { @@ -1648,7 +1647,6 @@ get_old_property_values (TrackerData *data, old_values = get_property_values (data, property, error); } - data->resource_buffer->fts_updated = TRUE; } else { old_values = get_property_values (data, property, error); } @@ -1829,7 +1827,6 @@ bytes_from_gvalue (GValue *gvalue, datetime = g_value_get_boxed (gvalue); str = tracker_date_format_iso8601 (datetime); *bytes = g_bytes_new_take (str, strlen (str) + 1); - g_free (str); } else { g_set_error (error, TRACKER_SPARQL_ERROR, @@ -1902,6 +1899,9 @@ cache_insert_metadata_decomposed (TrackerData *data, super_properties = tracker_property_get_super_properties (property); multiple_values = tracker_property_get_multiple_values (property); + data->resource_buffer->fts_updated |= + tracker_property_get_fulltext_indexed (property); + while (*super_properties) { gboolean super_is_multi; GArray *super_old_values; @@ -1913,6 +1913,9 @@ cache_insert_metadata_decomposed (TrackerData *data, return FALSE; } + data->resource_buffer->fts_updated |= + tracker_property_get_fulltext_indexed (*super_properties); + if (super_is_multi || super_old_values->len == 0) { change |= cache_insert_metadata_decomposed (data, *super_properties, object, &new_error); @@ -2090,8 +2093,6 @@ cache_delete_resource_type_full (TrackerData *data, if (!single_type) { if (strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 && g_hash_table_size (data->resource_buffer->tables) == 0) { - tracker_db_interface_sqlite_fts_delete_id (iface, database, data->resource_buffer->id); - data->resource_buffer->fts_updated = TRUE; /* skip subclass query when deleting whole resource to improve performance */ diff --git a/src/libtracker-data/tracker-data-update.h b/src/libtracker-data/tracker-data-update.h index 9b6ceee57..a27c066c7 100644 --- a/src/libtracker-data/tracker-data-update.h +++ b/src/libtracker-data/tracker-data-update.h @@ -43,10 +43,6 @@ typedef struct _TrackerDataClass TrackerDataClass; #define TRACKER_IS_DATA_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TRACKER_TYPE_DATA)) #define TRACKER_DATA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_DATA, TrackerDataClass)) -typedef struct _TrackerData TrackerData; -typedef struct _TrackerDataClass TrackerDataClass; - -typedef struct _TrackerData TrackerData; typedef struct _TrackerData TrackerDataUpdate; typedef void (*TrackerStatementCallback) (gint graph_id, diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index 85813d7c9..c6a50add3 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -168,7 +168,7 @@ enum { G_DEFINE_TYPE_WITH_CODE (TrackerDBInterface, tracker_db_interface, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, - tracker_db_interface_initable_iface_init)); + tracker_db_interface_initable_iface_init)) G_DEFINE_TYPE (TrackerDBStatement, tracker_db_statement, G_TYPE_INITIALLY_UNOWNED) @@ -1821,6 +1821,12 @@ stmt_step (sqlite3_stmt *stmt) } static void +stmt_destroy (void *stmt) +{ + sqlite3_finalize ((sqlite3_stmt *) stmt); +} + +static void generate_uuid (sqlite3_context *context, const gchar *fn, const gchar *uri_prefix) @@ -1856,8 +1862,7 @@ generate_uuid (sqlite3_context *context, } while (result == SQLITE_ROW); if (store_auxdata) { - sqlite3_set_auxdata (context, 1, stmt, - (void (*) (void*)) sqlite3_finalize); + sqlite3_set_auxdata (context, 1, (void*) stmt, stmt_destroy); } if (result != SQLITE_DONE) { @@ -1945,8 +1950,7 @@ function_sparql_print_iri (sqlite3_context *context, } if (store_auxdata) { - sqlite3_set_auxdata (context, 1, stmt, - (void (*) (void*)) sqlite3_finalize); + sqlite3_set_auxdata (context, 1, (void*) stmt, stmt_destroy); } } else { sqlite3_result_value (context, argv[0]); @@ -2357,25 +2361,6 @@ tracker_db_interface_sqlite_fts_create_query (TrackerDBInterface *db_interface, return g_string_free (insert_str, FALSE); } -static gchar * -tracker_db_interface_sqlite_fts_create_delete_all_query (TrackerDBInterface *db_interface, - const gchar *database) -{ - GString *insert_str; - - insert_str = g_string_new (NULL); - g_string_append_printf (insert_str, - "INSERT INTO \"%s\".fts5 (fts5, rowid %s) " - "SELECT 'delete', rowid %s FROM \"%s\".fts_view " - "WHERE rowid = ? AND COALESCE(NULL %s) IS NOT NULL", - database, - db_interface->fts_properties, - db_interface->fts_properties, - database, - db_interface->fts_properties); - return g_string_free (insert_str, FALSE); -} - gboolean tracker_db_interface_sqlite_fts_update_text (TrackerDBInterface *db_interface, const gchar *database, @@ -2475,44 +2460,6 @@ tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface *db_interface, } gboolean -tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface, - const gchar *database, - int id) -{ - TrackerDBStatement *stmt; - GError *error = NULL; - gchar *query; - - query = tracker_db_interface_sqlite_fts_create_delete_all_query (db_interface, database); - stmt = tracker_db_interface_create_statement (db_interface, - TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, - &error, - query); - g_free (query); - - if (!stmt || error) { - if (error) { - g_warning ("Could not create FTS delete statement: %s", - error->message); - g_error_free (error); - } - return FALSE; - } - - tracker_db_statement_bind_int (stmt, 0, id); - tracker_db_statement_execute (stmt, &error); - g_object_unref (stmt); - - if (error) { - g_warning ("Could not delete FTS content: %s", error->message); - g_error_free (error); - return FALSE; - } - - return TRUE; -} - -gboolean tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database, GError **error) @@ -2523,7 +2470,7 @@ tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, void tracker_db_interface_sqlite_reset_collator (TrackerDBInterface *db_interface) { - TRACKER_NOTE (SQLITE, g_message ("Resetting collator in db interface %p", db_interface)); + TRACKER_NOTE (SQLITE, g_message ("Resetting collator in db interface")); /* This will overwrite any other collation set before, if any */ if (sqlite3_create_collation_v2 (db_interface->db, diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h b/src/libtracker-data/tracker-db-interface-sqlite.h index 1499a3aca..6659fcd10 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.h +++ b/src/libtracker-data/tracker-db-interface-sqlite.h @@ -82,9 +82,6 @@ gboolean tracker_db_interface_sqlite_fts_delete_text (TrackerD int rowid, const gchar **properties, const gchar **old_text); -gboolean tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *interface, - const gchar *database, - int rowid); gboolean tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database, GError **error); diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h index 7fd99dcbd..66b2b6b5f 100644 --- a/src/libtracker-data/tracker-db-manager.h +++ b/src/libtracker-data/tracker-db-manager.h @@ -50,8 +50,6 @@ typedef enum { TRACKER_DB_MANAGER_SKIP_VERSION_CHECK = 1 << 9, } TrackerDBManagerFlags; -typedef struct _TrackerDBManager TrackerDBManager; - gboolean tracker_db_manager_db_exists (GFile *cache_location); TrackerDBManager *tracker_db_manager_new (TrackerDBManagerFlags flags, diff --git a/src/libtracker-data/tracker-namespace.c b/src/libtracker-data/tracker-namespace.c index 6cbb1085e..601995910 100644 --- a/src/libtracker-data/tracker-namespace.c +++ b/src/libtracker-data/tracker-namespace.c @@ -42,7 +42,7 @@ struct _TrackerNamespacePrivate { static void namespace_finalize (GObject *object); -G_DEFINE_TYPE_WITH_PRIVATE (TrackerNamespace, tracker_namespace, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerNamespace, tracker_namespace, G_TYPE_OBJECT) static void tracker_namespace_class_init (TrackerNamespaceClass *klass) diff --git a/src/libtracker-data/tracker-ontology.c b/src/libtracker-data/tracker-ontology.c index a050755b3..d0e804a71 100644 --- a/src/libtracker-data/tracker-ontology.c +++ b/src/libtracker-data/tracker-ontology.c @@ -39,7 +39,7 @@ struct _TrackerOntologyPrivate { static void ontology_finalize (GObject *object); -G_DEFINE_TYPE_WITH_PRIVATE (TrackerOntology, tracker_ontology, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerOntology, tracker_ontology, G_TYPE_OBJECT) static void tracker_ontology_class_init (TrackerOntologyClass *klass) diff --git a/src/libtracker-data/tracker-property.c b/src/libtracker-data/tracker-property.c index a2df9035b..3446a9d8e 100644 --- a/src/libtracker-data/tracker-property.c +++ b/src/libtracker-data/tracker-property.c @@ -60,8 +60,6 @@ tracker_uri_to_property_type(const gchar *uri) return TRACKER_PROPERTY_TYPE_RESOURCE; } -typedef struct _TrackerPropertyPrivate TrackerPropertyPrivate; - struct _TrackerPropertyPrivate { gchar *uri; gchar *name; @@ -143,7 +141,7 @@ tracker_property_type_get_type (void) return etype; } -G_DEFINE_TYPE_WITH_PRIVATE (TrackerProperty, tracker_property, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerProperty, tracker_property, G_TYPE_OBJECT) static void tracker_property_class_init (TrackerPropertyClass *klass) diff --git a/src/libtracker-data/tracker-sparql-parser.c b/src/libtracker-data/tracker-sparql-parser.c index b01d626c2..d799f6aa8 100644 --- a/src/libtracker-data/tracker-sparql-parser.c +++ b/src/libtracker-data/tracker-sparql-parser.c @@ -26,8 +26,6 @@ #include <string.h> typedef struct _TrackerRuleState TrackerRuleState; -typedef struct _TrackerNodeTree TrackerNodeTree; -typedef struct _TrackerParserNode TrackerParserNode; typedef struct _TrackerParserState TrackerParserState; typedef struct _TrackerGrammarParser TrackerGrammarParser; @@ -635,7 +633,7 @@ tracker_grammar_parser_read (TrackerGrammarParser *parser, tracker_parser_state_skip_whitespace (state, parser); - return (g_node_first_child ((GNode *) state->node_tree->root) > 0 && + return (g_node_first_child ((GNode *) state->node_tree->root) && parser->query[state->current] == '\0'); } diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 332b295cb..7b11fa44e 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -153,6 +153,7 @@ typedef struct gboolean convert_to_string; gboolean in_property_function; + gboolean in_relational_expression; } TrackerSparqlState; struct _TrackerSparql @@ -2474,7 +2475,8 @@ _end_triples_block (TrackerSparql *sparql, first = FALSE; binding = g_ptr_array_index (triple_context->literal_bindings, i); - if (binding->data_type == TRACKER_PROPERTY_TYPE_DATETIME) { + if (binding->data_type == TRACKER_PROPERTY_TYPE_DATE || + binding->data_type == TRACKER_PROPERTY_TYPE_DATETIME) { _append_string_printf (sparql, "SparqlTimeSort (%s) = SparqlTimeSort (", tracker_binding_get_sql_expression (binding)); _append_literal_sql (sparql, TRACKER_LITERAL_BINDING (binding)); _append_string (sparql, ") "); @@ -7413,51 +7415,69 @@ static gboolean translate_RelationalExpression (TrackerSparql *sparql, GError **error) { + TrackerStringBuilder *str, *old; const gchar *old_sep; + gboolean in_relational_expression, bool_op = TRUE; /* RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT' 'IN' ExpressionList )? */ + str = _append_placeholder (sparql); + old = tracker_sparql_swap_builder (sparql, str); _call_rule (sparql, NAMED_RULE_NumericExpression, error); + tracker_sparql_swap_builder (sparql, old); + + in_relational_expression = sparql->current_state->in_relational_expression; + sparql->current_state->in_relational_expression = TRUE; if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_IN)) { _append_string (sparql, "IN "); old_sep = tracker_sparql_swap_current_expression_list_separator (sparql, ", "); _call_rule (sparql, NAMED_RULE_ExpressionList, error); tracker_sparql_swap_current_expression_list_separator (sparql, old_sep); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_NOT)) { _expect (sparql, RULE_TYPE_LITERAL, LITERAL_OP_IN); _append_string (sparql, "NOT IN "); old_sep = tracker_sparql_swap_current_expression_list_separator (sparql, ", "); _call_rule (sparql, NAMED_RULE_ExpressionList, error); tracker_sparql_swap_current_expression_list_separator (sparql, old_sep); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_EQ)) { _append_string (sparql, " = "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_NE)) { _append_string (sparql, " != "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_LT)) { _append_string (sparql, " < "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_GT)) { _append_string (sparql, " > "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_LE)) { _append_string (sparql, " <= "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OP_GE)) { _append_string (sparql, " >= "); _call_rule (sparql, NAMED_RULE_NumericExpression, error); - sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; + } else { + /* This is an unary expression */ + sparql->current_state->in_relational_expression = FALSE; + bool_op = FALSE; + } + + if (sparql->current_state->in_relational_expression && + (sparql->current_state->expression_type == TRACKER_PROPERTY_TYPE_DATE || + sparql->current_state->expression_type == TRACKER_PROPERTY_TYPE_DATETIME)) { + old = tracker_sparql_swap_builder (sparql, str); + _prepend_string (sparql, "SparqlTimeSort("); + _append_string (sparql, ") "); + tracker_sparql_swap_builder (sparql, old); } + if (bool_op) + sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_BOOLEAN; + + sparql->current_state->in_relational_expression = in_relational_expression; + return TRUE; } @@ -7597,6 +7617,8 @@ translate_PrimaryExpression (TrackerSparql *sparql, TrackerGrammarNamedRule rule; TrackerBinding *binding; TrackerVariable *variable; + TrackerStringBuilder *str, *old; + gboolean is_datetime_comparison = FALSE; gchar *name; /* PrimaryExpression ::= BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var @@ -7604,6 +7626,9 @@ translate_PrimaryExpression (TrackerSparql *sparql, rule = _current_rule (sparql); select_context = TRACKER_SELECT_CONTEXT (sparql->context); + str = _append_placeholder (sparql); + old = tracker_sparql_swap_builder (sparql, str); + switch (rule) { case NAMED_RULE_NumericLiteral: case NAMED_RULE_BooleanLiteral: @@ -7618,6 +7643,11 @@ translate_PrimaryExpression (TrackerSparql *sparql, _call_rule (sparql, rule, error); name = _dup_last_string (sparql); + is_datetime_comparison = + (sparql->current_state->in_relational_expression && + (sparql->current_state->expression_type == TRACKER_PROPERTY_TYPE_DATE || + sparql->current_state->expression_type == TRACKER_PROPERTY_TYPE_DATETIME)); + if (tracker_context_lookup_variable_by_name (sparql->current_state->context, name)) { variable = _last_node_variable (sparql); @@ -7638,6 +7668,13 @@ translate_PrimaryExpression (TrackerSparql *sparql, _call_rule (sparql, rule, error); binding = g_ptr_array_index (select_context->literal_bindings, select_context->literal_bindings->len - 1); + sparql->current_state->expression_type = binding->data_type; + + is_datetime_comparison = + (sparql->current_state->in_relational_expression && + (binding->data_type == TRACKER_PROPERTY_TYPE_DATE || + binding->data_type == TRACKER_PROPERTY_TYPE_DATETIME)); + _append_literal_sql (sparql, TRACKER_LITERAL_BINDING (binding)); break; case NAMED_RULE_BrackettedExpression: @@ -7649,6 +7686,13 @@ translate_PrimaryExpression (TrackerSparql *sparql, g_assert_not_reached (); } + if (is_datetime_comparison) { + _prepend_string (sparql, "SparqlTimeSort("); + _append_string (sparql, ") "); + } + + tracker_sparql_swap_builder (sparql, old); + return TRUE; } @@ -8951,11 +8995,11 @@ translate_RDFLiteral (TrackerSparql *sparql, cast = _dup_last_string (sparql); } - if (is_parameter && (langtag || cast)) { + if (is_parameter && langtag) { g_free (str); g_free (langtag); g_free (cast); - _raise (PARSE, "Parameter cannot have LANGTAG/^^ modifiers", "RDFLiteral"); + _raise (PARSE, "Parameter cannot have LANGTAG modifier", "RDFLiteral"); } if (is_parameter) { diff --git a/src/libtracker-data/tracker-turtle-reader.h b/src/libtracker-data/tracker-turtle-reader.h index 2d7846bf0..8663f3cec 100644 --- a/src/libtracker-data/tracker-turtle-reader.h +++ b/src/libtracker-data/tracker-turtle-reader.h @@ -28,7 +28,7 @@ G_DECLARE_FINAL_TYPE (TrackerTurtleReader, tracker_turtle_reader, TRACKER, TURTLE_READER, - GObject); + GObject) TrackerTurtleReader * tracker_turtle_reader_new (GInputStream *stream); TrackerTurtleReader * tracker_turtle_reader_new_for_file (GFile *file, diff --git a/src/libtracker-data/tracker-vtab-triples.c b/src/libtracker-data/tracker-vtab-triples.c index 1ef067a68..5aa079ebe 100644 --- a/src/libtracker-data/tracker-vtab-triples.c +++ b/src/libtracker-data/tracker-vtab-triples.c @@ -370,6 +370,8 @@ convert_to_string (const gchar *table_name, return g_strdup_printf ("CAST (t.\"%s\" AS TEXT)", table_name); } + + g_assert_not_reached(); } static void diff --git a/src/libtracker-sparql/tracker-connection.c b/src/libtracker-sparql/tracker-connection.c index d21bce3e2..fcb2d2ecd 100644 --- a/src/libtracker-sparql/tracker-connection.c +++ b/src/libtracker-sparql/tracker-connection.c @@ -350,10 +350,10 @@ tracker_sparql_connection_update (TrackerSparqlConnection *connection, g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); g_return_if_fail (!error || !*error); - return TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->update (connection, - sparql, - cancellable, - error); + TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->update (connection, + sparql, + cancellable, + error); } /** @@ -402,9 +402,9 @@ tracker_sparql_connection_update_finish (TrackerSparqlConnection *connection, g_return_if_fail (G_IS_ASYNC_RESULT (res)); g_return_if_fail (!error || !*error); - return TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->update_finish (connection, - res, - error); + TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->update_finish (connection, + res, + error); } /** diff --git a/src/libtracker-sparql/tracker-cursor.c b/src/libtracker-sparql/tracker-cursor.c index 4f2e9a5ae..3e32b3320 100644 --- a/src/libtracker-sparql/tracker-cursor.c +++ b/src/libtracker-sparql/tracker-cursor.c @@ -414,7 +414,7 @@ tracker_sparql_cursor_close (TrackerSparqlCursor *cursor) { g_return_if_fail (TRACKER_IS_SPARQL_CURSOR (cursor)); - return TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->close (cursor); + TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->close (cursor); } /** @@ -487,10 +487,10 @@ tracker_sparql_cursor_next_async (TrackerSparqlCursor *cursor, g_return_if_fail (TRACKER_IS_SPARQL_CURSOR (cursor)); g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); - return TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->next_async (cursor, - cancellable, - callback, - user_data); + TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->next_async (cursor, + cancellable, + callback, + user_data); } /** @@ -536,5 +536,5 @@ tracker_sparql_cursor_rewind (TrackerSparqlCursor *cursor) { g_return_if_fail (TRACKER_IS_SPARQL_CURSOR (cursor)); - return TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->rewind (cursor); + TRACKER_SPARQL_CURSOR_GET_CLASS (cursor)->rewind (cursor); } diff --git a/src/libtracker-sparql/tracker-endpoint-dbus.c b/src/libtracker-sparql/tracker-endpoint-dbus.c index f204ed37b..ea62aa56d 100644 --- a/src/libtracker-sparql/tracker-endpoint-dbus.c +++ b/src/libtracker-sparql/tracker-endpoint-dbus.c @@ -169,7 +169,7 @@ query_request_new (TrackerEndpointDBus *endpoint, stream = g_unix_output_stream_new (fd, TRUE); buffered_stream = g_buffered_output_stream_new_sized (stream, - getpagesize ()); + sysconf (_SC_PAGE_SIZE)); request->data_stream = g_data_output_stream_new (buffered_stream); g_data_output_stream_set_byte_order (request->data_stream, @@ -212,7 +212,7 @@ update_request_new (TrackerEndpointDBus *endpoint, stream = g_unix_input_stream_new (input, TRUE); request->input_stream = g_data_input_stream_new (stream); g_buffered_input_stream_set_buffer_size (G_BUFFERED_INPUT_STREAM (request->input_stream), - getpagesize ()); + sysconf (_SC_PAGE_SIZE)); g_data_input_stream_set_byte_order (request->input_stream, G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN); g_object_unref (stream); diff --git a/src/libtracker-sparql/tracker-endpoint-dbus.h b/src/libtracker-sparql/tracker-endpoint-dbus.h index f0ade8a09..8c999f3ec 100644 --- a/src/libtracker-sparql/tracker-endpoint-dbus.h +++ b/src/libtracker-sparql/tracker-endpoint-dbus.h @@ -46,7 +46,7 @@ G_BEGIN_DECLS */ typedef struct _TrackerEndpointDBus TrackerEndpointDBus; -G_DEFINE_AUTOPTR_CLEANUP_FUNC (TrackerEndpointDBus, g_object_unref); +G_DEFINE_AUTOPTR_CLEANUP_FUNC (TrackerEndpointDBus, g_object_unref) TRACKER_AVAILABLE_IN_ALL GType tracker_endpoint_dbus_get_type (void) G_GNUC_CONST; diff --git a/src/libtracker-sparql/tracker-endpoint-http.c b/src/libtracker-sparql/tracker-endpoint-http.c index bf28329f2..3fa99ab01 100644 --- a/src/libtracker-sparql/tracker-endpoint-http.c +++ b/src/libtracker-sparql/tracker-endpoint-http.c @@ -29,8 +29,6 @@ #define SERVER_HEADER "Tracker " PACKAGE_VERSION " (https://gitlab.gnome.org/GNOME/tracker/issues/)" -typedef struct _TrackerEndpointHttp TrackerEndpointHttp; - struct _TrackerEndpointHttp { TrackerEndpoint parent_instance; SoupServer *server; diff --git a/src/libtracker-sparql/tracker-endpoint-http.h b/src/libtracker-sparql/tracker-endpoint-http.h index 97a1c3c65..be6e6f408 100644 --- a/src/libtracker-sparql/tracker-endpoint-http.h +++ b/src/libtracker-sparql/tracker-endpoint-http.h @@ -46,7 +46,7 @@ G_BEGIN_DECLS */ typedef struct _TrackerEndpointHttp TrackerEndpointHttp; -G_DEFINE_AUTOPTR_CLEANUP_FUNC (TrackerEndpointHttp, g_object_unref); +G_DEFINE_AUTOPTR_CLEANUP_FUNC (TrackerEndpointHttp, g_object_unref) TRACKER_AVAILABLE_IN_3_1 GType tracker_endpoint_http_get_type (void) G_GNUC_CONST; diff --git a/src/libtracker-sparql/tracker-namespace-manager.c b/src/libtracker-sparql/tracker-namespace-manager.c index 7cac92d90..0d639b55f 100644 --- a/src/libtracker-sparql/tracker-namespace-manager.c +++ b/src/libtracker-sparql/tracker-namespace-manager.c @@ -38,7 +38,7 @@ typedef struct { GHashTable *namespace_to_prefix; } TrackerNamespaceManagerPrivate; -G_DEFINE_TYPE_WITH_PRIVATE (TrackerNamespaceManager, tracker_namespace_manager, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerNamespaceManager, tracker_namespace_manager, G_TYPE_OBJECT) #define GET_PRIVATE(object) (tracker_namespace_manager_get_instance_private (object)) /** @@ -335,4 +335,4 @@ tracker_namespace_manager_foreach (TrackerNamespaceManager *self, TrackerNamespaceManagerPrivate *priv = GET_PRIVATE (self); g_hash_table_foreach (priv->prefix_to_namespace, func, user_data); -}; +} diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c index 9fe293cb9..a6bf2315c 100644 --- a/src/libtracker-sparql/tracker-notifier.c +++ b/src/libtracker-sparql/tracker-notifier.c @@ -54,7 +54,6 @@ typedef struct _TrackerNotifierPrivate TrackerNotifierPrivate; typedef struct _TrackerNotifierSubscription TrackerNotifierSubscription; -typedef struct _TrackerNotifierEventCache TrackerNotifierEventCache; struct _TrackerNotifierSubscription { GDBusConnection *connection; diff --git a/src/libtracker-sparql/tracker-private.h b/src/libtracker-sparql/tracker-private.h index 4712476ad..18f4fd273 100644 --- a/src/libtracker-sparql/tracker-private.h +++ b/src/libtracker-sparql/tracker-private.h @@ -24,8 +24,6 @@ #include <libtracker-sparql/tracker-cursor.h> #include <libtracker-sparql/tracker-endpoint-dbus.h> -typedef struct _TrackerSparqlConnectionClass TrackerSparqlConnectionClass; - struct _TrackerSparqlConnectionClass { GObjectClass parent_class; @@ -114,8 +112,6 @@ struct _TrackerSparqlConnectionClass gchar **path); }; -typedef struct _TrackerSparqlCursorClass TrackerSparqlCursorClass; - struct _TrackerSparqlCursorClass { GObjectClass parent_class; @@ -152,14 +148,10 @@ struct _TrackerSparqlCursorClass gint (* get_n_columns) (TrackerSparqlCursor *cursor); }; -typedef struct _TrackerEndpointClass TrackerEndpointClass; - struct _TrackerEndpointClass { GObjectClass parent_class; }; -typedef struct _TrackerEndpointDBus TrackerEndpointDBus; - struct _TrackerEndpointDBus { TrackerEndpoint parent_instance; GDBusConnection *dbus_connection; @@ -194,15 +186,11 @@ struct _TrackerEndpointHttpClass { struct _TrackerEndpointClass parent_class; }; -typedef struct _TrackerResourceClass TrackerResourceClass; - struct _TrackerResourceClass { GObjectClass parent_class; }; -typedef struct _TrackerSparqlStatementClass TrackerSparqlStatementClass; - struct _TrackerSparqlStatementClass { GObjectClass parent_class; @@ -236,8 +224,6 @@ struct _TrackerSparqlStatementClass void (* clear_bindings) (TrackerSparqlStatement *stmt); }; -typedef struct _TrackerNotifierClass TrackerNotifierClass; - struct _TrackerNotifierClass { GObjectClass parent_class; @@ -245,8 +231,6 @@ struct _TrackerNotifierClass { const GPtrArray *events); }; -typedef struct _TrackerBatchClass TrackerBatchClass; - struct _TrackerBatchClass { GObjectClass parent_class; @@ -267,8 +251,6 @@ struct _TrackerBatchClass { GError **error); }; -typedef struct _TrackerSerializerClass TrackerSerializerClass; - struct _TrackerSerializerClass { GInputStreamClass parent_class; }; diff --git a/src/libtracker-sparql/tracker-resource.c b/src/libtracker-sparql/tracker-resource.c index 265bea835..01c5e38e9 100644 --- a/src/libtracker-sparql/tracker-resource.c +++ b/src/libtracker-sparql/tracker-resource.c @@ -42,7 +42,7 @@ typedef struct { GHashTable *overwrite; } TrackerResourcePrivate; -G_DEFINE_TYPE_WITH_PRIVATE (TrackerResource, tracker_resource, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE (TrackerResource, tracker_resource, G_TYPE_OBJECT) #define GET_PRIVATE(object) (tracker_resource_get_instance_private (object)) /** @@ -287,7 +287,7 @@ tracker_resource_set_gvalue (TrackerResource *self, g_hash_table_insert (priv->properties, g_strdup (property_uri), our_value); g_hash_table_insert (priv->overwrite, g_strdup (property_uri), GINT_TO_POINTER (TRUE)); -}; +} static gboolean validate_boolean (gboolean value, @@ -353,7 +353,7 @@ validate_pointer (const void *pointer, g_hash_table_insert (priv->overwrite, \ g_strdup (property_uri), \ GINT_TO_POINTER (TRUE)); \ - }; + } /** * tracker_resource_set_boolean: @@ -363,7 +363,7 @@ validate_pointer (const void *pointer, * * Sets a single-valued boolean object. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_boolean, gboolean, G_TYPE_BOOLEAN, g_value_set_boolean, validate_boolean); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_boolean, gboolean, G_TYPE_BOOLEAN, g_value_set_boolean, validate_boolean) /** * tracker_resource_set_double: @@ -373,7 +373,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_boolean, gboolean, G_TYPE_BOOLEAN, * * Sets a single-valued double object. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_double, double, G_TYPE_DOUBLE, g_value_set_double, validate_double); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_double, double, G_TYPE_DOUBLE, g_value_set_double, validate_double) /** * tracker_resource_set_int: @@ -383,7 +383,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_double, double, G_TYPE_DOUBLE, g_va * * Sets a single-valued integer object. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int, int, G_TYPE_INT, g_value_set_int, validate_int); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int, int, G_TYPE_INT, g_value_set_int, validate_int) /** * tracker_resource_set_int64: @@ -393,7 +393,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int, int, G_TYPE_INT, g_value_set_i * * Sets a single-valued integer object. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int64, gint64, G_TYPE_INT64, g_value_set_int64, validate_int64); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int64, gint64, G_TYPE_INT64, g_value_set_int64, validate_int64) /** * tracker_resource_set_relation: @@ -406,7 +406,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_int64, gint64, G_TYPE_INT64, g_valu * although in this function the URI will depend on the identifier * set on @resource. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_set_object, validate_pointer); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_set_object, validate_pointer) /** * tracker_resource_set_take_relation: (skip) @@ -419,7 +419,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_relation, TrackerResource *, TRACKE * although in this function the URI will depend on the identifier * set on @resource. This function takes ownership of @resource. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_take_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_take_object, validate_pointer); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_take_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_take_object, validate_pointer) /** * tracker_resource_set_string: @@ -429,7 +429,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_take_relation, TrackerResource *, T * * Sets a single-valued string object. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_string, const char *, G_TYPE_STRING, g_value_set_string, validate_pointer); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_string, const char *, G_TYPE_STRING, g_value_set_string, validate_pointer) /** * tracker_resource_set_uri: @@ -441,7 +441,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_string, const char *, G_TYPE_STRING * produces similar RDF to tracker_resource_set_relation(), although * it requires that the URI is previously known. */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_uri, const char *, TRACKER_TYPE_URI, g_value_set_string, validate_pointer); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_uri, const char *, TRACKER_TYPE_URI, g_value_set_string, validate_pointer) /** * tracker_resource_set_datetime: @@ -452,7 +452,7 @@ SET_PROPERTY_FOR_GTYPE (tracker_resource_set_uri, const char *, TRACKER_TYPE_URI * Sets a single-valued GDateTime as a #TrackerResource * Since: 3.2 */ -SET_PROPERTY_FOR_GTYPE (tracker_resource_set_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_set_boxed, validate_pointer); +SET_PROPERTY_FOR_GTYPE (tracker_resource_set_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_set_boxed, validate_pointer) /** * tracker_resource_add_gvalue: @@ -513,7 +513,7 @@ tracker_resource_add_gvalue (TrackerResource *self, if (array_holder != existing_value) { g_hash_table_insert (priv->properties, g_strdup (property_uri), array_holder); } -}; +} #define ADD_PROPERTY_FOR_GTYPE(name, ctype, gtype, set_function, validate_function) \ void name (TrackerResource *self, \ @@ -566,7 +566,7 @@ tracker_resource_add_gvalue (TrackerResource *self, g_hash_table_insert (priv->properties, \ g_strdup (property_uri), array_holder); \ } \ - }; + } /** * tracker_resource_add_boolean: @@ -576,7 +576,7 @@ tracker_resource_add_gvalue (TrackerResource *self, * * Adds a boolean object to a multi-valued property. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_boolean, gboolean, G_TYPE_BOOLEAN, g_value_set_boolean, validate_boolean); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_boolean, gboolean, G_TYPE_BOOLEAN, g_value_set_boolean, validate_boolean) /** * tracker_resource_add_double: @@ -586,7 +586,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_boolean, gboolean, G_TYPE_BOOLEAN, * * Adds a double object to a multi-valued property. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_double, double, G_TYPE_DOUBLE, g_value_set_double, validate_double); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_double, double, G_TYPE_DOUBLE, g_value_set_double, validate_double) /** * tracker_resource_add_int: @@ -596,7 +596,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_double, double, G_TYPE_DOUBLE, g_va * * Adds an integer object to a multi-valued property. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int, int, G_TYPE_INT, g_value_set_int, validate_int); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int, int, G_TYPE_INT, g_value_set_int, validate_int) /** * tracker_resource_add_int64: @@ -606,7 +606,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int, int, G_TYPE_INT, g_value_set_i * * Adds an integer object to a multi-valued property. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int64, gint64, G_TYPE_INT64, g_value_set_int64, validate_int64); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int64, gint64, G_TYPE_INT64, g_value_set_int64, validate_int64) /** * tracker_resource_add_relation: @@ -619,7 +619,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_int64, gint64, G_TYPE_INT64, g_valu * although in this function the URI will depend on the identifier * set on @resource. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_set_object, validate_pointer); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_set_object, validate_pointer) /** * tracker_resource_add_take_relation: (skip) @@ -632,7 +632,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_relation, TrackerResource *, TRACKE * although in this function the URI will depend on the identifier * set on @resource. This function takes ownership of @resource. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_take_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_take_object, validate_pointer); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_take_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_take_object, validate_pointer) /** @@ -643,7 +643,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_take_relation, TrackerResource *, T * * Adds a string object to a multi-valued property. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_string, const char *, G_TYPE_STRING, g_value_set_string, validate_pointer); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_string, const char *, G_TYPE_STRING, g_value_set_string, validate_pointer) /** * tracker_resource_add_uri: @@ -655,7 +655,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_string, const char *, G_TYPE_STRING * produces similar RDF to tracker_resource_add_relation(), although * it requires that the URI is previously known. */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_uri, const char *, TRACKER_TYPE_URI, g_value_set_string, validate_pointer); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_uri, const char *, TRACKER_TYPE_URI, g_value_set_string, validate_pointer) /** * tracker_resource_add_datetime: @@ -666,7 +666,7 @@ ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_uri, const char *, TRACKER_TYPE_URI * Adds GDateTime object to the multi-valued property. * Since: 3.2 */ -ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_set_boxed, validate_pointer); +ADD_PROPERTY_FOR_GTYPE (tracker_resource_add_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_set_boxed, validate_pointer) /** * tracker_resource_get_values: @@ -742,7 +742,7 @@ GList *tracker_resource_get_values (TrackerResource *self, } \ \ return get_function (value); \ - }; + } /** * tracker_resource_get_first_boolean: @@ -753,7 +753,7 @@ GList *tracker_resource_get_values (TrackerResource *self, * * Returns: the first boolean object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_boolean, gboolean, G_TYPE_BOOLEAN, g_value_get_boolean, FALSE); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_boolean, gboolean, G_TYPE_BOOLEAN, g_value_get_boolean, FALSE) /** * tracker_resource_get_first_double: @@ -764,7 +764,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_boolean, gboolean, G_TYPE_BOO * * Returns: the first double object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_double, double, G_TYPE_DOUBLE, g_value_get_double, 0.0); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_double, double, G_TYPE_DOUBLE, g_value_get_double, 0.0) /** * tracker_resource_get_first_int: @@ -775,7 +775,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_double, double, G_TYPE_DOUBLE * * Returns: the first integer object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int, int, G_TYPE_INT, g_value_get_int, 0); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int, int, G_TYPE_INT, g_value_get_int, 0) /** * tracker_resource_get_first_int64: @@ -786,7 +786,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int, int, G_TYPE_INT, g_value * * Returns: the first integer object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int64, gint64, G_TYPE_INT64, g_value_get_int64, 0); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int64, gint64, G_TYPE_INT64, g_value_get_int64, 0) /** * tracker_resource_get_first_relation: @@ -797,7 +797,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_int64, gint64, G_TYPE_INT64, * * Returns: (transfer none): the first resource object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_get_object, NULL); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_relation, TrackerResource *, TRACKER_TYPE_RESOURCE, g_value_get_object, NULL) /** * tracker_resource_get_first_string: @@ -808,7 +808,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_relation, TrackerResource *, * * Returns: the first string object */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_string, const char *, G_TYPE_STRING, g_value_get_string, NULL); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_string, const char *, G_TYPE_STRING, g_value_get_string, NULL) /** * tracker_resource_get_first_uri: @@ -819,7 +819,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_string, const char *, G_TYPE_ * * Returns: the first resource object as an URI. */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_uri, const char *, TRACKER_TYPE_URI, g_value_get_string, NULL); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_uri, const char *, TRACKER_TYPE_URI, g_value_get_string, NULL) /** * tracker_resource_get_first_datetime: @@ -831,7 +831,7 @@ GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_uri, const char *, TRACKER_TY * Returns: the first GDateTime object * Since: 3.2 */ -GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_get_boxed, NULL); +GET_PROPERTY_FOR_GTYPE (tracker_resource_get_first_datetime, GDateTime *, G_TYPE_DATE_TIME, g_value_get_boxed, NULL) /** * tracker_resource_get_identifier: @@ -945,7 +945,7 @@ tracker_resource_compare (TrackerResource *a, b_priv = GET_PRIVATE (b); return strcmp (a_priv->identifier, b_priv->identifier); -}; +} /** * tracker_resource_get_properties: @@ -1623,7 +1623,7 @@ tracker_resource_generate_jsonld (TrackerResource *self, } g_hash_table_foreach (priv->properties, generate_jsonld_foreach, data); -}; +} static void generate_jsonld_value (const GValue *value, diff --git a/src/libtracker-sparql/tracker-serializer-json.h b/src/libtracker-sparql/tracker-serializer-json.h index ca0d49e47..c55aadc06 100644 --- a/src/libtracker-sparql/tracker-serializer-json.h +++ b/src/libtracker-sparql/tracker-serializer-json.h @@ -31,6 +31,6 @@ G_DECLARE_FINAL_TYPE (TrackerSerializerJson, tracker_serializer_json, TRACKER, SERIALIZER_JSON, - TrackerSerializer); + TrackerSerializer) #endif /* TRACKER_SERIALIZER_JSON_H */ diff --git a/src/libtracker-sparql/tracker-serializer-xml.c b/src/libtracker-sparql/tracker-serializer-xml.c index 9e4b5ec47..057312dfb 100644 --- a/src/libtracker-sparql/tracker-serializer-xml.c +++ b/src/libtracker-sparql/tracker-serializer-xml.c @@ -99,7 +99,7 @@ serialize_up_to_position (TrackerSerializerXml *serializer_xml, xmlTextWriterWriteFormatAttribute (serializer_xml->writer, XML ("name"), "%s", - g_ptr_array_index (serializer_xml->vars, i)); + (char *) g_ptr_array_index (serializer_xml->vars, i)); xmlTextWriterEndElement (serializer_xml->writer); } diff --git a/src/libtracker-sparql/tracker-serializer-xml.h b/src/libtracker-sparql/tracker-serializer-xml.h index d94bf4eb6..54acfb7db 100644 --- a/src/libtracker-sparql/tracker-serializer-xml.h +++ b/src/libtracker-sparql/tracker-serializer-xml.h @@ -31,6 +31,6 @@ G_DECLARE_FINAL_TYPE (TrackerSerializerXml, tracker_serializer_xml, TRACKER, SERIALIZER_XML, - TrackerSerializer); + TrackerSerializer) #endif /* TRACKER_SERIALIZER_XML_H */ diff --git a/src/libtracker-sparql/tracker-serializer.h b/src/libtracker-sparql/tracker-serializer.h index f948858bb..03dcbbba4 100644 --- a/src/libtracker-sparql/tracker-serializer.h +++ b/src/libtracker-sparql/tracker-serializer.h @@ -29,7 +29,7 @@ G_DECLARE_DERIVABLE_TYPE (TrackerSerializer, tracker_serializer, TRACKER, SERIALIZER, - GInputStream); + GInputStream) typedef enum { diff --git a/src/libtracker-sparql/tracker-statement.c b/src/libtracker-sparql/tracker-statement.c index 54cce281c..c3d0ce30b 100644 --- a/src/libtracker-sparql/tracker-statement.c +++ b/src/libtracker-sparql/tracker-statement.c @@ -214,9 +214,9 @@ tracker_sparql_statement_bind_boolean (TrackerSparqlStatement *stmt, g_return_if_fail (TRACKER_IS_SPARQL_STATEMENT (stmt)); g_return_if_fail (name != NULL); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_boolean (stmt, - name, - value); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_boolean (stmt, + name, + value); } /** @@ -235,9 +235,9 @@ tracker_sparql_statement_bind_int (TrackerSparqlStatement *stmt, g_return_if_fail (TRACKER_IS_SPARQL_STATEMENT (stmt)); g_return_if_fail (name != NULL); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_int (stmt, - name, - value); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_int (stmt, + name, + value); } /** @@ -256,9 +256,9 @@ tracker_sparql_statement_bind_double (TrackerSparqlStatement *stmt, g_return_if_fail (TRACKER_IS_SPARQL_STATEMENT (stmt)); g_return_if_fail (name != NULL); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_double (stmt, - name, - value); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_double (stmt, + name, + value); } /** @@ -278,9 +278,9 @@ tracker_sparql_statement_bind_string (TrackerSparqlStatement *stmt, g_return_if_fail (name != NULL); g_return_if_fail (value != NULL); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_string (stmt, - name, - value); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_string (stmt, + name, + value); } /** @@ -302,9 +302,9 @@ tracker_sparql_statement_bind_datetime (TrackerSparqlStatement *stmt, g_return_if_fail (name != NULL); g_return_if_fail (value != NULL); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_datetime (stmt, - name, - value); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->bind_datetime (stmt, + name, + value); } /** @@ -350,10 +350,10 @@ tracker_sparql_statement_execute_async (TrackerSparqlStatement *stmt, g_return_if_fail (TRACKER_IS_SPARQL_STATEMENT (stmt)); g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); - return TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->execute_async (stmt, - cancellable, - callback, - user_data); + TRACKER_SPARQL_STATEMENT_GET_CLASS (stmt)->execute_async (stmt, + cancellable, + callback, + user_data); } /** diff --git a/src/portal/meson.build b/src/portal/meson.build index b4bb7feb9..c39f6b3da 100644 --- a/src/portal/meson.build +++ b/src/portal/meson.build @@ -8,7 +8,6 @@ sources = [ executable('tracker-xdg-portal-@0@'.format(tracker_api_major), sources, c_args: tracker_c_args, install: true, - install_rpath: tracker_install_rpath, install_dir: get_option('libexecdir'), dependencies: [tracker_sparql_dep, tracker_common_dep], include_directories: [commoninc, configinc, srcinc], diff --git a/src/portal/tracker-portal-endpoint.c b/src/portal/tracker-portal-endpoint.c index 79028a1b6..5cce3c2c2 100644 --- a/src/portal/tracker-portal-endpoint.c +++ b/src/portal/tracker-portal-endpoint.c @@ -29,7 +29,6 @@ #define GRAPH_ALL "*" #define GRAPH_DEFAULT "default" -typedef struct _TrackerPortalEndpoint TrackerPortalEndpoint; typedef struct _TrackerPortalEndpointClass TrackerPortalEndpointClass; struct _TrackerPortalEndpoint diff --git a/src/portal/tracker-portal.c b/src/portal/tracker-portal.c index 2da9adaeb..310fe3e20 100644 --- a/src/portal/tracker-portal.c +++ b/src/portal/tracker-portal.c @@ -28,7 +28,6 @@ #include "tracker-portal-endpoint.h" #include "tracker-portal-utils.h" -typedef struct _TrackerPortal TrackerPortal; typedef struct _TrackerSession TrackerSession; struct _TrackerSession diff --git a/src/tracker/meson.build b/src/tracker/meson.build index 882945a42..1cb0a4932 100644 --- a/src/tracker/meson.build +++ b/src/tracker/meson.build @@ -26,7 +26,7 @@ executable(command_name, sources, '-DBINDIR="@0@"'.format(join_paths(get_option('prefix'), get_option('bindir'))), ], install: true, - install_rpath: tracker_install_rpath, + install_rpath: tracker_internal_libs_dir, dependencies: [tracker_sparql_dep, tracker_data_dep], include_directories: [commoninc, configinc, srcinc], ) diff --git a/src/tracker/tracker-sparql.c b/src/tracker/tracker-sparql.c index 2841d355f..04fcdff71 100644 --- a/src/tracker/tracker-sparql.c +++ b/src/tracker/tracker-sparql.c @@ -609,6 +609,13 @@ tree_node_data_new (const gchar *class, } static void +tree_data_free (gpointer data, + gpointer user_data) +{ + g_free (data); +} + +static void tree_node_data_free (NodeData *data) { if (data == NULL) { @@ -616,7 +623,7 @@ tree_node_data_free (NodeData *data) } if (data->properties) { - g_slist_foreach (data->properties, (GFunc) g_free, NULL); + g_slist_foreach (data->properties, tree_data_free, NULL); g_slist_free (data->properties); } @@ -631,7 +638,8 @@ tree_new (void) } static gboolean -tree_free_foreach (GNode *node) +tree_free_foreach (GNode *node, + gpointer data) { tree_node_data_free (node->data); return FALSE; @@ -644,7 +652,7 @@ tree_free (GNode *node) G_POST_ORDER, G_TRAVERSE_ALL, -1, - (GNodeTraverseFunc) tree_free_foreach, + tree_free_foreach, NULL); g_node_destroy (node); } diff --git a/tests/functional-tests/ipc/meson.build b/tests/functional-tests/ipc/meson.build index fd8a58cbc..4aaa334b8 100644 --- a/tests/functional-tests/ipc/meson.build +++ b/tests/functional-tests/ipc/meson.build @@ -13,4 +13,4 @@ bus_query_cancellation_test = executable('test-bus-query-cancellation', test('bus-query-cancellation', bus_query_cancellation_test, env: test_env, suite: ['functional', 'ipc'], - timeout: 60) + timeout: 30) diff --git a/tests/functional-tests/meson.build b/tests/functional-tests/meson.build index c0a3b4bd6..23f514d09 100644 --- a/tests/functional-tests/meson.build +++ b/tests/functional-tests/meson.build @@ -51,7 +51,7 @@ foreach test_name: functional_tests env: test_env, protocol: protocol, suite: ['functional'], - timeout: 60) + timeout: 30) endforeach subdir('ipc') diff --git a/tests/libtracker-data/datetime/filter-1.out b/tests/libtracker-data/datetime/filter-1.out new file mode 100644 index 000000000..4f6581e08 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-1.out @@ -0,0 +1 @@ +"2010-02-16T11:00:00Z" diff --git a/tests/libtracker-data/datetime/filter-1.rq b/tests/libtracker-data/datetime/filter-1.rq new file mode 100644 index 000000000..e0ab2aeb9 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-1.rq @@ -0,0 +1,9 @@ +SELECT ?d { + VALUES ?d { + '2010-02-16T11:00:00Z'^^xsd:dateTime + '2011-02-16T11:00:00.123Z'^^xsd:dateTime + '2012-02-16T11:00:00Z'^^xsd:dateTime + } + FILTER (?d = '2010-02-16T11:00:00Z'^^xsd:dateTime) +} +ORDER BY ?d diff --git a/tests/libtracker-data/datetime/filter-2.out b/tests/libtracker-data/datetime/filter-2.out new file mode 100644 index 000000000..edb57a0aa --- /dev/null +++ b/tests/libtracker-data/datetime/filter-2.out @@ -0,0 +1 @@ +"2011-02-16T11:00:00.123Z" diff --git a/tests/libtracker-data/datetime/filter-2.rq b/tests/libtracker-data/datetime/filter-2.rq new file mode 100644 index 000000000..bcb5ac340 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-2.rq @@ -0,0 +1,8 @@ +SELECT ?d { + VALUES ?d { + '2010-02-16T11:00:00Z'^^xsd:dateTime + '2011-02-16T11:00:00.123Z'^^xsd:dateTime + '2012-02-16T11:00:00Z'^^xsd:dateTime + } + FILTER (?d = '2011-02-16T11:00:00.123Z'^^xsd:dateTime) +} diff --git a/tests/libtracker-data/datetime/filter-3.out b/tests/libtracker-data/datetime/filter-3.out new file mode 100644 index 000000000..4907aa6a6 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-3.out @@ -0,0 +1,2 @@ +"2012-02-16T11:00:00Z" +"2011-02-16T11:00:00.123Z" diff --git a/tests/libtracker-data/datetime/filter-3.rq b/tests/libtracker-data/datetime/filter-3.rq new file mode 100644 index 000000000..38257e3c2 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-3.rq @@ -0,0 +1,9 @@ +SELECT ?d { + VALUES ?d { + '2010-02-16T11:00:00Z'^^xsd:dateTime + '2011-02-16T11:00:00.123Z'^^xsd:dateTime + '2012-02-16T11:00:00Z'^^xsd:dateTime + } + FILTER (?d >= '2011-02-16T11:00:00.123Z'^^xsd:dateTime) +} +ORDER BY ?d diff --git a/tests/libtracker-data/datetime/filter-4.out b/tests/libtracker-data/datetime/filter-4.out new file mode 100644 index 000000000..edb57a0aa --- /dev/null +++ b/tests/libtracker-data/datetime/filter-4.out @@ -0,0 +1 @@ +"2011-02-16T11:00:00.123Z" diff --git a/tests/libtracker-data/datetime/filter-4.rq b/tests/libtracker-data/datetime/filter-4.rq new file mode 100644 index 000000000..9e9070c19 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-4.rq @@ -0,0 +1,9 @@ +SELECT ?d { + VALUES ?d { + '2010-02-16T11:00:00Z'^^xsd:dateTime + '2011-02-16T11:00:00.123Z'^^xsd:dateTime + '2012-02-16T11:00:00Z'^^xsd:dateTime + } + FILTER ('2011-02-16T11:00:00.123Z'^^xsd:dateTime = ?d) +} +ORDER BY ?d diff --git a/tests/libtracker-data/datetime/filter-5.out b/tests/libtracker-data/datetime/filter-5.out new file mode 100644 index 000000000..4907aa6a6 --- /dev/null +++ b/tests/libtracker-data/datetime/filter-5.out @@ -0,0 +1,2 @@ +"2012-02-16T11:00:00Z" +"2011-02-16T11:00:00.123Z" diff --git a/tests/libtracker-data/datetime/filter-5.rq b/tests/libtracker-data/datetime/filter-5.rq new file mode 100644 index 000000000..0b2b6dc0b --- /dev/null +++ b/tests/libtracker-data/datetime/filter-5.rq @@ -0,0 +1,9 @@ +SELECT ?d { + VALUES ?d { + '2010-02-16T11:00:00Z'^^xsd:dateTime + '2011-02-16T11:00:00.123Z'^^xsd:dateTime + '2012-02-16T11:00:00Z'^^xsd:dateTime + } + FILTER (?d IN ('2011-02-16T11:00:00.123Z'^^xsd:dateTime, '2012-02-16T11:00:00Z'^^xsd:dateTime, '2013-02-16T11:00:00Z'^^xsd:dateTime)) +} +ORDER BY ?d diff --git a/tests/libtracker-data/meson.build b/tests/libtracker-data/meson.build index e7386b851..3ba1ddf5e 100644 --- a/tests/libtracker-data/meson.build +++ b/tests/libtracker-data/meson.build @@ -44,6 +44,6 @@ foreach base_name: libtracker_data_slow_tests 'name': base_name, 'exe': binary, 'suite': ['data', 'slow'], - 'timeout': 280 + 'timeout': 100 } endforeach diff --git a/tests/libtracker-data/tracker-sparql-test.c b/tests/libtracker-data/tracker-sparql-test.c index dc4cdd2c4..aa53bbf41 100644 --- a/tests/libtracker-data/tracker-sparql-test.c +++ b/tests/libtracker-data/tracker-sparql-test.c @@ -104,6 +104,11 @@ const TestInfo tests[] = { { "datetime/functions-timezone-2", "datetime/data-2", FALSE }, { "datetime/functions-timezone-3", "datetime/data-2", FALSE }, { "datetime/functions-tz-1", "datetime/data-2", FALSE }, + { "datetime/filter-1", "datetime/data-1", FALSE }, + { "datetime/filter-2", "datetime/data-1", FALSE }, + { "datetime/filter-3", "datetime/data-1", FALSE }, + { "datetime/filter-4", "datetime/data-1", FALSE }, + { "datetime/filter-5", "datetime/data-1", FALSE }, { "describe/describe-single", "describe/data", FALSE }, { "describe/describe-non-existent", "describe/data", FALSE }, { "describe/describe-pattern", "describe/data", FALSE }, diff --git a/tests/libtracker-sparql/statement/cast.out b/tests/libtracker-sparql/statement/cast.out new file mode 100644 index 000000000..5a02e8885 --- /dev/null +++ b/tests/libtracker-sparql/statement/cast.out @@ -0,0 +1 @@ +"http://www.w3.org/2001/XMLSchema#" diff --git a/tests/libtracker-sparql/statement/cast.rq b/tests/libtracker-sparql/statement/cast.rq new file mode 100644 index 000000000..ee32af1f4 --- /dev/null +++ b/tests/libtracker-sparql/statement/cast.rq @@ -0,0 +1,6 @@ +SELECT ?s { + ?s nrl:lastModified ?d + FILTER ( ?d <= ~arg1^^xsd:dateTime ) +} +ORDER BY ASC ?d +LIMIT 1 diff --git a/tests/libtracker-sparql/tracker-fd-test.c b/tests/libtracker-sparql/tracker-fd-test.c index 2ba589d3a..a896903d5 100644 --- a/tests/libtracker-sparql/tracker-fd-test.c +++ b/tests/libtracker-sparql/tracker-fd-test.c @@ -32,14 +32,11 @@ typedef struct { const gchar *query; } AsyncData; -typedef struct { -} DataFixture; - static TrackerSparqlConnection *connection; gboolean started = FALSE; static void -delete_test_data (DataFixture *fixture, +delete_test_data (gpointer *fixture, gconstpointer user_data) { GError *error = NULL; @@ -55,7 +52,7 @@ delete_test_data (DataFixture *fixture, } static void -insert_test_data (DataFixture *fixture, +insert_test_data (gpointer *fixture, gconstpointer user_data) { GError *error = NULL; @@ -188,23 +185,23 @@ query_and_compare_results (const char *query) } static void -test_tracker_sparql_query_iterate (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate (gpointer *fixture, + gconstpointer user_data) { query_and_compare_results ("SELECT ?r nie:url(?r) WHERE {?r a nfo:FileDataObject}"); } static void -test_tracker_sparql_query_iterate_largerow (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_largerow (gpointer *fixture, + gconstpointer user_data) { query_and_compare_results ("SELECT nao:identifier(?r) WHERE {?r a nmm:Photo}"); } /* Runs an invalid query */ static void -test_tracker_sparql_query_iterate_error (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_error (gpointer *fixture, + gconstpointer user_data) { TrackerSparqlCursor *cursor; GError *error = NULL; @@ -228,8 +225,8 @@ test_tracker_sparql_query_iterate_error (DataFixture *fixture, /* Runs a query returning an empty set */ static void -test_tracker_sparql_query_iterate_empty_subprocess (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_empty_subprocess (gpointer *fixture, + gconstpointer user_data) { TrackerSparqlCursor *cursor; GError *error = NULL; @@ -249,8 +246,8 @@ test_tracker_sparql_query_iterate_empty_subprocess (DataFixture *fixture, } static void -test_tracker_sparql_query_iterate_empty (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_empty (gpointer *fixture, + gconstpointer user_data) { TrackerSparqlCursor *cursor; GError *error = NULL; @@ -274,8 +271,8 @@ test_tracker_sparql_query_iterate_empty (DataFixture *fixture, /* Closes the cursor before all results are read */ static void -test_tracker_sparql_query_iterate_sigpipe (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_sigpipe (gpointer *fixture, + gconstpointer user_data) { TrackerSparqlCursor *cursor; GError *error = NULL; @@ -292,8 +289,8 @@ test_tracker_sparql_query_iterate_sigpipe (DataFixture *fixture, } static void -test_tracker_sparql_update_fast_small (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_fast_small (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; const gchar *query = "INSERT { _:x a nfo:Image }"; @@ -304,8 +301,8 @@ test_tracker_sparql_update_fast_small (DataFixture *fixture, } static void -test_tracker_sparql_update_fast_large (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_fast_large (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; gchar *lots; @@ -343,7 +340,7 @@ async_update_array_callback (GObject *source_object, static void -test_tracker_sparql_update_array_async (DataFixture *fixture, +test_tracker_sparql_update_array_async (gpointer *fixture, gconstpointer user_data) { const gchar *queries[6] = { "INSERT { _:a a nfo:Image }", @@ -393,7 +390,7 @@ async_update_array_empty_callback (GObject *source_object, } static void -test_tracker_sparql_update_array_async_empty (DataFixture *fixture, +test_tracker_sparql_update_array_async_empty (gpointer *fixture, gconstpointer user_data) { const gchar **queries = NULL; @@ -421,8 +418,8 @@ test_tracker_sparql_update_array_async_empty (DataFixture *fixture, } static void -test_tracker_sparql_update_fast_error (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_fast_error (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; const gchar *query = "blork blork blork"; @@ -434,8 +431,8 @@ test_tracker_sparql_update_fast_error (DataFixture *fixture, } static void -test_tracker_sparql_update_blank_fast_small (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_blank_fast_small (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; const gchar *query = "INSERT { _:x a nfo:Image }"; @@ -450,8 +447,8 @@ test_tracker_sparql_update_blank_fast_small (DataFixture *fixture, } static void -test_tracker_sparql_update_blank_fast_large (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_blank_fast_large (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; gchar *lots; @@ -476,8 +473,8 @@ test_tracker_sparql_update_blank_fast_large (DataFixture *fixture, } static void -test_tracker_sparql_update_blank_fast_error (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_blank_fast_error (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; const gchar *query = "blork blork blork"; @@ -492,8 +489,8 @@ test_tracker_sparql_update_blank_fast_error (DataFixture *fixture, } static void -test_tracker_sparql_update_blank_fast_no_blanks (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_blank_fast_no_blanks (gpointer *fixture, + gconstpointer user_data) { GError *error = NULL; const gchar *query = "INSERT { <urn:not_blank> a nfo:Image }"; @@ -508,8 +505,8 @@ test_tracker_sparql_update_blank_fast_no_blanks (DataFixture *fixture, } static void -test_tracker_batch_sparql_update_fast (DataFixture *fixture, - gconstpointer user_data) +test_tracker_batch_sparql_update_fast (gpointer *fixture, + gconstpointer user_data) { /* GError *error = NULL; */ /* const gchar *query = "INSERT { _:x a nfo:Image }"; */ @@ -557,8 +554,8 @@ async_query_cb (GObject *source_object, } static void -test_tracker_sparql_query_iterate_async (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_async (gpointer *fixture, + gconstpointer user_data) { const gchar *query = "SELECT ?r nie:url(?r) WHERE {?r a nfo:FileDataObject}"; GMainLoop *main_loop; @@ -599,8 +596,8 @@ cancel_query_cb (GObject *source_object, } static void -test_tracker_sparql_query_iterate_async_cancel (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_query_iterate_async_cancel (gpointer *fixture, + gconstpointer user_data) { const gchar *query = "SELECT ?r nie:url(?r) WHERE {?r a nfo:FileDataObject}"; GMainLoop *main_loop; @@ -637,8 +634,8 @@ async_update_callback (GObject *source_object, } static void -test_tracker_sparql_update_async (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_async (gpointer *fixture, + gconstpointer user_data) { const gchar *query = "INSERT { _:x a nfo:Image }"; GMainLoop *main_loop; @@ -678,8 +675,8 @@ cancel_update_cb (GObject *source_object, } static void -test_tracker_sparql_update_async_cancel (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_async_cancel (gpointer *fixture, + gconstpointer user_data) { GCancellable *cancellable = g_cancellable_new (); const gchar *query = "INSERT { _:x a nfo:Image }"; @@ -717,8 +714,8 @@ async_update_blank_callback (GObject *source_object, } static void -test_tracker_sparql_update_blank_async (DataFixture *fixture, - gconstpointer user_data) +test_tracker_sparql_update_blank_async (gpointer *fixture, + gconstpointer user_data) { const gchar *query = "INSERT { _:x a nfo:Image }"; GMainLoop *main_loop; @@ -820,47 +817,47 @@ main (gint argc, gchar **argv) connection = create_dbus_connection (NULL); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_largerow", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_largerow", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_largerow, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_error", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_error", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_error, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_empty", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_empty", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_empty, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_empty/subprocess", DataFixture, NULL, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_empty/subprocess", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_empty_subprocess, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_sigpipe", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_sigpipe", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_sigpipe, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_fast_small", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_fast_small", gpointer, NULL, insert_test_data, test_tracker_sparql_update_fast_small, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_fast_large", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_fast_large", gpointer, NULL, insert_test_data, test_tracker_sparql_update_fast_large, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_fast_error", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_fast_error", gpointer, NULL, insert_test_data, test_tracker_sparql_update_fast_error, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_small", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_small", gpointer, NULL, insert_test_data, test_tracker_sparql_update_blank_fast_small, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_large", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_large", gpointer, NULL, insert_test_data, test_tracker_sparql_update_blank_fast_large, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_error", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_error", gpointer, NULL, insert_test_data, test_tracker_sparql_update_blank_fast_error, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_no_blanks", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_blank_fast_no_blanks", gpointer, NULL, insert_test_data, test_tracker_sparql_update_blank_fast_no_blanks, delete_test_data); - g_test_add ("/steroids/tracker/tracker_batch_sparql_update_fast", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_batch_sparql_update_fast", gpointer, NULL, insert_test_data, test_tracker_batch_sparql_update_fast, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_async", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_async", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_async, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_async_cancel", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_query_iterate_async_cancel", gpointer, NULL, insert_test_data, test_tracker_sparql_query_iterate_async_cancel, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_async", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_async", gpointer, NULL, insert_test_data, test_tracker_sparql_update_async, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_async_cancel", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_async_cancel", gpointer, NULL, insert_test_data, test_tracker_sparql_update_async_cancel, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_blank_async", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_blank_async", gpointer, NULL, insert_test_data, test_tracker_sparql_update_blank_async, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_array_async", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_array_async", gpointer, NULL, insert_test_data, test_tracker_sparql_update_array_async, delete_test_data); - g_test_add ("/steroids/tracker/tracker_sparql_update_array_async_empty", DataFixture, NULL, insert_test_data, + g_test_add ("/steroids/tracker/tracker_sparql_update_array_async_empty", gpointer, NULL, insert_test_data, test_tracker_sparql_update_array_async_empty, delete_test_data); return g_test_run (); diff --git a/tests/libtracker-sparql/tracker-sparql-test.c b/tests/libtracker-sparql/tracker-sparql-test.c index 70d5a5ef5..c6e1b0e8d 100644 --- a/tests/libtracker-sparql/tracker-sparql-test.c +++ b/tests/libtracker-sparql/tracker-sparql-test.c @@ -153,9 +153,7 @@ test_tracker_sparql_cursor_next_async_cb (GObject *source, */ if (next == next_to_cancel && finished == 1) { /* Cancel */ - g_print ("# Cancelling cancellable:%p at count:%d\n", - cancellables[query], - next); + g_print ("# Cancelling cancellable: at count:%d\n", next); g_cancellable_cancel (cancellables[query]); } diff --git a/tests/libtracker-sparql/tracker-statement-test.c b/tests/libtracker-sparql/tracker-statement-test.c index 9b26ac410..df9276489 100644 --- a/tests/libtracker-sparql/tracker-statement-test.c +++ b/tests/libtracker-sparql/tracker-statement-test.c @@ -50,6 +50,7 @@ TestInfo tests[] = { { "offset", "statement/offset.rq", "statement/offset.out", "0" }, { "offset-2", "statement/offset.rq", "statement/offset-2.out", "1" }, { "datetime", "statement/datetime.rq", "statement/datetime.out", NULL, NULL, "2020-12-04T04:10:03Z" }, + { "cast", "statement/cast.rq", "statement/cast.out", "2021-02-24T22:01:02Z" }, }; typedef struct { |