From 6ce19c537bd9de8d3c9821841bc5ed680b762742 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 24 May 2018 00:25:45 +0300 Subject: Adapt to inventing package_name type --- libbrep/build-extra.sql | 4 +-- libbrep/build.cxx | 2 +- libbrep/build.hxx | 11 ++++---- libbrep/build.xml | 6 ++--- libbrep/common-traits.hxx | 65 ++++++++++++++++++++++++++++++++++++++++++++++ libbrep/common.hxx | 16 ++++++++++-- libbrep/odb.sh | 1 + libbrep/package-extra.sql | 10 +++---- libbrep/package-traits.hxx | 8 +++--- libbrep/package.cxx | 9 ++++--- libbrep/package.hxx | 12 ++++----- libbrep/package.xml | 24 ++++++++--------- 12 files changed, 124 insertions(+), 44 deletions(-) create mode 100644 libbrep/common-traits.hxx (limited to 'libbrep') diff --git a/libbrep/build-extra.sql b/libbrep/build-extra.sql index 4da75e5..96e355c 100644 --- a/libbrep/build-extra.sql +++ b/libbrep/build-extra.sql @@ -22,7 +22,7 @@ SERVER package_server OPTIONS (table_name 'repository'); -- -- CREATE FOREIGN TABLE build_package ( - name TEXT NOT NULL, + name CITEXT NOT NULL, version_epoch INTEGER NOT NULL, version_canonical_upstream TEXT NOT NULL, version_canonical_release TEXT NOT NULL COLLATE "C", @@ -37,7 +37,7 @@ SERVER package_server OPTIONS (table_name 'package'); -- -- CREATE FOREIGN TABLE build_package_constraints ( - name TEXT NOT NULL, + name CITEXT NOT NULL, version_epoch INTEGER NOT NULL, version_canonical_upstream TEXT NOT NULL, version_canonical_release TEXT NOT NULL COLLATE "C", diff --git a/libbrep/build.cxx b/libbrep/build.cxx index 9b379b7..6ed711c 100644 --- a/libbrep/build.cxx +++ b/libbrep/build.cxx @@ -55,7 +55,7 @@ namespace brep // build // build:: - build (string pnm, version pvr, + build (package_name_type pnm, version pvr, string cfg, string tnm, version tvr, optional afp, optional ach, diff --git a/libbrep/build.hxx b/libbrep/build.hxx index 81c3749..64eb10a 100644 --- a/libbrep/build.hxx +++ b/libbrep/build.hxx @@ -24,9 +24,9 @@ // Used by the data migration entries. // -#define LIBBREP_BUILD_SCHEMA_VERSION_BASE 2 +#define LIBBREP_BUILD_SCHEMA_VERSION_BASE 3 -#pragma db model version(LIBBREP_BUILD_SCHEMA_VERSION_BASE, 2, closed) +#pragma db model version(LIBBREP_BUILD_SCHEMA_VERSION_BASE, 3, open) // We have to keep these mappings at the global scope instead of inside // the brep namespace because they need to be also effective in the @@ -161,12 +161,13 @@ namespace brep class build { public: - using timestamp_type = brep::timestamp; + using timestamp_type = brep::timestamp; + using package_name_type = brep::package_name; // Create the build object with the building state, non-existent status, // the timestamp set to now and the force state set to unforced. // - build (string package_name, version package_version, + build (package_name_type, version, string configuration, string toolchain_name, version toolchain_version, optional agent_fingerprint, @@ -176,7 +177,7 @@ namespace brep build_id id; - string& package_name; // Tracks id.package.name. + package_name_type& package_name; // Tracks id.package.name. upstream_version package_version; // Original of id.package.version. string& configuration; // Tracks id.configuration. string toolchain_name; diff --git a/libbrep/build.xml b/libbrep/build.xml index e765c00..04ffd78 100644 --- a/libbrep/build.xml +++ b/libbrep/build.xml @@ -1,7 +1,7 @@ - + - + @@ -39,7 +39,7 @@
- + diff --git a/libbrep/common-traits.hxx b/libbrep/common-traits.hxx new file mode 100644 index 0000000..b3c562e --- /dev/null +++ b/libbrep/common-traits.hxx @@ -0,0 +1,65 @@ +// file : libbrep/common-traits.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef LIBBREP_COMMON_TRAITS_HXX +#define LIBBREP_COMMON_TRAITS_HXX + +#include +#include // size_t +#include // move() + +#include + +#include + +namespace odb +{ + namespace pgsql + { + template <> + class value_traits: + value_traits + { + public: + using value_type = bpkg::package_name; + using query_type = bpkg::package_name; + using image_type = details::buffer; + + using base_type = value_traits; + + static void + set_value (value_type& v, + const details::buffer& b, + std::size_t n, + bool is_null) + { + std::string s; + base_type::set_value (s, b, n, is_null); + v = !s.empty () ? value_type (std::move (s)) : value_type (); + } + + static void + set_image (details::buffer& b, + std::size_t& n, + bool& is_null, + const value_type& v) + { + base_type::set_image (b, n, is_null, v.string ()); + } + }; + + template <> + struct type_traits + { + static const database_type_id db_type_id = id_string; + + struct conversion + { + static const char* to () {return "(?)::CITEXT";} + }; + }; + } +} + +#endif // LIBBREP_COMMON_TRAITS_HXX diff --git a/libbrep/common.hxx b/libbrep/common.hxx index 0950e7f..7860876 100644 --- a/libbrep/common.hxx +++ b/libbrep/common.hxx @@ -9,6 +9,8 @@ #include #include // static_assert +#include + #include #include @@ -188,14 +190,24 @@ namespace brep // extern const version wildcard_version; + // package_name + // + using bpkg::package_name; + + #pragma db value(package_name) type("CITEXT") + + #pragma db map type("CITEXT") as("TEXT") to("(?)::CITEXT") from("(?)::TEXT") + + // package_id + // #pragma db value struct package_id { - string name; + package_name name; canonical_version version; package_id () = default; - package_id (string n, const brep::version& v) + package_id (package_name n, const brep::version& v) : name (move (n)), version { v.epoch, v.canonical_upstream, v.canonical_release, v.revision} diff --git a/libbrep/odb.sh b/libbrep/odb.sh index 17a6ac4..3234899 100755 --- a/libbrep/odb.sh +++ b/libbrep/odb.sh @@ -12,6 +12,7 @@ lib="\ $odb $lib -d pgsql --std c++14 --generate-query \ --odb-epilogue '#include ' \ --hxx-prologue '#include ' \ + --hxx-prologue '#include ' \ -DLIBODB_BUILD2 -DLIBODB_PGSQL_BUILD2 \ -I .. -I ../../libbbot -I ../../libbpkg -I ../../libbutl \ --include-with-brackets --include-prefix libbrep \ diff --git a/libbrep/package-extra.sql b/libbrep/package-extra.sql index 5c18da2..bd5a27b 100644 --- a/libbrep/package-extra.sql +++ b/libbrep/package-extra.sql @@ -17,9 +17,9 @@ -- -- DROP FUNCTION IF EXISTS to_tsvector(IN document weighted_text); -- -DROP FUNCTION IF EXISTS search_packages(IN query tsquery, INOUT name TEXT); +DROP FUNCTION IF EXISTS search_packages(IN query tsquery, INOUT name CITEXT); DROP FUNCTION IF EXISTS search_latest_packages(IN query tsquery); -DROP FUNCTION IF EXISTS latest_package(INOUT name TEXT); +DROP FUNCTION IF EXISTS latest_package(INOUT name CITEXT); DROP FUNCTION IF EXISTS latest_packages(); DROP TYPE IF EXISTS weighted_text CASCADE; @@ -50,7 +50,7 @@ $$ LANGUAGE SQL STABLE; -- not found. -- CREATE FUNCTION -latest_package(INOUT name TEXT, +latest_package(INOUT name CITEXT, OUT version_epoch INTEGER, OUT version_canonical_upstream TEXT, OUT version_canonical_release TEXT, @@ -69,7 +69,7 @@ $$ LANGUAGE SQL STABLE; -- CREATE FUNCTION search_latest_packages(IN query tsquery, - OUT name TEXT, + OUT name CITEXT, OUT version_epoch INTEGER, OUT version_canonical_upstream TEXT, OUT version_canonical_release TEXT, @@ -93,7 +93,7 @@ $$ LANGUAGE SQL STABLE; -- CREATE FUNCTION search_packages(IN query tsquery, - INOUT name TEXT, + INOUT name CITEXT, OUT version_epoch INTEGER, OUT version_canonical_upstream TEXT, OUT version_canonical_release TEXT, diff --git a/libbrep/package-traits.hxx b/libbrep/package-traits.hxx index 56c8cec..6045633 100644 --- a/libbrep/package-traits.hxx +++ b/libbrep/package-traits.hxx @@ -1,9 +1,9 @@ -// file : brep/package-traits -*- C++ -*- +// file : libbrep/package-traits.hxx -*- C++ -*- // copyright : Copyright (c) 2014-2018 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file -#ifndef BREP_PACKAGE_TRAITS -#define BREP_PACKAGE_TRAITS +#ifndef LIBBREP_PACKAGE_TRAITS +#define LIBBREP_PACKAGE_TRAITS #include // size_t @@ -35,4 +35,4 @@ namespace odb } } -#endif // BREP_PACKAGE_TRAITS +#endif // LIBBREP_PACKAGE_TRAITS diff --git a/libbrep/package.cxx b/libbrep/package.cxx index 984f36b..7d94422 100644 --- a/libbrep/package.cxx +++ b/libbrep/package.cxx @@ -15,7 +15,7 @@ namespace brep { // dependency // - string dependency:: + package_name dependency:: name () const { return package.object_id ().name; @@ -47,7 +47,7 @@ namespace brep // package // package:: - package (string nm, + package (package_name nm, version_type vr, priority_type pr, string sm, @@ -97,7 +97,7 @@ namespace brep } package:: - package (string nm, + package (package_name nm, version_type vr, shared_ptr rp) : id (move (nm), vr), @@ -123,7 +123,8 @@ namespace brep // Probably drop-box would be better as also tells what are // the available internal repositories. // - string k (id.name + " " + version.string () + " " + version.string (true)); + string k (id.name.string () + " " + version.string () + " " + + version.string (true)); // Add tags to keywords. // diff --git a/libbrep/package.hxx b/libbrep/package.hxx index 98e8178..c6e1162 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -19,9 +19,9 @@ // Used by the data migration entries. // -#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 5 +#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 6 -#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 5, closed) +#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 6, open) namespace brep { @@ -125,7 +125,7 @@ namespace brep // Prerequisite package name. // - string + package_name name () const; // Database mapping. @@ -298,7 +298,7 @@ namespace brep // Create internal package object. Note that for stubs the build // constraints are meaningless, and so not saved. // - package (string name, + package (package_name name, version_type, priority_type, string summary, @@ -327,7 +327,7 @@ namespace brep // The only package information required to compose such a link is the // package name, version, and repository location. // - package (string name, version_type, shared_ptr); + package (package_name name, version_type, shared_ptr); bool internal () const noexcept {return internal_repository != nullptr;} @@ -492,7 +492,7 @@ namespace brep double rank; }; - #pragma db view query("/*CALL*/ SELECT count(*) FROM search_packages(?)") + #pragma db view query("/*CALL*/ SELECT count(*) FROM search_packages(?)") struct package_count { size_t result; diff --git a/libbrep/package.xml b/libbrep/package.xml index 1c85e49..9b83bb2 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -1,5 +1,5 @@ - +
@@ -70,7 +70,7 @@
- + @@ -118,7 +118,7 @@
- + @@ -151,7 +151,7 @@
- + @@ -182,7 +182,7 @@
- + @@ -215,7 +215,7 @@
- + @@ -250,14 +250,14 @@
- + - + @@ -313,7 +313,7 @@
- + @@ -348,7 +348,7 @@
- + @@ -379,7 +379,7 @@
- + @@ -415,7 +415,7 @@
- + -- cgit v1.1