inpsyde/wp-db-tools

该软件包已被弃用,不再维护。未建议替代软件包。

提供对MySQL数据库的独立于引擎的简化接口。

0.2.1 2017-05-03 16:22 UTC

This package is auto-updated.

Last update: 2021-06-23 21:26:32 UTC


README

用于管理MySQL表的API(创建、删除、复制)。提供对wpdb的适配器(并计划也支持PDO)。

进行中!您应仅使用离散版本(0.1.0、…)并遵循CHANGELOG.md。预发布版本(0.2.0、0.3.0、…)中可能存在破坏性更改。在您的composer版本约束中使用波浪号操作符:~0.1.0以仅获取“错误修复”级别的发布。

安装

composer require inpsyde/wp-db-tools:~0.1.0

使用示例

YAML表架构

创建一个名为 my_table.yml 的文件,并指定表架构如下

table:
  name: my_table
  # Prefix is optional but if specified only the two values
  # 'network' and 'site' are allowed
  prefix: network
  schema:
    id:
      name: id
      description: BIGINT NOT NULL
    title:
      name: title
      description: VARCHAR(255)
  primary_key:
    - id
  indices:
    my_index:
      name: my_index
      description: UNIQUE my_index (title)

这将产生以下SQL语句

CREATE TABLE `wp_my_table` (
    `id` BIGINT NOT NULL,
    `title` VARCHAR(255),
    PRIMARY KEY (`id_column`),
    UNIQUE my_index (title)
)

API将使用带重音符号的引号(反引号 ` U+0060)引用标识符,以区分它们。这将适用于大多数用例。但是,如果您想在标识符(索引名称和定义)中使用需要引号的字符,可以使用引用内部键的占位符

table:
  name: merkel_table-<>-
  schema:
    id:
      name: "id (hopefully_unique*lol*)"
      description: BIGINT NOT NULL
    title:
      name: "title (super_important_for_SEO!!!)"
      description: VARCHAR(255)
  primary_key:
    - id
  indices:
    my_index:
      name: "my_index (note to dev-ops: this will scale much better)"
      description: "UNIQUE %% (%title%)"

这将产生以下SQL语句

CREATE TABLE `merkel_table-<>-` (
    `id (hopefully_unique*lol*)` BIGINT NOT NULL,
    `title (super_important_for_SEO!!!)` VARCHAR(255),
    PRIMARY KEY (`id (hopefully_unique*lol*)`),
    UNIQUE `my_index_(note to dev-ops: this will scale much better)` (`title (super_important_for_SEO!!!)`)
)

主键必须始终引用架构中每个列的关联键(在示例中为id而不是实际名称)。

在索引描述中,允许使用以下占位符

  • %% 将被替换为引号的索引名称
  • %<column_key>% 将被替换为架构中引用的列的引号名称

创建表API

use WpDbTools\Action\MySqlTableCreator;
use WpDbTools\Db\WpDbAdapter;
use WpDbTools\Factory\TableSchemaFactory;

$table_creator = new MySqlTableCreator( WpDbAdapter::from_globals() );
$schema_factory = TableSchemaFactory::from_globals();
$table_schema = $schema_factory->create_from_yaml_file( 'config/my_table.yml' );

$table_creator->create_table( $table_schema );

临时/如果不存在标志

如果要将SQL语句包含TEMPORARYIF NOT EXISTS选项,可以将它们以位运算传递给MySqlTableCreator构造函数

use WpDbTools\Action\MySqlTableCreator;
use WpDbTools\Db\WpDbAdapter;

$table_creator = new MySqlTableCreator(
    WpDbAdapter::from_globals(),
    MySqlTableCreator::TEMPORARY | MySqlTableCreator::IF_NOT_EXISTS
);

这将产生以下SQL语句

CREATE TEMPORARY TABLE IF NOT EXISTS `my_table`

复制一个表

use WpDbTools\Action\MySqlTableCopier;
use WpDbTools\Action\MySqlTableLookup;
use WpDbTools\Db\WpDbAdapter;

$adapter = new WpDbAdapter( $GLOBALS[ 'wpdb' ] );
$copier = new MySqlTableCopier( $adapter );
$lookup = new MySqlTableLookup( $adapter );

// copy table structure
if ( ! $lookup->table_exists( 'wp_options_copy' ) )
	$copier->copy_structure( 'wp_options', 'wp_options_copy' );

// copy table and content
if ( ! $lookup->table_exists( 'wp_posts_copy' ) )
	$copier->copy( 'wp_posts', 'wp_posts_copy' );

路线图

  • 指定位掩码架构以统一用于使用的数据库适配器的选项,如ARRAY_A
  • 用于识别和处理架构更新的API(架构-delta)
  • 将WP风格准备语句语法翻译为PDO准备语句语法,反之亦然

运行测试

通过phive在本地安装phpunit

$ phive install

或者安装phpunit版本^5.7(目前仅支持单元测试,不支持WordPress系统测试的^6.0)。

运行单元测试

$ tests/bin/phpunit

准备WordPress系统测试:将phpunit-system.xml.dist复制到phpunit-system.xml,并插入您的数据库凭据。然后运行

$ tests/bin/phpunit -c phpunit-system.xml

由Inpsyde制作

Inpsyde团队自2006年起就开始从事网站开发。

许可证

版权所有 (c) 2017 Inpsyde GmbH

好消息,此插件对每个人都是免费的!因为它是在MIT许可证下发布的,您可以在个人网站或商业网站上免费使用它。

贡献

欢迎所有反馈/错误报告/拉取请求。