小编Dom*_*nic的帖子

如何将MySQL JOOQ重命名表查询的作用域限定到同一数据库?

我有一个scala应用程序,该应用程序管理多个MySQL数据库架构,其中包括修改(添加,重命名等)表。这些命令是通过连接池发出的,该连接池连接到数据库服务器中的通用管理数据库。

因为该应用程序被设计为跨数据库的,所以我使用JOOQ来呈现SQL查询(执行是通过单独的JDBC模块完成的)。

我遇到了JOOQ alterTable(...).renameTo(...)DSL的问题-考虑以下示例:

我们在数据库“ TestDatabase”中有一个表“ TestTable”。假设我只想将该表重命名为“ Foo”,并将其保留在“ TestDatabase”中。

这段代码:

...
val context = DSL.using(SQLDialect.MYSQL_5_7)
val query = context
              .alterTable(table(name("TestDatabase", "TestDatabase")))
              .renameTo(name("TestDatabase", "Foo"))
...
Run Code Online (Sandbox Code Playgroud)

生成:ALTER TABLE `TestDatabase`.`TestTable` RENAME TO `Foo` 但是,由于我正在使用的连接池已连接到我的管理数据库,因此它只是将表重命名为“ Foo” 并将其移至我的管理数据库。我本来希望SQL是:ALTER TABLE `TestDatabase`.`TestTable` RENAME TO `TestDatabase`.`Foo`。我尝试了多种方法来调用该.renameTo方法,并建议其使用完全限定名称,但无济于事:

  • .renameTo(table(name(...) ->行为相同。
  • .renameTo("`TestDatabase`.`Foo`") ->用反引号转义该名称,将其视为一个名称而不是限定名称。

我想知道是否遗漏了一些东西,这是否是预期的行为,甚至是JOOQ的错误或设计缺陷。

有没有办法使用完全限定的名称来重命名表?

谢谢!

mysql scala jooq

5
推荐指数
1
解决办法
109
查看次数

如何在不释放缓冲区本身的情况下释放Rust在FFI缓冲区之上分配的所有结构?

我有一个Java程序,它通过JNA调用Rust,为Rust端提供一个指针,指向一个可能很大(堆分配)的连续布局的缓冲区,\ 0终止的UTF-8字符串.内存由Java端拥有,并在垃圾收集器完成关联对象时释放.

我的目标是通过将其解释为字符串向量来处理该缓冲区,执行我需要做的事情,并删除Rust在缓冲区顶部分配的所有结构,例如Vec's,Strings等.由于潜在的大小缓冲区,如果可能的话,我想避免复制数据.

请考虑以下代码:

use std::ffi::CString;
use std::os::raw::c_char;

pub extern "C" fn process_data(data: *const c_char, num_elements: i64) {
    let mut vec: Vec<String> = Vec::with_capacity(num_elements as usize);
    let mut offset = 0;

    unsafe {
        for _ in 0..num_elements {
            let ptr = { data.offset(offset as isize) };

            // Main goal here is to have no memory copy involved
            let s = String::from_utf8_unchecked(CString::from_raw(ptr as *mut c_char).into_bytes());

            offset += s.len() + 1; // Include string termination
            vec.push(s);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

ffi rust

3
推荐指数
1
解决办法
192
查看次数

标签 统计

ffi ×1

jooq ×1

mysql ×1

rust ×1

scala ×1