Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/storage/rocksdb/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 3 kB image not shown  

Quelle  rdb_cf_manager.h   Sprache: C

 

/*
   Copyright (c) 2014, SkySQL Ab

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */


#pragma once

/* C++ system header files */
#include <map>
#include <string>
#include <vector>

/* MySQL header files */
#include "./sql_class.h"

/* RocksDB header files */
#include "rocksdb/db.h"

/* MyRocks header files */
#include "./rdb_cf_options.h"

namespace myrocks {

/*
  We need a Column Family (CF) manager. Its functions:
  - create column families (synchronized, don't create the same twice)
  - keep count in each column family.
     = the count is kept on-disk.
     = there are no empty CFs. initially count=1.
     = then, when doing DDL, we increase or decrease it.
       (atomicity is maintained by being in the same WriteBatch with DDLs)
     = if DROP discovers that now count=0, it removes the CF.

  Current state is:
  - CFs are created in a synchronized way. We can't remove them, yet.
*/


class Rdb_cf_manager {
  std::map<std::string, rocksdb::ColumnFamilyHandle *> m_cf_name_map;
  std::map<uint32_t, rocksdb::ColumnFamilyHandle *> m_cf_id_map;

  mutable mysql_mutex_t m_mutex;

  std::unique_ptr<Rdb_cf_options> m_cf_options = nullptr;

 public:
  Rdb_cf_manager(const Rdb_cf_manager &) = delete;
  Rdb_cf_manager &operator=(const Rdb_cf_manager &) = delete;
  Rdb_cf_manager() = default;

  static bool is_cf_name_reverse(const char *const name);

  /*
    This is called right after the DB::Open() call. The parameters describe
    column
    families that are present in the database. The first CF is the default CF.
  */

  void init(std::unique_ptr<Rdb_cf_options> &&cf_options,
            std::vector<rocksdb::ColumnFamilyHandle *> *const handles);
  void cleanup();

  /*
    Used by CREATE TABLE.
    - cf_name=nullptr means use default column family
  */

  rocksdb::ColumnFamilyHandle *get_or_create_cf(rocksdb::DB *const rdb,
                                                const std::string &cf_name);

  /* Used by table open */
  rocksdb::ColumnFamilyHandle *get_cf(
      const std::string &cf_name, const bool lock_held_by_caller = false) const;

  /* Look up cf by id; used by datadic */
  rocksdb::ColumnFamilyHandle *get_cf(const uint32_t id) const;

  /* Used to iterate over column families for show status */
  std::vector<std::string> get_cf_names(void) const;

  /* Used to iterate over column families */
  std::vector<rocksdb::ColumnFamilyHandle *> get_all_cf(void) const;

  /* Used to delete cf by name */
  int drop_cf(const std::string &cf_name);

  void get_cf_options(const std::string &cf_name,
                      rocksdb::ColumnFamilyOptions *const opts)
      MY_ATTRIBUTE((__nonnull__)) {
    m_cf_options->get_cf_options(cf_name, opts);
  }

  void update_options_map(const std::string &cf_name,
                          const std::string &updated_options) {
    m_cf_options->update(cf_name, updated_options);
  }
};

}  // namespace myrocks

Messung V0.5 in Prozent
C=88 H=100 G=94

¤ Dauer der Verarbeitung: 0.8 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.