// -*- C++ -*-
//
// This file was generated by ODB, object-relational mapping (ORM)
// compiler for C++.
//

namespace odb
{
  // configuration
  //

  inline
  access::object_traits< ::bpkg::configuration >::id_type
  access::object_traits< ::bpkg::configuration >::
  id (const object_type& o)
  {
    return o.id;
  }

  inline
  void access::object_traits< ::bpkg::configuration >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::configuration >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_fragment
  //

  inline
  access::object_traits< ::bpkg::repository_fragment >::id_type
  access::object_traits< ::bpkg::repository_fragment >::
  id (const object_type& o)
  {
    return o.name;
  }

  inline
  void access::object_traits< ::bpkg::repository_fragment >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::repository_fragment >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_fragment_count
  //

  inline
  void access::view_traits< ::bpkg::repository_fragment_count >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository
  //

  inline
  access::object_traits< ::bpkg::repository >::id_type
  access::object_traits< ::bpkg::repository >::
  id (const object_type& o)
  {
    return o.name;
  }

  inline
  void access::object_traits< ::bpkg::repository >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::repository >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_count
  //

  inline
  void access::view_traits< ::bpkg::repository_count >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // available_package
  //

  inline
  access::object_traits< ::bpkg::available_package >::id_type
  access::object_traits< ::bpkg::available_package >::
  id (const object_type& o)
  {
    return o.id;
  }

  inline
  void access::object_traits< ::bpkg::available_package >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::available_package >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // available_package_count
  //

  inline
  void access::view_traits< ::bpkg::available_package_count >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // available_test
  //

  inline
  void access::view_traits< ::bpkg::available_test >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // available_main
  //

  inline
  void access::view_traits< ::bpkg::available_main >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // selected_package
  //

  inline
  access::object_traits< ::bpkg::selected_package >::id_type
  access::object_traits< ::bpkg::selected_package >::
  id (const object_type& o)
  {
    return o.name;
  }

  inline
  void access::object_traits< ::bpkg::selected_package >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::selected_package >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // certificate
  //

  inline
  access::object_traits< ::bpkg::certificate >::id_type
  access::object_traits< ::bpkg::certificate >::
  id (const object_type& o)
  {
    return o.id;
  }

  inline
  void access::object_traits< ::bpkg::certificate >::
  callback (database& db, object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  inline
  void access::object_traits< ::bpkg::certificate >::
  callback (database& db, const object_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // package_dependent
  //

  inline
  void access::view_traits< ::bpkg::package_dependent >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // fragment_repository_count
  //

  inline
  void access::view_traits< ::bpkg::fragment_repository_count >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // fragment_repository
  //

  inline
  void access::view_traits< ::bpkg::fragment_repository >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_complement_dependent
  //

  inline
  void access::view_traits< ::bpkg::repository_complement_dependent >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_prerequisite_dependent
  //

  inline
  void access::view_traits< ::bpkg::repository_prerequisite_dependent >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // repository_fragment_package
  //

  inline
  void access::view_traits< ::bpkg::repository_fragment_package >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }

  // package_repository_fragment
  //

  inline
  void access::view_traits< ::bpkg::package_repository_fragment >::
  callback (database& db, view_type& x, callback_event e)
  {
    ODB_POTENTIALLY_UNUSED (db);
    ODB_POTENTIALLY_UNUSED (x);
    ODB_POTENTIALLY_UNUSED (e);
  }
}

#include <odb/schema-version.hxx>

namespace odb
{
  // language
  //

  inline
  bool access::composite_value_traits< ::bpkg::language, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.name_null;
    r = r && i.impl_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::language, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.name_null = true;
    i.impl_null = true;
  }

  // version_constraint
  //

