
数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载Dolt 是一款“Git for Data”数据库同时提供与 MySQL 兼容的 SQL 服务因此理论上任何支持 MySQL 协议的 ORM 都能直接接入。本文以仓库中的 TypeORM 冒烟测试项目为核心完整讲解如何用 TypeORM 连接并操作 Dolt SQL Server——包括项目初始化方式、数据源配置、实体定义、写入/读取验证流程以及它在整个 ORM 兼容性测试体系中的运行位置。读完本文你将掌握将 TypeORM 应用接入 Dolt、通过环境变量覆盖连接参数、并复用冒烟测试验证兼容性的完整方法。一、项目背景Dolt 的 ORM 兼容性测试体系Dolt 通过dolt sql-server提供 MySQL 兼容协议的服务端能力因此生态中大量基于 MySQL 的 ORM 都有望直接使用。为验证这一兼容性仓库在 integration-tests/orm-tests 目录下维护了一套针对多种 ORM 的测试理想情况下复用 ORM 官方自带的 MySQL 测试套件在暂时无法完整跑通官方套件时先用一个**小型冒烟测试smoke test**快速获得初始覆盖。TypeORM 冒烟测试正是这套体系中的一员。在 orm-tests.bats 中可以找到它的驱动测试用例# TypeORM is an ORM for Node/TypeScript applications. This is a simple smoke test to make sure # Dolt can support the most basic TypeORM operations. test TypeORM smoke test { cd $BATS_TEST_DIRNAME/typeorm npm install npm start }该用例会进入typeorm目录执行npm install与npm start直接复用本项目验证“TypeORM 最基本的读写操作能否在 Dolt 上正常工作”。二、项目结构与初始化方式TypeORM 冒烟测试项目位于 integration-tests/orm-tests/typeorm其目录结构如下typeorm/ ├── README.md # 项目说明本文主题文档 ├── package.json # 依赖与 npm scripts ├── tsconfig.json # TypeScript 编译配置 └── src/ ├──>typeorm init --name typeorm-smoketest --database mysql即通过 TypeORM CLI 以mysql数据库类型为模板生成的骨架再针对 Dolt 场景做了最小化定制。2.1 依赖与脚本package.jsonpackage.json 中声明的关键依赖依赖版本作用typeorm^0.3.10ORM 核心库reflect-metadata^0.1.13装饰器元数据反射支持TypeORM 运行必需mysql^2.14.1Node.js 的 MySQL 驱动负责底层协议通信ts-nodedev^10.7.0直接运行 TypeScript 源码typescriptdev^4.5.2类型检查与编译types/nodedev^16.11.10Node.js 类型定义两个 npm scripts 是运行入口scripts: { start: ts-node src/index.ts, typeorm: typeorm-ts-node-commonjs }npm start直接用ts-node执行src/index.ts无需先编译npm run typeorm暴露 TypeORM CLIcommonjs 变体便于后续执行迁移等管理命令。2.2 TypeScript 编译配置tsconfig.jsontsconfig.json 中有两个对 TypeORM 至关重要的选项emitDecoratorMetadata: true, experimentalDecorators: trueTypeORM 实体依赖Entity、Column等装饰器experimentalDecorators启用装饰器语法emitDecoratorMetadata让编译器输出设计时类型元数据——没有这两项TypeORM 将无法自动推断实体列类型。三、连接配置如何指向 Dolt SQL Server数据库设置全部集中在 src/data-source.ts默认配置针对的是协议/驱动类型mysql主机localhost端口3306Dolt 默认端口用户root密码空数据库dolt这与 README 的描述一致连接“hit a Dolt sql-server on the default port, for the dolt root, with no password, for the database named dolt”。3.1 环境变量优先的连接参数源码用process.env让所有连接参数均可被环境变量覆盖且带合理默认值const host process.env.DB_HOST ?? localhost const portValue process.env.DB_PORT ?? const parsedPort Number.parseInt(portValue, 10) const port Number.isNaN(parsedPort) ? 3306 : parsedPort const username process.env.DB_USER ?? root const password process.env.DB_PASSWORD ?? const database process.env.DB_NAME ?? dolt环境变量默认值说明DB_HOSTlocalhostDolt SQL Server 所在主机DB_PORT3306端口解析失败NaN时回退到 3306DB_USERrootDolt 登录用户DB_PASSWORD空Dolt 登录密码DB_NAMEdolt目标数据库名这个设计让同一份代码既能本地直连默认配置也能被测试框架注入随机端口与仓库名。在 orm-tests.bats 中测试正是这样覆盖这些变量的PORT$(definePORT) start_sql_server_with_args_no_port --host 0.0.0.0 --port$PORT --logleveldebug export DB_HOST127.0.0.1 export DB_PORT$PORT export DB_USERroot export DB_PASSWORD export DB_NAME$REPO_NAME即先由 bats 辅助函数在随机端口启动dolt sql-server可参考 query-server-common.bash 中的start_sql_server_with_args_no_port实现再以环境变量把 TypeORM 指向该实例。3.2 DataSource 装配export const AppDataSource new DataSource({ type: mysql, host: host, port: port, username: username, password: password, database: database, synchronize: true, logging: false, entities: [User], migrations: [], subscribers: [], })关键选项解读synchronize: true启动时自动根据实体定义建表/同步表结构。冒烟测试借此免去手动建表步骤——首次连接 Dolt 时TypeORM 会自动执行CREATE TABLE。生产环境一般应关闭并改用迁移logging: false关闭 SQL 日志保持输出简洁entities: [User]显式注册User实体migrations/subscribers冒烟测试不需要保持空数组。四、实体定义Usersrc/entity/User.ts 定义了一个标准的自增主键实体import { Entity, PrimaryGeneratedColumn, Column } from typeorm Entity() export class User { PrimaryGeneratedColumn() id: number Column() firstName: string Column() lastName: string Column() age: number }Entity()将该类映射为数据库表userPrimaryGeneratedColumn()生成自增主键idDolt 的 MySQL 兼容层支持AUTO_INCREMENT这正是 auto_increment.bats 等测试覆盖的能力范围三个Column()分别映射firstName、lastName、age列。五、冒烟流程插入 → 加载 → 验证主入口 src/index.ts 完整实现了 README 描述的行为插入一条新记录、加载回来、打印成功并以退出码 0 结束任何异常则打印错误并以非零退出码结束。import { AppDataSource } from ./data-source import { User } from ./entity/User AppDataSource.initialize().then(async () { console.log(Inserting a new user into the database...) const user new User() user.firstName Timber user.lastName Saw user.age 25 await AppDataSource.manager.save(user) console.log(Saved a new user with id: user.id) console.log(Loading users from the database...) const users await AppDataSource.manager.find(User) console.log(Loaded users: , users) console.log(Smoke test passed!) process.exit(0) }).catch(error { console.log(error) console.log(Smoke test failed!) process.exit(1) })执行链路分四步AppDataSource.initialize()建立与 Dolt SQL Server 的连接池并因synchronize: true自动同步表结构写入构造User实例firstNameTimber、lastNameSaw、age25manager.save(user)执行 INSERT随后打印自增生成的user.id读取manager.find(User)查询全表并打印结果验证写入的数据能被读回判定成功后打印Smoke test passed!并process.exit(0).catch中打印错误与Smoke test failed!并process.exit(1)。退出码是测试集成的重要约定bats 断言依赖进程退出码 0/非 0 来判断通过/失败。六、运行方式6.1 前提启动 Dolt SQL Server在仓库根目录含dolt/的工作区先初始化并启动服务dolt init dolt sql-server --host 0.0.0.0 --port 3306若想启用指定数据库可先创建dolt sql -q create database dolt启动后即为 TypeORM 提供一个位于默认端口 3306、用户root、无密码、数据库名为dolt的 MySQL 兼容服务端点。6.2 安装依赖并运行冒烟测试cd integration-tests/orm-tests/typeorm npm install npm startnpm install安装typeorm、reflect-metadata、mysql驱动及开发期工具npm start执行ts-node src/index.ts输出依次为Inserting a new user into the database... Saved a new user with id: 1 Loading users from the database... Loaded users: [ User { id: 1, firstName: Timber, lastName: Saw, age: 25 } ] Smoke test passed!6.3 非默认端口/远端部署场景如果 Dolt SQL Server 不在默认端口或本机直接用环境变量覆盖DB_HOST127.0.0.1 DB_PORT3307 DB_NAMEmyrepo npm start该机制与 bats 测试的做法完全一致也便于在 CI 中复用同一套项目代码。七、在 Docker 中运行整个 ORM 测试套件TypeORM 冒烟测试也可作为 ORM 测试镜像 的一部分整体运行。从仓库根目录执行docker build -t orm-tests -f dolt/integration-tests/orm-tests/Dockerfile . docker run orm-tests:latest该 Dockerfile 采用多阶段构建参考 integration-tests/orm-tests/README.mdgolang_cgo→dolt_build阶段在 Alpine 上编译dolt二进制go build -tags icu_static -o /build/bin/dolt ./cmd/dolt且独立成层ORM 代码变更时可复用缓存、加速首次镜像构建runtime阶段基于 Ubuntu 22.04安装 Node.js 22、Python、JDK 17、Maven、bats 以及 mysql 客户端等把dolt二进制与integration-tests/orm-tests一并拷入镜像入口脚本 orm-tests-entrypoint.sh 先写入全局 dolt 配置关闭 metrics、设置测试用户再执行bats /orm-tests/orm-tests.bats --print-output-on-failure其中就包含上述 TypeORM 冒烟测试。若需把本地修改过的go-mysql-server等依赖编进镜像可按 orm-tests/Dockerfile 中的注释在dolt_build阶段加入对应COPY并同步在本地dolt/go/go.mod添加replace指令。八、小结这套冒烟测试验证了什么从实现角度看TypeORM 冒烟测试实际验证了 Dolt SQL Server 在以下维度的 MySQL 兼容性协议接入mysqlNode 驱动能否成功握手并执行查询data-source.tsDDL 同步synchronize: true下 TypeORM 自动生成并执行建表语句映射到 User.ts 实体基础 CRUDsaveINSERT 自增主键与findSELECT能否正确读写数据index.ts进程退出码契约成功/失败分别以 0/非 0 退出供 orm-tests.bats 无缝集成。因此本文给出的配置模板type: mysql 环境变量覆盖 synchronize可以直接迁移到你自己的 TypeORM Dolt 项目中——只需把User实体替换为业务实体并按需关闭synchronize、改用 TypeORM migration 管理表结构即可。赞分享数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载相关推荐Dolt 与 Mikro-ORM 兼容性实战基于冒烟测试项目验证 TypeScript ORM 接入 DoltDolt 与 Mikro ORM 兼容性实战基于冒烟测试项目验证 TypeScript ORM 接入 Dolt 导读 Dolt 是一个支持 MySQL 协议的数据库关系型数据库后端CLIDolt 与 Hibernate ORM 兼容性验证基于 Maven 的 Hibernate 冒烟测试ORM Smoke Test实战指南Dolt 与 Hibernate ORM 兼容性验证基于 Maven 的 Hibernate 冒烟测试ORM Smoke Test实战指南 本文以 Dol数据库关系型数据库后端CLIDolt 的 ORM 兼容性测试体系使用 Docker 多阶段构建运行 MySQL ORM 客户端测试Dolt 的 ORM 兼容性测试体系使用 Docker 多阶段构建运行 MySQL ORM 客户端测试 Dolt 是一个 Git for Data 的版本化数据库关系型数据库后端CLI上一篇iOS设备激活锁绕过实战指南Applera1n工具深度应用解析下一篇YouTube.js 解析器节点深度解析AccountSectionList 账户分段列表类创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考