文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== Diesel ====== 本家: [[https://diesel.rs/|Diesel is a Safe, Extensible ORM and Query Builder for Rust]]\\ ソースコード: [[git>diesel-rs/diesel|diesel-rs/diesel: A safe, extensible ORM and Query Builder for Rust]]\\ マイグレーションガイド: [[https://diesel.rs/guides/migration_guide.html|Diesel 2.0 migration guide]]\\ ===== インストール ===== 公式: [[https://diesel.rs/guides/getting-started|Getting Started with Diesel]]\\ <WRAP round tip 90%> デフォルトのすべて対応している DB バックエンドをビルドするのではなく、PostgreSQL のみをビルドする場合は以下のコマンドを実行する🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> install diesel_cli <font color="#A347BA">--no-default-features</font> <font color="#A347BA">--features</font> postgres </pre></html></WRAP> </WRAP> </WRAP> ビルド依存パッケージのインストール...🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269"><u style="text-decoration-style:solid">sudo</u></font> <font color="#26A269">dnf</font> install <font color="#A347BA">-y</font> libpq-devel mariadb-devel sqlite-devel </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <pre>メタデータの期限切れの最終確認: 1:55:06 前の 2024年05月20日 14時41分08秒 に実施しました。 依存関係が解決しました。 ============================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================== インストール: <font color="#26A269"><b>libpq-devel </b></font> x86_64 16.1-4.fc40 fedora 111 k <font color="#26A269"><b>mariadb-devel </b></font> x86_64 3:10.11.6-3.fc40 fedora 1.1 M <font color="#26A269"><b>sqlite-devel </b></font> x86_64 3.45.1-2.fc40 fedora 149 k トランザクションの概要 ============================================================================================================== ダウンロードサイズの合計: 1.4 M インストール後のサイズ: 6.7 M パッケージのダウンロード: (1/3): libpq-devel-16.1-4.fc40.x86_64.rpm 233 kB/s | 111 kB 00:00 (2/3): sqlite-devel-3.45.1-2.fc40.x86_64.rpm 287 kB/s | 149 kB 00:00 (3/3): mariadb-devel-10.11.6-3.fc40.x86_64.rpm 1.1 MB/s | 1.1 MB 00:01 -------------------------------------------------------------------------------------------------------------- 合計 706 kB/s | 1.4 MB 00:01 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : sqlite-devel-3.45.1-2.fc40.x86_64 1/6 インストール中 : mariadb-devel-3:10.11.6-3.fc40.x86_64 2/6 インストール中 : libpq-devel-16.1-4.fc40.x86_64 3/6 整理 : sqlite-devel-3.45.1-2.fc40.x86_64 4/6 整理 : mariadb-devel-3:10.11.6-3.fc40.x86_64 5/6 整理 : libpq-devel-16.1-4.fc40.x86_64 6/6 scriptletの実行中: libpq-devel-16.1-4.fc40.x86_64 6/6 インストール済み: libpq-devel-16.1-4.fc40.x86_64 mariadb-devel-3:10.11.6-3.fc40.x86_64 sqlite-devel-3.45.1-2.fc40.x86_64 完了しました! </pre></html></WRAP> </WRAP> Diesel のインストール...🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> install diesel_cli </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#26A269"><b> Updating</b></font> crates.io index <font color="#26A269"><b> Installing</b></font> diesel_cli v2.1.1 <font color="#26A269"><b> Updating</b></font> crates.io index <font color="#26A269"><b> Compiling</b></font> proc-macro2 v1.0.83 <font color="#26A269"><b> Compiling</b></font> unicode-ident v1.0.12 <font color="#26A269"><b> Compiling</b></font> serde v1.0.202 <font color="#26A269"><b> Compiling</b></font> pkg-config v0.3.30 <font color="#26A269"><b> Compiling</b></font> tinyvec_macros v0.1.1 <font color="#26A269"><b> Compiling</b></font> hashbrown v0.14.5 <font color="#26A269"><b> Compiling</b></font> equivalent v1.0.1 <font color="#26A269"><b> Compiling</b></font> tinyvec v1.6.0 <font color="#26A269"><b> Compiling</b></font> quote v1.0.36 <font color="#26A269"><b> Compiling</b></font> indexmap v2.2.6 <font color="#26A269"><b> Compiling</b></font> syn v2.0.65 <font color="#26A269"><b> Compiling</b></font> vcpkg v0.2.15 <font color="#26A269"><b> Compiling</b></font> utf8parse v0.2.1 <font color="#26A269"><b> Compiling</b></font> winnow v0.5.40 <font color="#26A269"><b> Compiling</b></font> libsqlite3-sys v0.28.0 <font color="#26A269"><b> Compiling</b></font> anstyle-parse v0.2.4 <font color="#26A269"><b> Compiling</b></font> unicode-normalization v0.1.23 <font color="#26A269"><b> Compiling</b></font> mysqlclient-sys v0.2.5 <font color="#26A269"><b> Compiling</b></font> unicode-bidi v0.3.15 <font color="#26A269"><b> Compiling</b></font> anstyle v1.0.7 <font color="#26A269"><b> Compiling</b></font> colorchoice v1.0.1 <font color="#26A269"><b> Compiling</b></font> autocfg v1.3.0 <font color="#26A269"><b> Compiling</b></font> pq-sys v0.4.8 <font color="#26A269"><b> Compiling</b></font> percent-encoding v2.3.1 <font color="#26A269"><b> Compiling</b></font> memchr v2.7.2 <font color="#26A269"><b> Compiling</b></font> anstyle-query v1.0.3 <font color="#26A269"><b> Compiling</b></font> is_terminal_polyfill v1.70.0 <font color="#26A269"><b> Compiling</b></font> anstream v0.6.14 <font color="#26A269"><b> Compiling</b></font> aho-corasick v1.1.3 <font color="#26A269"><b> Compiling</b></font> diesel_table_macro_syntax v0.1.0 <font color="#26A269"><b> Compiling</b></font> form_urlencoded v1.2.1 <font color="#26A269"><b> Compiling</b></font> num-traits v0.2.19 <font color="#26A269"><b> Compiling</b></font> idna v0.5.0 <font color="#26A269"><b> Compiling</b></font> serde_derive v1.0.202 <font color="#26A269"><b> Compiling</b></font> regex-syntax v0.8.3 <font color="#26A269"><b> Compiling</b></font> clap_lex v0.7.0 <font color="#26A269"><b> Compiling</b></font> strsim v0.11.1 <font color="#26A269"><b> Compiling</b></font> regex-automata v0.4.6 <font color="#26A269"><b> Compiling</b></font> serde_spanned v0.6.6 <font color="#26A269"><b> Compiling</b></font> toml_datetime v0.6.6 <font color="#26A269"><b> Compiling</b></font> toml_edit v0.19.15 <font color="#26A269"><b> Compiling</b></font> toml v0.7.8 <font color="#26A269"><b> Compiling</b></font> clap_builder v4.5.2 <font color="#26A269"><b> Compiling</b></font> migrations_internals v2.1.0 <font color="#26A269"><b> Compiling</b></font> diesel_derives v2.1.4 <font color="#26A269"><b> Compiling</b></font> url v2.5.0 <font color="#26A269"><b> Compiling</b></font> overload v0.1.1 <font color="#26A269"><b> Compiling</b></font> bitflags v2.5.0 <font color="#26A269"><b> Compiling</b></font> itoa v1.0.11 <font color="#26A269"><b> Compiling</b></font> byteorder v1.5.0 <font color="#26A269"><b> Compiling</b></font> diesel v2.1.6 <font color="#26A269"><b> Compiling</b></font> nu-ansi-term v0.46.0 <font color="#26A269"><b> Compiling</b></font> clap v4.5.4 <font color="#26A269"><b> Compiling</b></font> migrations_macros v2.1.0 <font color="#26A269"><b> Compiling</b></font> regex v1.10.4 <font color="#26A269"><b> Compiling</b></font> iana-time-zone v0.1.60 <font color="#26A269"><b> Compiling</b></font> chrono v0.4.38 <font color="#26A269"><b> Compiling</b></font> serde_regex v1.1.0 <font color="#26A269"><b> Compiling</b></font> clap_complete v4.5.2 <font color="#26A269"><b> Compiling</b></font> diesel_migrations v2.1.0 <font color="#26A269"><b> Compiling</b></font> diffy v0.3.0 <font color="#26A269"><b> Compiling</b></font> heck v0.4.1 <font color="#26A269"><b> Compiling</b></font> dotenvy v0.15.7 <font color="#26A269"><b> Compiling</b></font> diesel_cli v2.1.1 <font color="#26A269"><b> Finished</b></font> `release` profile [optimized] target(s) in 2m 26s <font color="#26A269"><b> Installing</b></font> /home/tomoyan/.cargo/bin/diesel <font color="#26A269"><b> Installed</b></font> package `diesel_cli v2.1.1` (executable `diesel`) </pre></html></WRAP> </WRAP> 動作確認😉\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> <font color="#A347BA">-V</font> </pre></html></WRAP> <WRAP color_result><html><pre> diesel 2.1.1 </pre></html></WRAP> </WRAP> ===== データベース ===== **PostgreSQL**\\ [[linux:podman:postgres|PostgreSQL]] (Podman)\\ **MariaDB**\\ [[linux:podman:piwigo|Piwigo - オープンソースの写真管理 Web アプリ]] (Podman) を使用する😅\\ **SQLite**\\ 構築の必要はない\\ ===== ワークスペースの作成 ===== 公式: [[https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html|Cargo Workspaces - The Rust Programming Language]] [[gtr>https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html|翻訳]]\\ [[https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions|Dependency Resolution - The Cargo Book]] [[gtr>https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions|翻訳]]\\ [[https://doc.rust-lang.org/cargo/reference/manifest.html|The Manifest Format - The Cargo Book]] [[gtr>https://doc.rust-lang.org/cargo/reference/manifest.html|翻訳]]\\ [[https://doc.rust-lang.org/cargo/reference/workspaces.html|Workspaces - The Cargo Book]] [[gtr>https://doc.rust-lang.org/cargo/reference/workspaces.html|翻訳]]\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">mkdir</font> piwigo_rs <font color="#12488B"><b>&&</b></font> <font color="#26A269">cd</font> piwigo_rs <font color="#0087FF"><b>$</b></font> <font color="#26A269">nano</font> Cargo.toml </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#F8F8F2">[</font><font color="#A6E22E">workspace</font><font color="#F8F8F2">]</font> <font color="#F92672">members</font><font color="#F8F8F2"> = []</font> <font color="#F92672">resolver</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2"</font> </pre></html></WRAP> </WRAP> ワークスペースにプロジェクトを作成する🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> new <font color="#A347BA">--lib</font> api </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#26A269"><b> Creating</b></font> library `api` package <font color="#26A269"><b> Adding</b></font> `api` as member of workspace at `/home/tomoyan/work/piwigo/piwigo_rs` <font color="#2AA1B3"><b>note</b></font><b>:</b> see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html </pre></html></WRAP> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> new cli </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#26A269"><b> Creating</b></font> binary (application) `cli` package <font color="#26A269"><b> Adding</b></font> `cli` as member of workspace at `/home/tomoyan/work/piwigo/piwigo_rs` <font color="#2AA1B3"><b>note</b></font><b>:</b> see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html </pre></html></WRAP> </WRAP> ワークスペースの Cargo.toml は自動で追加される🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">bat</font> <font color="#A347BA">-p</font> <font color="#A347BA">--pager</font> never <u style="text-decoration-style:solid">Cargo.toml</u> </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#F8F8F2">[</font><font color="#A6E22E">workspace</font><font color="#F8F8F2">]</font> <font color="#F92672">members</font><font color="#F8F8F2"> = [</font><font color="#E6DB74">"api"</font><font color="#F8F8F2">, </font><font color="#E6DB74">"cli"</font><font color="#F8F8F2">]</font> <font color="#F92672">resolver</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2"</font> </pre></html></WRAP> </WRAP> ===== cli の実装 ===== ==== clap - Command Line Argument Parser for Rust ==== clap クレートで引数の処理を書く...🤔\\ 公式: [[https://docs.rs/clap/|clap - Rust]]\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cd</font><font color="#999999"> cli</font> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add clap </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#26A269"><b> Updating</b></font> crates.io index <font color="#26A269"><b> Adding</b></font> clap v4.5.4 to dependencies Features: <font color="#26A269"><b>+</b></font> color <font color="#26A269"><b>+</b></font> error-context <font color="#26A269"><b>+</b></font> help <font color="#26A269"><b>+</b></font> std <font color="#26A269"><b>+</b></font> suggestions <font color="#26A269"><b>+</b></font> usage <font color="#C01C28"><b>-</b></font> cargo <font color="#C01C28"><b>-</b></font> debug <font color="#C01C28"><b>-</b></font> deprecated <font color="#C01C28"><b>-</b></font> derive <font color="#C01C28"><b>-</b></font> env <font color="#C01C28"><b>-</b></font> string <font color="#C01C28"><b>-</b></font> unicode <font color="#C01C28"><b>-</b></font> unstable-doc <font color="#C01C28"><b>-</b></font> unstable-styles <font color="#C01C28"><b>-</b></font> unstable-v5 <font color="#C01C28"><b>-</b></font> wrap_help </pre></html></WRAP> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">bat</font><font color="#999999"> </font><font color="#A347BA">-p</font><font color="#999999"> </font><font color="#A347BA">--pager</font><font color="#999999"> never </font><font color="#999999"><u style="text-decoration-style:solid">Cargo.toml</u></font> </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#F8F8F2">[</font><font color="#A6E22E">package</font><font color="#F8F8F2">]</font> <font color="#F92672">name</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"cli"</font> <font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"0.1.0"</font> <font color="#F92672">edition</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2021"</font> <font color="#F8F8F2">[</font><font color="#A6E22E">dependencies</font><font color="#F8F8F2">]</font> <font color="#F92672">clap</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"4.5.4"</font> </pre></html></WRAP> </WRAP> <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add clap <font color="#A347BA">--features</font> derive </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#26A269"><b> Updating</b></font> crates.io index <font color="#26A269"><b> Adding</b></font> clap v4.5.4 to dependencies Features: <font color="#26A269"><b>+</b></font> color <font color="#26A269"><b>+</b></font> error-context <font color="#26A269"><b>+</b></font> help <font color="#26A269"><b>+</b></font> std <font color="#26A269"><b>+</b></font> suggestions <font color="#26A269"><b>+</b></font> usage <font color="#C01C28"><b>-</b></font> cargo <font color="#C01C28"><b>-</b></font> debug <font color="#C01C28"><b>-</b></font> deprecated <font color="#C01C28"><b>-</b></font> derive <font color="#C01C28"><b>-</b></font> env <font color="#C01C28"><b>-</b></font> string <font color="#C01C28"><b>-</b></font> unicode <font color="#C01C28"><b>-</b></font> unstable-doc <font color="#C01C28"><b>-</b></font> unstable-styles <font color="#C01C28"><b>-</b></font> unstable-v5 <font color="#C01C28"><b>-</b></font> wrap_help </pre></html></WRAP> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">bat</font><font color="#999999"> </font><font color="#A347BA">-p</font><font color="#999999"> </font><font color="#A347BA">--pager</font><font color="#999999"> never </font><font color="#999999"><u style="text-decoration-style:solid">Cargo.toml</u></font> </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#F8F8F2">[</font><font color="#A6E22E">package</font><font color="#F8F8F2">]</font> <font color="#F92672">name</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"cli"</font> <font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"0.1.0"</font> <font color="#F92672">edition</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2021"</font> <font color="#F8F8F2">[</font><font color="#A6E22E">dependencies</font><font color="#F8F8F2">]</font> <font color="#F92672">clap</font><font color="#F8F8F2"> = { </font><font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"4.5.4"</font><font color="#F8F8F2">, </font><font color="#F92672">features</font><font color="#F8F8F2"> = [</font><font color="#E6DB74">"derive"</font><font color="#F8F8F2">] }</font> </pre></html></WRAP> </WRAP> <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">nano</font> <u style="text-decoration-style:solid">src/main.rs</u> </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#F92672">use</font><font color="#F8F8F2"> clap::Parser;</font> <font color="#75715E">/// Simple program to greet a person</font> <font color="#F8F8F2">#[derive(Parser, Debug)]</font> <font color="#F8F8F2">#[command(version, about, long_about </font><font color="#F92672">=</font><font color="#F8F8F2"> None)]</font> <font color="#66D9EF">struct</font><font color="#F8F8F2"> </font><font color="#A6E22E">Args</font><font color="#F8F8F2"> {</font> <font color="#F8F8F2"> </font><font color="#75715E">/// 挨拶する人の名前🤪</font> <font color="#F8F8F2"> #[arg(short, long)]</font> <font color="#F8F8F2"> </font><font color="#FFFFFF">name</font><font color="#F8F8F2">: String,</font> <font color="#F8F8F2"> </font><font color="#75715E">/// 挨拶の回数😍</font> <font color="#F8F8F2"> #[arg(short, long, default_value_t </font><font color="#F92672">=</font><font color="#F8F8F2"> 1)]</font> <font color="#F8F8F2"> </font><font color="#FFFFFF">count</font><font color="#F8F8F2">: </font><font color="#66D9EF">u8</font><font color="#F8F8F2">,</font> <font color="#F8F8F2">}</font> <font color="#66D9EF">fn</font><font color="#F8F8F2"> </font><font color="#A6E22E">main</font><font color="#F8F8F2">() {</font> <font color="#F8F8F2"> </font><font color="#66D9EF">let</font><font color="#F8F8F2"> args </font><font color="#F92672">=</font><font color="#F8F8F2"> Args::parse();</font> <font color="#F8F8F2"> </font><font color="#F92672">for</font><font color="#F8F8F2"> </font><font color="#F92672">_</font><font color="#F8F8F2"> </font><font color="#F92672">in</font><font color="#F8F8F2"> </font><font color="#BE84FF">0</font><font color="#F92672">..</font><font color="#F8F8F2">args.count {</font> <font color="#F8F8F2"> println!(</font><font color="#E6DB74">"Hello </font><font color="#BE84FF">{}</font><font color="#E6DB74"> 💩🤪"</font><font color="#F8F8F2">, args.name)</font> <font color="#F8F8F2"> }</font> <font color="#F8F8F2">}</font> </pre></html></WRAP> </WRAP> <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> run <font color="#A347BA">--</font> <font color="#A347BA">--help</font> </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#26A269"><b> Compiling</b></font> proc-macro2 v1.0.83 <font color="#26A269"><b> Compiling</b></font> unicode-ident v1.0.12 <font color="#26A269"><b> Compiling</b></font> utf8parse v0.2.1 <font color="#26A269"><b> Compiling</b></font> is_terminal_polyfill v1.70.0 <font color="#26A269"><b> Compiling</b></font> anstyle v1.0.7 <font color="#26A269"><b> Compiling</b></font> anstyle-parse v0.2.4 <font color="#26A269"><b> Compiling</b></font> colorchoice v1.0.1 <font color="#26A269"><b> Compiling</b></font> anstyle-query v1.0.3 <font color="#26A269"><b> Compiling</b></font> heck v0.5.0 <font color="#26A269"><b> Compiling</b></font> strsim v0.11.1 <font color="#26A269"><b> Compiling</b></font> anstream v0.6.14 <font color="#26A269"><b> Compiling</b></font> clap_lex v0.7.0 <font color="#26A269"><b> Compiling</b></font> clap_builder v4.5.2 <font color="#26A269"><b> Compiling</b></font> quote v1.0.36 <font color="#26A269"><b> Compiling</b></font> syn v2.0.65 <font color="#26A269"><b> Compiling</b></font> clap_derive v4.5.4 <font color="#26A269"><b> Compiling</b></font> clap v4.5.4 <font color="#26A269"><b> Compiling</b></font> cli v0.1.0 (/home/tomoyan/work/piwigo/piwigo_rs/cli) <font color="#26A269"><b> Finished</b></font> `dev` profile [unoptimized + debuginfo] target(s) in 15.13s <font color="#26A269"><b> Running</b></font> `/home/tomoyan/work/piwigo/piwigo_rs/target/debug/cli --help` Simple program to greet a person <u style="text-decoration-style:solid"><b>Usage:</b></u> <b>cli</b> [OPTIONS] <b>--name</b> <NAME> <u style="text-decoration-style:solid"><b>Options:</b></u> <b>-n</b>, <b>--name</b> <NAME> 挨拶する人の名前🤪 <b>-c</b>, <b>--count</b> <COUNT> 挨拶の回数😍 [default: 1] <b>-h</b>, <b>--help</b> Print help <b>-V</b>, <b>--version</b> Print version </pre></html></WRAP> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> run <font color="#A347BA">--</font> <font color="#A347BA">--name</font> Tomoyan <font color="#A347BA">-c</font> 7 </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#26A269"><b> Finished</b></font> `dev` profile [unoptimized + debuginfo] target(s) in 0.03s <font color="#26A269"><b> Running</b></font> `/home/tomoyan/work/piwigo/piwigo_rs/target/debug/cli --name Tomoyan -c 7` Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 Hello Tomoyan 💩🤪 </pre></html></WRAP> </WRAP> ==== Diesel ==== === データベース接続設定 === Diesel でデータベース接続するために、.env ファイルに DATABASE_URL 環境変数を設定する...🤔\\ データベースは Podman のコンテナ内であるため、UNIX ドメインソケットではなく TCP/IP ソケット通信する必要があるので、ローカルホストは IPv6/IPv4 アドレスを指定する😉\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">echo</font> DATABASE_URL=mysql://piwigo:piwigo@<font color="#12488B"><b>[</b></font>::1<font color="#12488B"><b>]</b></font>:3306/piwigo_db <font color="#12488B"><b>></b></font> <u style="text-decoration-style:solid">.env</u> or <font color="#0087FF"><b>$</b></font> <font color="#26A269">echo</font> DATABASE_URL=mysql://piwigo:piwigo@127.0.0.1:3306/piwigo_db <font color="#12488B"><b>></b></font> <u style="text-decoration-style:solid">.env</u> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> setup </pre></html></WRAP> </WRAP> <html><code>--features</code></html> に仕様する RDBMS に応じて <html><code>postgres|mysql|sqlite</code></html> を指定する🤔\\ 複数指定する場合はカンマ区切りで指定できる😉\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> a<font color="#999999">dd diesel </font><font color="#A347BA">--features</font><font color="#999999"> postgres,mysql</font> or <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add diesel <font color="#A347BA">--features</font> mysql </pre></html></WRAP> <WRAP color_result_hlong><html><pre> <font color="#26A269"><b> Updating</b></font> crates.io index <font color="#26A269"><b> Adding</b></font> diesel v2.1.6 to dependencies Features: <font color="#26A269"><b>+</b></font> 32-column-tables <font color="#26A269"><b>+</b></font> bitflags <font color="#26A269"><b>+</b></font> byteorder <font color="#26A269"><b>+</b></font> itoa <font color="#26A269"><b>+</b></font> mysql <font color="#26A269"><b>+</b></font> mysql_backend <font color="#26A269"><b>+</b></font> mysqlclient-sys <font color="#26A269"><b>+</b></font> percent-encoding <font color="#26A269"><b>+</b></font> postgres <font color="#26A269"><b>+</b></font> postgres_backend <font color="#26A269"><b>+</b></font> pq-sys <font color="#26A269"><b>+</b></font> url <font color="#26A269"><b>+</b></font> with-deprecated 28 deactivated features </pre></html></WRAP> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">bat</font> <font color="#A347BA">-p</font> <font color="#A347BA">--pager</font> never <u style="text-decoration-style:solid">Cargo.toml</u> </pre></html></WRAP> <WRAP color_result><html><pre> <font color="#F8F8F2">[</font><font color="#A6E22E">package</font><font color="#F8F8F2">]</font> <font color="#F92672">name</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"cli"</font> <font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"0.1.0"</font> <font color="#F92672">edition</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2021"</font> <font color="#F8F8F2">[</font><font color="#A6E22E">dependencies</font><font color="#F8F8F2">]</font> <font color="#F92672">clap</font><font color="#F8F8F2"> = { </font><font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"4.5.4"</font><font color="#F8F8F2">, </font><font color="#F92672">features</font><font color="#F8F8F2"> = [</font><font color="#E6DB74">"derive"</font><font color="#F8F8F2">] }</font> <font color="#F92672">diesel</font><font color="#F8F8F2"> = { </font><font color="#F92672">version</font><font color="#F8F8F2"> = </font><font color="#E6DB74">"2.1.6"</font><font color="#F8F8F2">, </font><font color="#F92672">features</font><font color="#F8F8F2"> = [</font><font color="#E6DB74">"postgres"</font><font color="#F8F8F2">, </font><font color="#E6DB74">"mysql"</font><font color="#F8F8F2">] }</font> </pre></html></WRAP> </WRAP> === UNIX ドメインソケット経由の接続エラー === UNIX ドメインソケット経由でローカルサーバーに接続できない場合は…🤪\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">echo</font> DATABASE_URL=mysql://piwigo:piwigo@l<font color="#999999">ocalhost:3306/piwigo_db </font><font color="#12488B"><b>></b></font><font color="#999999"> </font><font color="#999999"><u style="text-decoration-style:solid">.env</u></font> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> setup </pre></html></WRAP> <WRAP color_result><html><pre> Creating database: piwigo_db Can't connect to local server through socket '/var/lib/mysql/mysql.sock' (2) </pre></html></WRAP> </WRAP> ホストをIPv6 アドレス<html><code>@[::1]:3306</code></html> または IPv4 アドレス<html><code>@127.0.0.1:3306</code></html> で指定する🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">echo</font> DATABASE_URL=mysql://piwigo:piwigo@<font color="#12488B"><b>[</b></font>::1<font color="#12488B"><b>]</b></font>:3306/piwigo_db <font color="#12488B"><b>></b></font> <u style="text-decoration-style:solid">.env</u> or <font color="#0087FF"><b>$</b></font> <font color="#26A269">echo</font> DATABASE_URL=mysql://piwigo:piwigo@127.0.0.1:3306/piwigo_db <font color="#12488B"><b>></b></font> <u style="text-decoration-style:solid">.env</u> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> setup </pre></html></WRAP> </WRAP> 以下の mysql コマンドの仕様と同じ🤔\\ {{page>linux:mysql#unix_ドメインソケット経由の接続エラー&noheader}} === RDBMS スキーマーから src/schema.rs を生成する === Diesel の print-schema コマンドでデータベース スキーマのテーブル定義を Rust ソースコードで出力できる🤔\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> print-schema <font color="#A347BA">-o</font> piwigo_images <font color="#12488B"><b>|</b></font> <font color="#26A269">bat</font> <font color="#A347BA">-p</font> <font color="#A347BA">-l</font> rs <font color="#A347BA">--pager</font> never </pre></html></WRAP> <WRAP color_result_long><html><pre class=Bat> <font color="#75715E">// @generated automatically by Diesel CLI.</font> <font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#66D9EF">mod</font><font color="#F8F8F2"> </font><font color="#A6E22E">sql_types</font><font color="#F8F8F2"> {</font> <font color="#F8F8F2"> #[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]</font> <font color="#F8F8F2"> #[diesel(mysql_type(name </font><font color="#F92672">=</font><font color="#F8F8F2"> </font><font color="#E6DB74">"Mediumint"</font><font color="#F8F8F2">))]</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#66D9EF">struct</font><font color="#F8F8F2"> </font><font color="#A6E22E">PiwigoImagesAddedByMediumint</font><font color="#F8F8F2">;</font> <font color="#F8F8F2"> #[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]</font> <font color="#F8F8F2"> #[diesel(mysql_type(name </font><font color="#F92672">=</font><font color="#F8F8F2"> </font><font color="#E6DB74">"Mediumint"</font><font color="#F8F8F2">))]</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#66D9EF">struct</font><font color="#F8F8F2"> </font><font color="#A6E22E">PiwigoImagesFilesizeMediumint</font><font color="#F8F8F2">;</font> <font color="#F8F8F2"> #[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]</font> <font color="#F8F8F2"> #[diesel(mysql_type(name </font><font color="#F92672">=</font><font color="#F8F8F2"> </font><font color="#E6DB74">"Mediumint"</font><font color="#F8F8F2">))]</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#66D9EF">struct</font><font color="#F8F8F2"> </font><font color="#A6E22E">PiwigoImagesIdMediumint</font><font color="#F8F8F2">;</font> <font color="#F8F8F2">}</font> <font color="#F8F8F2">diesel::table</font><font color="#F92672">!</font><font color="#F8F8F2"> {</font> <font color="#F8F8F2"> </font><font color="#F92672">use</font><font color="#F8F8F2"> diesel::sql_types::</font><font color="#F92672">*</font><font color="#F8F8F2">;</font> <font color="#F8F8F2"> </font><font color="#F92672">use</font><font color="#F8F8F2"> </font><font color="#F92672">super</font><font color="#F8F8F2">::sql_types::PiwigoImagesIdMediumint;</font> <font color="#F8F8F2"> </font><font color="#F92672">use</font><font color="#F8F8F2"> </font><font color="#F92672">super</font><font color="#F8F8F2">::sql_types::PiwigoImagesFilesizeMediumint;</font> <font color="#F8F8F2"> </font><font color="#F92672">use</font><font color="#F8F8F2"> </font><font color="#F92672">super</font><font color="#F8F8F2">::sql_types::PiwigoImagesAddedByMediumint;</font> <font color="#F8F8F2"> piwigo_images (id) {</font> <font color="#F8F8F2"> id -> Unsigned<PiwigoImagesIdMediumint>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 255]</font> <font color="#F8F8F2"> file -> Varchar,</font> <font color="#F8F8F2"> date_available -> Datetime,</font> <font color="#F8F8F2"> date_creation -> Nullable<Datetime>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 255]</font> <font color="#F8F8F2"> name -> Nullable<Varchar>,</font> <font color="#F8F8F2"> comment -> Nullable<Text>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 255]</font> <font color="#F8F8F2"> author -> Nullable<Varchar>,</font> <font color="#F8F8F2"> hit -> Unsigned<Integer>,</font> <font color="#F8F8F2"> filesize -> Nullable<Unsigned<PiwigoImagesFilesizeMediumint>>,</font> <font color="#F8F8F2"> width -> Nullable<Unsigned<Smallint>>,</font> <font color="#F8F8F2"> height -> Nullable<Unsigned<Smallint>>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 4]</font> <font color="#F8F8F2"> coi -> Nullable<Char>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 4]</font> <font color="#F8F8F2"> representative_ext -> Nullable<Varchar>,</font> <font color="#F8F8F2"> date_metadata_update -> Nullable<Date>,</font> <font color="#F8F8F2"> rating_score -> Nullable<Unsigned<Float>>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 255]</font> <font color="#F8F8F2"> path -> Varchar,</font> <font color="#F8F8F2"> storage_category_id -> Nullable<Unsigned<Smallint>>,</font> <font color="#F8F8F2"> level -> Unsigned<Tinyint>,</font> <font color="#F8F8F2"> #[max_length </font><font color="#F92672">=</font><font color="#F8F8F2"> 32]</font> <font color="#F8F8F2"> md5sum -> Nullable<Char>,</font> <font color="#F8F8F2"> added_by -> Unsigned<PiwigoImagesAddedByMediumint>,</font> <font color="#F8F8F2"> rotation -> Nullable<Unsigned<Tinyint>>,</font> <font color="#F8F8F2"> latitude -> Nullable<Double>,</font> <font color="#F8F8F2"> longitude -> Nullable<Double>,</font> <font color="#F8F8F2"> lastmodified -> Nullable<Timestamp>,</font> <font color="#F8F8F2"> }</font> <font color="#F8F8F2">}</font> </pre></html></WRAP> </WRAP> bat コマンドについては [[linux:bat|bat - シンタックスハイライトとGitとの連携機能付きの cat(1) クローン]] を参照😉\\ それを <html><code>src/schema.rs</code></html> へリダイレクトで追記する😉\\ <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel</font> print-schema <font color="#A347BA">-o</font> piwigo_images <font color="#12488B"><b>>></b></font> <u style="text-decoration-style:solid">src/schema.rs</u> </pre></html></WRAP> </WRAP> === schema.rs から src/models.rs を生成する === <WRAP color_term> <WRAP color_command><html><pre> <font color="#0087FF"><b>$</b></font> <font color="#26A269">diesel_ext</font> <font color="#A347BA">--model</font> <font color="#A347BA">-t</font> <font color="#12488B"><b>|</b></font> <font color="#26A269">bat</font> <font color="#A347BA">-p</font> <font color="#A347BA">-l</font> rs <font color="#A347BA">--pager</font> never </pre></html></WRAP> <WRAP color_result_long><html><pre class=Bat> Unsigned<PiwigoImagesIdMediumint> is not recognized. Please feel free to expand the HashMap. This could provide good hints: <a href="https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html">https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html</a> Nullable<Unsigned<PiwigoImagesFilesizeMediumint>> is not recognized. Please feel free to expand the HashMap. This could provide good hints: <a href="https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html">https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html</a> Nullable<Unsigned<Float>> is not recognized. Please feel free to expand the HashMap. This could provide good hints: https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html Unsigned<PiwigoImagesAddedByMediumint> is not recognized. Please feel free to expand the HashMap. This could provide good hints: <a href="https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html">https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html</a> <font color="#75715E">// Generated by diesel_ext</font> <font color="#F8F8F2">#![allow(unused)]</font> <font color="#F8F8F2">#![allow(clippy::all)]</font> <font color="#F92672">use</font><font color="#F8F8F2"> chrono::NaiveDate;</font> <font color="#F92672">use</font><font color="#F8F8F2"> chrono::NaiveDateTime;</font> <font color="#F8F8F2">#[derive(Queryable, Debug)]</font> <font color="#F8F8F2">#[diesel(table_name </font><font color="#F92672">=</font><font color="#F8F8F2"> piwigo_images)]</font> <font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#66D9EF">struct</font><font color="#F8F8F2"> </font><font color="#A6E22E">PiwigoImage</font><font color="#F8F8F2"> {</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">id</font><font color="#F8F8F2">: </font><font color="#75715E">/* TODO: unknown type Unsigned<PiwigoImagesIdMediumint> */</font><font color="#F8F8F2">,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">file</font><font color="#F8F8F2">: String,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">date_available</font><font color="#F8F8F2">: NaiveDateTime,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">date_creation</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><NaiveDateTime>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">name</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">comment</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">author</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">hit</font><font color="#F8F8F2">: </font><font color="#66D9EF">u32</font><font color="#F8F8F2">,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">filesize</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#75715E">/* TODO: unknown type Nullable<Unsigned<PiwigoImagesFilesizeMediumint>> */</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">width</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">u16</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">height</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">u16</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">coi</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">representative_ext</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">date_metadata_update</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><NaiveDate>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">rating_score</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#75715E">/* TODO: unknown type Nullable<Unsigned<Float>> */</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">path</font><font color="#F8F8F2">: String,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">storage_category_id</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">u16</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">level</font><font color="#F8F8F2">: </font><font color="#66D9EF">u8</font><font color="#F8F8F2">,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">md5sum</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#A6E22E">String</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">added_by</font><font color="#F8F8F2">: </font><font color="#75715E">/* TODO: unknown type Unsigned<PiwigoImagesAddedByMediumint> */</font><font color="#F8F8F2">,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">rotation</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">u8</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">latitude</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">f64</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">longitude</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><</font><font color="#66D9EF">f64</font><font color="#F8F8F2">>,</font> <font color="#F8F8F2"> </font><font color="#F92672">pub</font><font color="#F8F8F2"> </font><font color="#FFFFFF">lastmodified</font><font color="#F8F8F2">: </font><font color="#A6E22E">Option</font><font color="#F8F8F2"><NaiveDateTime>,</font> <font color="#F8F8F2">}</font> </pre></html></WRAP> </WRAP> === データベース データ型との対応関係のヒント === <html><script> function formatBigInt(bigint) { return bigint.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } </script> <style> th { background-color: #eee; } .xtern_xtrn { } </style></html> <WRAP mintbl minfont_12> 参考: [[https://dev.mysql.com/doc/refman/8.0/en/integer-types.html|MySQL :: MySQL 8.0 Reference Manual :: 13.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT]]\\ ^ タイプ ^ ストレージ (Bytes) ^ 符号付き最小値 ^ 符号なしの最小値 ^ 符号付き最大値 ^^ 符号なしの最大値 ^^ | TINYINT | 1 | -128 | 0 | 127 | | 255 | | | SMALLINT | 2 | -32,768 | 0 | 32,767 | | 65,535 | | | MEDIUMINT | 3 | -8,388,608 | 0 | 8,388,607 | | 16,777,215 | | | INT | 4 | -2,147,483,648 | 0 | 2,147,483,647 | | 4,294,967,295 | | | BIGINT | 8 | -263 | 0 | <html><script>document.write(formatBigInt(2n ** 63n -1n))</script></html> | 2<html><sup>63</sup></html>-1 | <html><script>document.write(formatBigInt(2n ** 64n -1n))</script></html> | 2<html><sup>64</sup></html>-1 | </WRAP> <WRAP mintbl minfont_12> [[https://docs.diesel.rs/master/diesel/sql_types/|diesel::sql_types - Rust]]\\ [[https://docs.rs/min_max_traits/latest/min_max_traits/|min_max_traits - Rust]]\\ ^ 符号なし整数型 ^^^^^ ^ タイプ ^ 最小値 ^^ 最大値 ^^ | u8 | 0 || <html><script>document.write(formatBigInt(2n ** 8n -1n))</script></html> | 2<html><sup>8</sup></html>-1 | | u16 | 0 || <html><script>document.write(formatBigInt(2n ** 16n -1n))</script></html> | 2<html><sup>16</sup></html>-1 | | u32 | 0 || <html><script>document.write(formatBigInt(2n ** 32n -1n))</script></html> | 2<html><sup>32</sup></html>-1 | | u64 | 0 || <html><script>document.write(formatBigInt(2n ** 64n -1n))</script></html> | 2<html><sup>64</sup></html>-1 | | u128 | 0 || <WRAP minfont9><html><script>document.write(formatBigInt(2n ** 128n -1n))</script></html></WRAP> | 2<html><sup>128</sup></html>-1 | ^ 符号付き 2 の補数整数型 ^^^^^ ^ タイプ ^ 最小値 ^^ 最大値 ^^ | i8 | <html><script>document.write(formatBigInt(-(2n ** 7n)))</script></html> | -(2<html><sup>7</sup></html>) | <html><script>document.write(formatBigInt(2n ** 7n -1n))</script></html> | 2<html><sup>7</sup></html>-1 | | i16 | <html><script>document.write(formatBigInt(-(2n ** 15n)))</script></html> | -(2<html><sup>15</sup></html>) | <html><script>document.write(formatBigInt(2n ** 15n -1n))</script></html> | 2<html><sup>15</sup></html>-1 | | i32 | <html><script>document.write(formatBigInt(-(2n ** 31n)))</script></html> | -(2<html><sup>31</sup></html>) | <html><script>document.write(formatBigInt(2n ** 31n -1n))</script></html> | 2<html><sup>31</sup></html>-1 | | i64 | <html><script>document.write(formatBigInt(-(2n ** 63n)))</script></html> | -(2<html><sup>63</sup></html>) | <html><script>document.write(formatBigInt(2n ** 63n -1n))</script></html> | 2<html><sup>63</sup></html>-1 | | i128 | <WRAP minfont9><html><script>document.write(formatBigInt(-(2n ** 127n)))</script></html></WRAP> | -(2<html><sup>127</sup></html>) | <WRAP minfont9><html><script>document.write(formatBigInt(2n ** 127n -1n))</script></html></WRAP> | 2<html><sup>127</sup></html>-1 | </WRAP> [[https://gist.github.com/steveh/7c7145409a5eed6b698ee8b609b6d1fc|postgresql-diesel-rust-types.md]]\\ <WRAP mintbl minfont_12> ^ PostgreSQL Type ^ PostgreSQL Size ^ Description ^ Range ^ Diesel Type ^ Rust Type ^ | Nullable Types | | nullable | | [[http://docs.diesel.rs/diesel/sql_types/struct.Nullable.html|Nullable]]<T> | [[https://doc.rust-lang.org/std/option/enum.Option.html|Option]]<T> | ^ [[https://www.postgresql.org/docs/current/static/datatype-numeric.html|Numeric Types]] ^^^^^^ | smallint, int2 | 2 bytes | signed integer | -32768 to +32767 | [[http://docs.diesel.rs/diesel/sql_types/struct.SmallInt.html|SmallInt]] | [[https://doc.rust-lang.org/std/primitive.i16.html|i16]] | | integer, int, int4 | 4 bytes | signed integer | -2147483648 to +2147483647 | [[http://docs.diesel.rs/diesel/sql_types/struct.Integer.html|Integer]] | [[https://doc.rust-lang.org/std/primitive.i32.html|i32]] | | bigint, int8 | 8 bytes | signed integer | -9223372036854775808 to +9223372036854775807 | [[http://docs.diesel.rs/diesel/sql_types/struct.BigInt.html|BigInt]] | [[https://doc.rust-lang.org/std/primitive.i64.html|i64]] | | numeric(p, s), decimal(p, s) | 2 bytes per 4 digits + 3 to 8 bytes | exact numeric of selectable precision | 131072.16383 digits | [[http://docs.diesel.rs/diesel/sql_types/struct.Numeric.html|Numeric]] | [[http://docs.diesel.rs/bigdecimal/struct.BigDecimal.html|bigdecimal::BigDecimal]] | | real, float4 | 4 bytes | single precision floating-point number | 6 digits precision | [[http://docs.diesel.rs/diesel/sql_types/struct.Float.html|Float]] | [[https://doc.rust-lang.org/std/primitive.f32.html|f32]] | | double precision, float8 | 8 bytes | double precision floating-point number | 15 digits precision | [[http://docs.diesel.rs/diesel/sql_types/struct.Double.html|Double]] | [[https://doc.rust-lang.org/std/primitive.f64.html|f64]] | | smallserial, serial2 | 2 bytes | autoincrementing integer | 1 to 32767 | [[http://docs.diesel.rs/diesel/sql_types/struct.SmallInt.html|SmallInt]] | [[https://doc.rust-lang.org/std/primitive.i16.html|i16]] | | serial, serial4 | 4 bytes | autoincrementing integer | 1 to 2147483647 | [[http://docs.diesel.rs/diesel/sql_types/struct.Integer.html|Integer]] | [[https://doc.rust-lang.org/std/primitive.i32.html|i32]] | | bigserial, serial8 | 8 bytes | autoincrementing integer | 1 to 9223372036854775807 | [[http://docs.diesel.rs/diesel/sql_types/struct.BigInt.html|BigInt]] | [[https://doc.rust-lang.org/std/primitive.i64.html|i64]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-money.html|Monetary Types]] ^^^^^^ | money | 8 bytes | currency amount | -92233720368547758.08 to +92233720368547758.07 | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Money.html|Money]] | [[http://docs.diesel.rs/diesel/pg/data_types/struct.Cents.html|Cents]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-character.html|Character Types]] ^^^^^^ | character varying(n), varchar(n) | n+1 or n+4 bytes | variable-length character string | | [[http://docs.diesel.rs/diesel/sql_types/struct.Text.html|Text]] | [[https://doc.rust-lang.org/std/string/struct.String.html|String]], &[[https://doc.rust-lang.org/std/primitive.str.html|str]] | | character(n), char(n) | n+1 or n+4 bytes | fixed-length character string | | [[http://docs.diesel.rs/diesel/sql_types/struct.Text.html|Text]] | [[https://doc.rust-lang.org/std/string/struct.String.html|String]], &[[https://doc.rust-lang.org/std/primitive.str.html|str]] | | text | n+1 or n+4 bytes | variable-length character string | | [[http://docs.diesel.rs/diesel/sql_types/struct.Text.html|Text]] | [[https://doc.rust-lang.org/std/string/struct.String.html|String]], &[[https://doc.rust-lang.org/std/primitive.str.html|str]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-binary.html|Binary Data Types]] ^^^^^^ | bytea | n+1 to n+4 bytes | binary data ("byte array") | | [[http://docs.diesel.rs/diesel/sql_types/struct.Binary.html|Binary]] | [[https://doc.rust-lang.org/std/vec/struct.Vec.html|Vec]]<[[https://doc.rust-lang.org/std/primitive.u8.html|u8]]>, &[[https://doc.rust-lang.org/std/primitive.u8.html|u8]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-datetime.html|Date/Time Types]] ^^^^^^ | timestamp, timestamp(p) without time zone | 8 bytes | date and time of day | 4713 BC to 294276 AD, 1 microsecond | [[http://docs.diesel.rs/diesel/sql_types/struct.Timestamp.html|Timestamp]] | [[http://docs.diesel.rs/chrono/naive/struct.NaiveDateTime.html|chrono::NaiveDateTime]] | | timestamptz, timestamp(p) with time zone | 8 bytes | date and time of day, with time zone | 4713 BC to 294276 AD, 1 microsecond | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Timestamptz.html|Timestamptz]] | [[http://docs.diesel.rs/chrono/struct.DateTime.html|chrono::DateTime]] | | date | 4 bytes | calendar date (year, month, day) | 4713 BC to 5874897 AD, 1 day | [[http://docs.diesel.rs/diesel/sql_types/struct.Date.html|Date]] | [[http://docs.diesel.rs/chrono/naive/struct.NaiveDate.html|chrono::NaiveDate]] | | time, time(p) without time zone | 8 bytes | time of day (no date) | 00:00:00 to 24:00:00, 1 microsecond | [[http://docs.diesel.rs/diesel/sql_types/struct.Time.html|Time]] | [[http://docs.diesel.rs/chrono/naive/struct.NaiveTime.html|chrono::NaiveTime]] | | timetz, time(p) with time zone | 12 bytes | time of day (no date), with time zone | 00:00:00+1459 to 24:00:00-1459, 1 microsecond | | | interval(fields)(p) | 16 bytes | time span | -178000000 years to 178000000 years, 1 microsecond | [[http://docs.diesel.rs/diesel/sql_types/struct.Interval.html|Interval]] | [[http://docs.diesel.rs/diesel/pg/data_types/struct.PgInterval.html|PgInterval]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-boolean.html|Boolean Type]] ^^^^^^ | boolean, bool | 1 byte | logical Boolean (true/false) | | [[http://docs.diesel.rs/diesel/sql_types/struct.Bool.html|Bool]] | [[https://doc.rust-lang.org/std/primitive.bool.html|bool]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-geometric.html|Geometric Types]] ^^^^^^ | point (x,y) | 16 bytes | geometric point on a plane | | | line {A,B,C} | 32 bytes | infinite line on a plane | | | lseg ((x1,y1),(x2,y2)) | 32 bytes | finite line segment on a plane | | | box ((x1,y1),(x2,y2)) | 32 bytes | rectangular box on a plane | | | path ((x1,y1),...) | 16+16n bytes | closed geometric path on a plane | | | path [(x1,y1),...] | 16+16n bytes | open geometric path on a plane | | | polygon ((x1,y1),...) | 40+16n bytes | closed geometric path on a plane | | | circle <(x,y),r\> | 24 bytes | circle on a plane | | ^ [[https://www.postgresql.org/docs/current/static/datatype-net-types.html|Network Address Types]] ^^^^^^ | cidr | 7 or 19 bytes | IPv4 or IPv6 network address | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Cidr.html|Cidr]] | [[http://docs.diesel.rs/ipnetwork/enum.IpNetwork.html|ipnetwork::IpNetwork]] | | inet | 7 or 19 bytes | IPv4 or IPv6 host address | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Inet.html|Inet]] | [[http://docs.diesel.rs/ipnetwork/enum.IpNetwork.html|ipnetwork::IpNetwork]] | | macaddr | 6 bytes | MAC address | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.MacAddr.html|MacAddr]] | %%[%%[[https://doc.rust-lang.org/std/primitive.u8.html|u8]]; 6] | | macaddr8 | 8 bytes | MAC address (EUI-64 format) | | ^ [[https://www.postgresql.org/docs/current/static/datatype-enum.html|Enumerated Types]] ^^^^^^ | enum | 4 bytes | enumerated value | | (user-defined) | [[https://doc.rust-lang.org/std/string/struct.String.html|String]], [[https://doc.rust-lang.org/book/first-edition/enums.html|enum]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-bit.html|Bit String Types]] ^^^^^^ | bit(n) | 1 byte per 8 bits + 5 or 8 bytes | fixed-length bit string | | | bit varying(n), varbit | 1 byte per 8 bits + 5 or 8 bytes | variable-length bit string | | ^ [[https://www.postgresql.org/docs/current/static/datatype-textsearch.html|Text Search Types]] ^^^^^^ | tsvector | | text search document | | TsVector | | tsquery | | text search query | | TsQuery | ^ [[https://www.postgresql.org/docs/current/static/datatype-uuid.html|UUID Type]] ^^^^^^ | uuid | 16 bytes | universally unique identifier | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Uuid.html|Uuid]] | [[https://docs.rs/uuid/0.5.1/uuid/struct.Uuid.html|uuid::Uuid]] | ^ [[https://www.postgresql.org/docs/current/static/datatype-xml.html|XML Type]] ^^^^^^ | xml | | XML data | | ^ [[https://www.postgresql.org/docs/current/static/datatype-json.html|JSON Types]] ^^^^^^ | json | | textual JSON data | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Json.html|Json]] | [[http://docs.diesel.rs/serde_json/value/enum.Value.html|serde_json::Value]] | | jsonb | | binary JSON data, decomposed | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Jsonb.html|Jsonb]] | [[http://docs.diesel.rs/serde_json/value/enum.Value.html|serde_json::Value]] | ^ [[https://www.postgresql.org/docs/current/static/arrays.html|Arrays]] ^^^^^^ | t[] | | array of values | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Array.html|Array]]<T> | [[https://doc.rust-lang.org/std/vec/struct.Vec.html|Vec]]<T>, [[https://doc.rust-lang.org/std/vec/struct.Vec.html|Vec]]<[[https://doc.rust-lang.org/std/option/enum.Option.html|Option]]<T>>, &[T], &%%[%%[[https://doc.rust-lang.org/std/option/enum.Option.html|Option]]<T>] | ^ [[https://www.postgresql.org/docs/current/static/rangetypes.html|Range Types]] ^^^^^^ | int4range | | range of integer | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/sql_types/struct.Integer.html|Integer]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[https://doc.rust-lang.org/std/primitive.i32.html|i32]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[https://doc.rust-lang.org/std/primitive.i32.html|i32]]>) | int8range | | range of bigint | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/sql_types/struct.BigInt.html|BigInt]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[https://doc.rust-lang.org/std/primitive.i64.html|i64]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[https://doc.rust-lang.org/std/primitive.i64.html|i64]]>) | numrange | | range of numeric | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/sql_types/struct.Numeric.html|Numeric]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/bigdecimal/struct.BigDecimal.html|bigdecimal::BigDecimal]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/bigdecimal/struct.BigDecimal.html|bigdecimal::BigDecimal]]>) | tsrange | | range of timestamp | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/sql_types/struct.Timestamp.html|Timestamp]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/naive/struct.NaiveDateTime.html|chrono::NaiveDateTime]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/naive/struct.NaiveDateTime.html|chrono::NaiveDateTime]]>) | tstzrange | | range of timestamptz | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Timestamptz.html|Timestamptz]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/struct.DateTime.html|chrono::DateTime]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/struct.DateTime.html|chrono::DateTime]]>) | daterange | | range of date | | [[http://docs.diesel.rs/diesel/pg/types/sql_types/struct.Range.html|Range]]<[[http://docs.diesel.rs/diesel/sql_types/struct.Date.html|Date]]> | ([[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/naive/struct.NaiveDate.html|chrono::NaiveDate]]>, [[https://doc.rust-lang.org/std/collections/enum.Bound.html|Bound]]<[[http://docs.diesel.rs/chrono/naive/struct.NaiveDate.html|chrono::NaiveDate]]>) | </WRAP> === 参考文献 === [[so>questions/70410103/how-to-make-diesel-auto-generate-models|rust - How to make Diesel auto-generate models? - Stack Overflow]] [[gtr>https://stackoverflow.com/questions/70410103/how-to-make-diesel-auto-generate-models|翻訳]]\\ [[https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html|A comprehensive mapping of PostgreSQL, Diesel, and Rust types]]\\ rust/diesel.txt 最終更新: 2024/06/04 17:41by ともやん