  inline
  bool access::composite_value_traits< ::bpkg::version_constraint, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && composite_value_traits< ::bpkg::_version, id_sqlite >::get_null (i.min_version_value);
    r = r && composite_value_traits< ::bpkg::_version, id_sqlite >::get_null (i.max_version_value);
    r = r && i.min_open_null;
    r = r && i.max_open_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::version_constraint, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    composite_value_traits< ::bpkg::_version, id_sqlite >::set_null (i.min_version_value, sk);
    composite_value_traits< ::bpkg::_version, id_sqlite >::set_null (i.max_version_value, sk);
    i.min_open_null = true;
    i.max_open_null = true;
  }

  // dependency
  //

  inline
  bool access::composite_value_traits< ::bpkg::dependency, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.name_null;
    r = r && composite_value_traits< ::bpkg::version_constraint, id_sqlite >::get_null (i.constraint_value);
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::dependency, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.name_null = true;
    composite_value_traits< ::bpkg::version_constraint, id_sqlite >::set_null (i.constraint_value, sk);
  }

  // dependency_alternative
  //

  inline
  bool access::composite_value_traits< ::bpkg::dependency_alternative, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.enable_null;
    r = r && i.reflect_null;
    r = r && i.prefer_null;
    r = r && i.accept_null;
    r = r && i.require_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::dependency_alternative, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.enable_null = true;
    i.reflect_null = true;
    i.prefer_null = true;
    i.accept_null = true;
    i.require_null = true;
  }

  // dependency_alternatives
  //

  inline
  bool access::composite_value_traits< ::bpkg::dependency_alternatives, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.buildtime_null;
    r = r && i.comment_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::dependency_alternatives, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.buildtime_null = true;
    i.comment_null = true;
  }

  // test_dependency
  //

  inline
  bool access::composite_value_traits< ::bpkg::test_dependency, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && composite_value_traits< ::bpkg::dependency, id_sqlite >::get_null (i);
    r = r && i.type_null;
    r = r && i.buildtime_null;
    r = r && i.enable_null;
    r = r && i.reflect_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::test_dependency, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    composite_value_traits< ::bpkg::dependency, id_sqlite >::set_null (i, sk);
    i.type_null = true;
    i.buildtime_null = true;
    i.enable_null = true;
    i.reflect_null = true;
  }

  // buildfile
  //

  inline
  bool access::composite_value_traits< ::bpkg::buildfile, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.path_null;
    r = r && i.content_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::buildfile, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.path_null = true;
    i.content_null = true;
  }

  // distribution_name_value
  //

  inline
  bool access::composite_value_traits< ::bpkg::distribution_name_value, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.name_null;
    r = r && i.value_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::distribution_name_value, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.name_null = true;
    i.value_null = true;
  }

  // configuration
  //

  inline
  void access::object_traits_impl< ::bpkg::configuration, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  inline
  void access::object_traits_impl< ::bpkg::configuration, id_sqlite >::
  load_ (statements_type& sts,
         object_type& obj,
         bool)
  {
    ODB_POTENTIALLY_UNUSED (sts);
    ODB_POTENTIALLY_UNUSED (obj);
  }

  // _repository_location
  //

  inline
  bool access::composite_value_traits< ::bpkg::_repository_location, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.url_null;
    r = r && i.type_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::_repository_location, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.url_null = true;
    i.type_null = true;
  }

  // repository_fragment
  //

  inline
  void access::object_traits_impl< ::bpkg::repository_fragment, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  // repository_fragment_count
  //

  // fragment_type
  //

  inline
  bool access::composite_value_traits< ::bpkg::repository::fragment_type, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.friendly_name_null;
    r = r && i.fragment_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::repository::fragment_type, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.friendly_name_null = true;
    i.fragment_null = true;
  }

  // repository
  //

  inline
  void access::object_traits_impl< ::bpkg::repository, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  // repository_count
  //

  // package_location
  //

  inline
  bool access::composite_value_traits< ::bpkg::package_location, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.repository_fragment_null;
    r = r && i.location_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::package_location, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.repository_fragment_null = true;
    i.location_null = true;
  }

  // dependency_alternatives_ex
  //

  inline
  bool access::composite_value_traits< ::bpkg::dependency_alternatives_ex, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && composite_value_traits< ::bpkg::dependency_alternatives, id_sqlite >::get_null (i);
    r = r && i.type_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::dependency_alternatives_ex, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    composite_value_traits< ::bpkg::dependency_alternatives, id_sqlite >::set_null (i, sk);
    i.type_null = true;
  }

  // _dependency_alternative_key
  //

  inline
  bool access::composite_value_traits< ::bpkg::available_package::_dependency_alternative_key, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.outer_null;
    r = r && i.inner_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::available_package::_dependency_alternative_key, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.outer_null = true;
    i.inner_null = true;
  }

  // _dependency_key
  //

  inline
  bool access::composite_value_traits< ::bpkg::available_package::_dependency_key, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.outer_null;
    r = r && i.middle_null;
    r = r && i.inner_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::available_package::_dependency_key, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.outer_null = true;
    i.middle_null = true;
    i.inner_null = true;
  }

  // available_package
  //

  inline
  void access::object_traits_impl< ::bpkg::available_package, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  // available_package_count
  //

  // available_test
  //

  // available_main
  //

  // prerequisite_info
  //

  inline
  bool access::composite_value_traits< ::bpkg::prerequisite_info, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.type_null;
    r = r && composite_value_traits< ::bpkg::version_constraint, id_sqlite >::get_null (i.version_constraint_value);
    r = r && i.buildtime_null;
    r = r && i.runtime_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::prerequisite_info, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.type_null = true;
    composite_value_traits< ::bpkg::version_constraint, id_sqlite >::set_null (i.version_constraint_value, sk);
    i.buildtime_null = true;
    i.runtime_null = true;
  }

  // _selected_package_ref
  //

  inline
  bool access::composite_value_traits< ::bpkg::_selected_package_ref, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.configuration_null;
    r = r && i.prerequisite_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::_selected_package_ref, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.configuration_null = true;
    i.prerequisite_null = true;
  }

  // config_variable
  //

  inline
  bool access::composite_value_traits< ::bpkg::config_variable, id_sqlite >::
  get_null (const image_type& i)
  {
    bool r (true);
    r = r && i.name_null;
    r = r && i.source_null;
    return r;
  }

  inline
  void access::composite_value_traits< ::bpkg::config_variable, id_sqlite >::
  set_null (image_type& i,
            sqlite::statement_kind sk)
  {
    ODB_POTENTIALLY_UNUSED (sk);

    using namespace sqlite;

    i.name_null = true;
    i.source_null = true;
  }

  // selected_package
  //

  inline
  void access::object_traits_impl< ::bpkg::selected_package, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  // certificate
  //

  inline
  void access::object_traits_impl< ::bpkg::certificate, id_sqlite >::
  erase (database& db, const object_type& obj)
  {
    callback (db, obj, callback_event::pre_erase);
    erase (db, id (obj));
    callback (db, obj, callback_event::post_erase);
  }

  inline
  void access::object_traits_impl< ::bpkg::certificate, id_sqlite >::
  load_ (statements_type& sts,
         object_type& obj,
         bool)
  {
    ODB_POTENTIALLY_UNUSED (sts);
    ODB_POTENTIALLY_UNUSED (obj);
  }

  // package_dependent
  //

  // fragment_repository_count
  //

  // fragment_repository
  //

  // repository_complement_dependent
  //

  // repository_prerequisite_dependent
  //

  // repository_fragment_package
  //

  // package_repository_fragment
  //
}

