![Adam Duskett](/assets/img/avatar_default.png)
ODB is an open-source, cross-platform, and cross-database object-relational mapping (ORM) system for C++. It allows you to persist C++ objects to a relational database without having to deal with tables, columns, or SQL and without manually writing any mapping code. ODB supports MySQL, SQLite, PostgreSQL, Oracle, and Microsoft SQL Server relational databases as well as C++98/03 and C++11 language standards. It also comes with optional profiles for Boost and Qt which allow you to seamlessly use value types, containers, and smart pointers from these libraries in your persistent C++ classes. This package is used for auto-generating ODB specific header files into useable code that can be linked against a seperate libodb and a specific libodb database library. As such, it is only needed as a host program and is not user selectable. Signed-off-by: Adam Duskett <aduskett@gmail.com> [Kamel: Fix incorrect odb license] Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com> [Thomas: add patch fixing gcc10 build, add references to upstream commits] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
352 lines
12 KiB
Diff
352 lines
12 KiB
Diff
From c5bea9562929c6b55ca208a530ae80033eeb1614 Mon Sep 17 00:00:00 2001
|
|
From: Boris Kolpackov <boris@codesynthesis.com>
|
|
Date: Tue, 7 Nov 2017 10:37:53 +0200
|
|
Subject: [PATCH] Switch to C++11, get rid of auto_ptr use
|
|
|
|
[Upstream: 6e374de9ae2f2978f2fca3390aba4ea3f72bfade]
|
|
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
|
|
---
|
|
odb/Makefile.am | 5 +++++
|
|
odb/context.cxx | 4 ++--
|
|
odb/context.hxx | 4 ++--
|
|
odb/generator.cxx | 18 +++++++++---------
|
|
odb/options.cli | 4 ++--
|
|
odb/parser.cxx | 14 ++++++++++----
|
|
odb/parser.hxx | 7 ++++---
|
|
odb/plugin.cxx | 10 +++++-----
|
|
odb/processor.cxx | 6 +++---
|
|
odb/validator.cxx | 2 +-
|
|
10 files changed, 43 insertions(+), 31 deletions(-)
|
|
|
|
diff --git a/odb/Makefile.am b/odb/Makefile.am
|
|
index 2f01398..d9e83d7 100644
|
|
--- a/odb/Makefile.am
|
|
+++ b/odb/Makefile.am
|
|
@@ -9,6 +9,11 @@ plugin_LTLIBRARIES = odb.la
|
|
|
|
AM_CPPFLAGS = -I'$(top_builddir)' -I'$(top_srcdir)'
|
|
|
|
+# Note: not passed by libtool when linking odb.so. Seems to be harmless for
|
|
+# now.
|
|
+#
|
|
+AM_CXXFLAGS = -std=c++0x
|
|
+
|
|
EXTRA_DIST = common-query.hxx common.hxx context.hxx context.ixx cxx-lexer.hxx cxx-token.hxx diagnostics.hxx emitter.hxx features.hxx gcc-fwd.hxx gcc.hxx generate.hxx generator.hxx instance.hxx location.hxx lookup.hxx option-functions.hxx option-parsers.hxx option-types.hxx options.hxx options.ixx parser.hxx pragma.hxx processor.hxx profile.hxx relational/common-query.hxx relational/common.hxx relational/common.txx relational/context.hxx relational/context.ixx relational/generate.hxx relational/header.hxx relational/inline.hxx relational/model.hxx relational/mssql/common.hxx relational/mssql/context.hxx relational/mysql/common.hxx relational/mysql/context.hxx relational/oracle/common.hxx relational/oracle/context.hxx relational/pgsql/common.hxx relational/pgsql/context.hxx relational/processor.hxx relational/schema-source.hxx relational/schema.hxx relational/source.hxx relational/sqlite/common.hxx relational/sqlite/context.hxx relational/validator.hxx semantics.hxx semantics/class-template.hxx semantics/class.hxx semantics/derived.hxx semantics/elements.hxx semantics/elements.ixx semantics/enum.hxx semantics/fundamental.hxx semantics/namespace.hxx semantics/relational.hxx semantics/relational/changelog.hxx semantics/relational/changeset.hxx semantics/relational/column.hxx semantics/relational/deferrable.hxx semantics/relational/elements.hxx semantics/relational/elements.txx semantics/relational/foreign-key.hxx semantics/relational/index.hxx semantics/relational/key.hxx semantics/relational/model.hxx semantics/relational/name.hxx semantics/relational/primary-key.hxx semantics/relational/table.hxx semantics/template.hxx semantics/union-template.hxx semantics/union.hxx semantics/unit.hxx sql-lexer.hxx sql-lexer.ixx sql-token.hxx sql-token.ixx traversal.hxx traversal/class-template.hxx traversal/class.hxx traversal/derived.hxx traversal/elements.hxx traversal/enum.hxx traversal/fundamental.hxx traversal/namespace.hxx traversal/relational.hxx traversal/relational/changelog.hxx traversal/relational/changeset.hxx traversal/relational/column.hxx traversal/relational/elements.hxx traversal/relational/foreign-key.hxx traversal/relational/index.hxx traversal/relational/key.hxx traversal/relational/model.hxx traversal/relational/primary-key.hxx traversal/relational/table.hxx traversal/template.hxx traversal/union-template.hxx traversal/union.hxx traversal/unit.hxx validator.hxx version.hxx options.cli
|
|
|
|
# Plugin.
|
|
diff --git a/odb/context.cxx b/odb/context.cxx
|
|
index d62fa88..87f1c32 100644
|
|
--- a/odb/context.cxx
|
|
+++ b/odb/context.cxx
|
|
@@ -564,14 +564,14 @@ namespace
|
|
};
|
|
}
|
|
|
|
-auto_ptr<context>
|
|
+unique_ptr<context>
|
|
create_context (ostream& os,
|
|
semantics::unit& unit,
|
|
options const& ops,
|
|
features& f,
|
|
semantics::relational::model* m)
|
|
{
|
|
- auto_ptr<context> r;
|
|
+ unique_ptr<context> r;
|
|
|
|
switch (ops.database ()[0])
|
|
{
|
|
diff --git a/odb/context.hxx b/odb/context.hxx
|
|
index 351bc61..10de237 100644
|
|
--- a/odb/context.hxx
|
|
+++ b/odb/context.hxx
|
|
@@ -13,7 +13,7 @@
|
|
#include <stack>
|
|
#include <vector>
|
|
#include <string>
|
|
-#include <memory> // std::auto_ptr
|
|
+#include <memory> // std::unique_ptr
|
|
#include <ostream>
|
|
#include <cstddef> // std::size_t
|
|
#include <iostream>
|
|
@@ -1691,7 +1691,7 @@ private:
|
|
|
|
// Create concrete database context.
|
|
//
|
|
-std::auto_ptr<context>
|
|
+std::unique_ptr<context>
|
|
create_context (std::ostream&,
|
|
semantics::unit&,
|
|
options const&,
|
|
diff --git a/odb/generator.cxx b/odb/generator.cxx
|
|
index 6aa5151..266b75f 100644
|
|
--- a/odb/generator.cxx
|
|
+++ b/odb/generator.cxx
|
|
@@ -4,7 +4,7 @@
|
|
|
|
#include <cctype> // std::toupper, std::is{alpha,upper,lower}
|
|
#include <string>
|
|
-#include <memory> // std::auto_ptr
|
|
+#include <memory> // std::unique_ptr
|
|
#include <iomanip>
|
|
#include <fstream>
|
|
#include <sstream>
|
|
@@ -141,7 +141,7 @@ generate (options const& ops,
|
|
|
|
if (gen_schema)
|
|
{
|
|
- auto_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
|
|
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
|
|
|
|
switch (db)
|
|
{
|
|
@@ -471,7 +471,7 @@ generate (options const& ops,
|
|
//
|
|
if (gen_cxx)
|
|
{
|
|
- auto_ptr<context> ctx (
|
|
+ unique_ptr<context> ctx (
|
|
create_context (hxx, unit, ops, fts, model.get ()));
|
|
|
|
sloc_filter sloc (ctx->os);
|
|
@@ -581,7 +581,7 @@ generate (options const& ops,
|
|
//
|
|
if (gen_cxx)
|
|
{
|
|
- auto_ptr<context> ctx (
|
|
+ unique_ptr<context> ctx (
|
|
create_context (ixx, unit, ops, fts, model.get ()));
|
|
|
|
sloc_filter sloc (ctx->os);
|
|
@@ -641,7 +641,7 @@ generate (options const& ops,
|
|
//
|
|
if (gen_cxx && (db != database::common || md == multi_database::dynamic))
|
|
{
|
|
- auto_ptr<context> ctx (
|
|
+ unique_ptr<context> ctx (
|
|
create_context (cxx, unit, ops, fts, model.get ()));
|
|
|
|
sloc_filter sloc (ctx->os);
|
|
@@ -734,7 +734,7 @@ generate (options const& ops,
|
|
//
|
|
if (gen_sep_schema)
|
|
{
|
|
- auto_ptr<context> ctx (
|
|
+ unique_ptr<context> ctx (
|
|
create_context (sch, unit, ops, fts, model.get ()));
|
|
|
|
sloc_filter sloc (ctx->os);
|
|
@@ -799,7 +799,7 @@ generate (options const& ops,
|
|
//
|
|
if (gen_sql_schema)
|
|
{
|
|
- auto_ptr<context> ctx (
|
|
+ unique_ptr<context> ctx (
|
|
create_context (sql, unit, ops, fts, model.get ()));
|
|
|
|
switch (db)
|
|
@@ -865,7 +865,7 @@ generate (options const& ops,
|
|
//
|
|
{
|
|
ofstream& mig (*mig_pre[i]);
|
|
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
|
|
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
|
|
|
|
switch (db)
|
|
{
|
|
@@ -908,7 +908,7 @@ generate (options const& ops,
|
|
//
|
|
{
|
|
ofstream& mig (*mig_post[i]);
|
|
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
|
|
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
|
|
|
|
switch (db)
|
|
{
|
|
diff --git a/odb/options.cli b/odb/options.cli
|
|
index cf278cb..c994975 100644
|
|
--- a/odb/options.cli
|
|
+++ b/odb/options.cli
|
|
@@ -211,10 +211,10 @@ class options
|
|
\cb{db pointer} pragma will use this pointer by default. The value
|
|
of this option can be \cb{*} which denotes the raw pointer and is
|
|
the default, or qualified name of a smart pointer class template,
|
|
- for example, \cb{std::auto_ptr}. In the latter case, the ODB compiler
|
|
+ for example, \cb{std::shared_ptr}. In the latter case, the ODB compiler
|
|
constructs the object or view pointer by adding a single template
|
|
argument of the object or view type to the qualified name, for example
|
|
- \cb{std::auto_ptr<object>}. The ODB runtime uses object and view
|
|
+ \cb{std::shared_ptr<object>}. The ODB runtime uses object and view
|
|
pointers to return, and, in case of objects, pass and cache
|
|
dynamically allocated instances of object and view types.
|
|
|
|
diff --git a/odb/parser.cxx b/odb/parser.cxx
|
|
index 927063b..30e45af 100644
|
|
--- a/odb/parser.cxx
|
|
+++ b/odb/parser.cxx
|
|
@@ -26,7 +26,7 @@ public:
|
|
|
|
impl (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
|
|
|
|
- auto_ptr<unit>
|
|
+ unique_ptr<unit>
|
|
parse (tree global_scope, path const& main_file);
|
|
|
|
private:
|
|
@@ -728,10 +728,10 @@ impl (options const& ops,
|
|
{
|
|
}
|
|
|
|
-auto_ptr<unit> parser::impl::
|
|
+unique_ptr<unit> parser::impl::
|
|
parse (tree global_scope, path const& main_file)
|
|
{
|
|
- auto_ptr<unit> u (new unit (main_file));
|
|
+ unique_ptr<unit> u (new unit (main_file));
|
|
u->insert (global_namespace, *u);
|
|
process_named_pragmas (global_namespace, *u);
|
|
|
|
@@ -2263,6 +2263,12 @@ fq_scope (tree decl)
|
|
// parser
|
|
//
|
|
|
|
+parser::
|
|
+~parser ()
|
|
+{
|
|
+ // Needs parser::impl definition.
|
|
+}
|
|
+
|
|
parser::
|
|
parser (options const& ops,
|
|
loc_pragmas& lp,
|
|
@@ -2272,7 +2278,7 @@ parser (options const& ops,
|
|
{
|
|
}
|
|
|
|
-auto_ptr<unit> parser::
|
|
+unique_ptr<unit> parser::
|
|
parse (tree global_scope, path const& main_file)
|
|
{
|
|
return impl_->parse (global_scope, main_file);
|
|
diff --git a/odb/parser.hxx b/odb/parser.hxx
|
|
index 80e4aa4..648337f 100644
|
|
--- a/odb/parser.hxx
|
|
+++ b/odb/parser.hxx
|
|
@@ -7,7 +7,7 @@
|
|
|
|
#include <odb/gcc.hxx>
|
|
|
|
-#include <memory> // std::auto_ptr
|
|
+#include <memory> // std::unique_ptr
|
|
|
|
#include <odb/pragma.hxx>
|
|
#include <odb/options.hxx>
|
|
@@ -18,9 +18,10 @@ class parser
|
|
public:
|
|
class failed {};
|
|
|
|
+ ~parser ();
|
|
parser (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
|
|
|
|
- std::auto_ptr<semantics::unit>
|
|
+ std::unique_ptr<semantics::unit>
|
|
parse (tree global_scope, semantics::path const& main_file);
|
|
|
|
private:
|
|
@@ -31,7 +32,7 @@ private:
|
|
|
|
private:
|
|
class impl;
|
|
- std::auto_ptr<impl> impl_;
|
|
+ std::unique_ptr<impl> impl_;
|
|
};
|
|
|
|
#endif // ODB_PARSER_HXX
|
|
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
|
|
index 779faed..0fac632 100644
|
|
--- a/odb/plugin.cxx
|
|
+++ b/odb/plugin.cxx
|
|
@@ -8,7 +8,7 @@
|
|
#include <sys/types.h> // stat
|
|
#include <sys/stat.h> // stat
|
|
|
|
-#include <memory> // std::auto_ptr
|
|
+#include <memory> // std::unique_ptr
|
|
#include <string>
|
|
#include <vector>
|
|
#include <cstring> // std::strcpy, std::strstr
|
|
@@ -39,7 +39,7 @@ using cutl::fs::invalid_path;
|
|
typedef vector<path> paths;
|
|
|
|
int plugin_is_GPL_compatible;
|
|
-auto_ptr<options const> options_;
|
|
+unique_ptr<options const> options_;
|
|
paths profile_paths_;
|
|
path file_; // File being compiled.
|
|
paths inputs_; // List of input files in at-once mode or just file_.
|
|
@@ -222,7 +222,7 @@ gate_callback (void*, void*)
|
|
// Parse the GCC tree to semantic graph.
|
|
//
|
|
parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_);
|
|
- auto_ptr<unit> u (p.parse (global_namespace, file_));
|
|
+ unique_ptr<unit> u (p.parse (global_namespace, file_));
|
|
|
|
features f;
|
|
|
|
@@ -377,14 +377,14 @@ plugin_init (plugin_name_args* plugin_info, plugin_gcc_version*)
|
|
oi[2].arg = &pd;
|
|
|
|
cli::argv_file_scanner scan (argc, &argv[0], oi, 3);
|
|
- auto_ptr<options> ops (
|
|
+ unique_ptr<options> ops (
|
|
new options (scan, cli::unknown_mode::fail, cli::unknown_mode::fail));
|
|
|
|
// Process options.
|
|
//
|
|
process_options (*ops);
|
|
|
|
- options_ = ops;
|
|
+ options_ = move (ops);
|
|
pragma_db_ = db;
|
|
pragma_multi_ = options_->multi_database ();
|
|
}
|
|
diff --git a/odb/processor.cxx b/odb/processor.cxx
|
|
index bea3624..c787e0d 100644
|
|
--- a/odb/processor.cxx
|
|
+++ b/odb/processor.cxx
|
|
@@ -120,8 +120,8 @@ namespace
|
|
// both the wrapper type and the wrapped type must be const.
|
|
// To see why, consider these possibilities:
|
|
//
|
|
- // auto_ptr<const T> - can modify by setting a new pointer
|
|
- // const auto_ptr<T> - can modify by changing the pointed-to value
|
|
+ // unique_ptr<const T> - can modify by setting a new pointer
|
|
+ // const unique_ptr<T> - can modify by changing the pointed-to value
|
|
//
|
|
if (const_type (m.type ()) &&
|
|
!(id (m) || version (m) || m.count ("inverse")))
|
|
@@ -3086,7 +3086,7 @@ process (options const& ops,
|
|
{
|
|
try
|
|
{
|
|
- auto_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
|
|
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
|
|
|
|
// Common processing.
|
|
//
|
|
diff --git a/odb/validator.cxx b/odb/validator.cxx
|
|
index aac52e4..196386c 100644
|
|
--- a/odb/validator.cxx
|
|
+++ b/odb/validator.cxx
|
|
@@ -1516,7 +1516,7 @@ validate (options const& ops,
|
|
if (!valid)
|
|
throw validator_failed ();
|
|
|
|
- auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
|
|
+ unique_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
|
|
|
|
if (pass == 1)
|
|
{
|
|
--
|
|
2.25.0
|
|
|