From b5aa59af6f7ba334b62b9d7d1899cce53efbbd65 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 7 Feb 2026 21:48:01 +0900 Subject: [PATCH 01/22] `edit`: Remove setting null feature from `d` --- spread/view.go | 1 - 1 file changed, 1 deletion(-) diff --git a/spread/view.go b/spread/view.go index 9bccce4..35c8001 100644 --- a/spread/view.go +++ b/spread/view.go @@ -95,7 +95,6 @@ func (viewer *Viewer) edit(title string, validate func(*csvi.CellValidatedEvent) keymap := map[string]func(*csvi.KeyEventArgs) (*csvi.CommandResult, error){ "q": quit, "x": setNull, - "d": setNull, } for _, p := range viewer.OnEvents { keymap[p.Key] = p.Handler From 85efca154156e76685fc0c2ddc47817899cb2868 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:14:17 +0900 Subject: [PATCH 02/22] Release notes: Mentioned to `edit`: `dd`,`dr` --- release_note_en.md | 3 +++ release_note_ja.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/release_note_en.md b/release_note_en.md index 22ee554..7d3fd34 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -2,6 +2,9 @@ Release notes (English) ======================= ( **English** / [Japanese](release_note_ja.md) ) +- `edit` statement: Restore row deletion commands (`dd`, `dr`): + Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. + v0.27.3 ------- Feb 6, 2026 diff --git a/release_note_ja.md b/release_note_ja.md index 78daac4..ac60810 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -2,6 +2,9 @@ Release notes (Japanese) ======================== ( [English](release_note_en.md) / **Japanese** ) +- `edit`文: 行削除コマンド(`dd`, `dr`)の復旧 + レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 + v0.27.3 ------- Feb 6, 2026 From f38dca3705b22b26c24b4eb8892cc5f9a3bac6d0 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:26:41 +0900 Subject: [PATCH 03/22] README: Update key-bindings table --- README.md | 15 ++++++++++----- README_ja.md | 14 ++++++++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 31fd274..00a399d 100644 --- a/README.md +++ b/README.md @@ -95,11 +95,16 @@ Supported commands - `EDIT [tablename [WHERE conditions...]]` - Start an [editor][csvi] to modify the selected records of the table. - In the editor, these keys are bound. - - | Key | Bindings - |-------|----------------------------- - |`x`,`d`| Set NULL to the current cell - |`q` | Quit editor with confirmation to apply or discard changes + + | Key | Action | + | --- | --- | + | `r` | Replace cell value (using built-in readline) | + | `o` | Append a new row | + | `dd`, `dr` | **Delete the current row** | + | `x` | **Set the current cell to NULL** | + | `q` | Quit editor (with apply/discard confirmation) | + + **Note:** The `D` key is disabled to prevent accidental execution due to terminal escape sequence delays. Please use `dd` or `dr` instead. - Because the EDIT statement automatically generates SQL from data changed in the editor, it may not be able to properly represent SQL data for special types specific to individual databases. If you find it, we would appreciate it if you could [contact us](https://github.com/hymkor/sqlbless/issues/new). - `HOST command-line` diff --git a/README_ja.md b/README_ja.md index b2e50a0..82ccf52 100644 --- a/README_ja.md +++ b/README_ja.md @@ -94,10 +94,16 @@ SQL-Bless は、そうした現場での教訓から生まれた、安全で再 - 選択したテーブルのレコードを修正するため [エディタ][csvi] を起動します - エディタ中では以下のキーが拡張されます - | Key | Bindings - |-------|----------------------------- - |`x`,`d`| セルに NULL をセットする - |`q` | 変更を適用するかを確認してから終了 + | キー | 操作内容 | + | --- | --- | + | `r` | カレントセルを組み込みの readline で編集する | + | `o` | 新しい行を末尾に追加する | + | `dd`, `dr` | カレント行を削除する | + | `x` | カレントセルに NULL を設定する | + | `q` | エディタを終了する(変更の適用または破棄を確認) | + + **※** ターミナルのエスケープシーケンス遅延による誤作動を防ぐため、`D` キーによる削除は無効化された。行の削除には `dd` または `dr` を使用のこと + - EDIT文は、エディターでの変更データから自動で SQL を生成する都合、個々のデータベース固有の特殊な型向けの SQL データをうまく表現できない場合があります。見つかりましたら、[ご連絡](https://github.com/hymkor/sqlbless/issues/new)いただけるとたすかります。 - `HOST command-line` From 5370998448d67193c6c6463b845a2534cae912a5 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sun, 8 Feb 2026 05:00:27 +0900 Subject: [PATCH 04/22] Release notes: Add PR number #35 (#36) --- release_note_en.md | 2 +- release_note_ja.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/release_note_en.md b/release_note_en.md index 7d3fd34..4d8504f 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -3,7 +3,7 @@ Release notes (English) ( **English** / [Japanese](release_note_ja.md) ) - `edit` statement: Restore row deletion commands (`dd`, `dr`): - Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. + Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. (#35) v0.27.3 ------- diff --git a/release_note_ja.md b/release_note_ja.md index ac60810..64a43b0 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -3,7 +3,7 @@ Release notes (Japanese) ( [English](release_note_en.md) / **Japanese** ) - `edit`文: 行削除コマンド(`dd`, `dr`)の復旧 - レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 + レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 (#35) v0.27.3 ------- From 0a45906e913f9e65233fa1a5fe8e296f870e7851 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sun, 8 Feb 2026 05:19:21 +0900 Subject: [PATCH 05/22] Release notes: Mentioned to Csvi#79 (`go work use csvi sqlbless`) (#37) --- release_note_en.md | 3 +++ release_note_ja.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/release_note_en.md b/release_note_en.md index 4d8504f..67d390c 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -4,6 +4,9 @@ Release notes (English) - `edit` statement: Restore row deletion commands (`dd`, `dr`): Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. (#35) +- `edit` statement: Prevent creation of empty lines at the end of the editable CSV content. ([csvi#79]) + +[csvi#79]: https://github.com/hymkor/csvi/pull/79 v0.27.3 ------- diff --git a/release_note_ja.md b/release_note_ja.md index 64a43b0..f25aad0 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -4,6 +4,9 @@ Release notes (Japanese) - `edit`文: 行削除コマンド(`dd`, `dr`)の復旧 レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 (#35) +- `edit`文: 編集対象の CSV データ末尾に空行が生成されないようにした。([csvi#79]) + +[csvi#79]: https://github.com/hymkor/csvi/pull/79 v0.27.3 ------- From 47ed3a757f69d58fa9b72804d2b9165b8963bb13 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:08:04 +0900 Subject: [PATCH 06/22] Stop using deprecated fields: `csvi.KeyEventArgs.CursorRow` and `CursorCol` --- commands.go | 4 ++-- spread/view.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/commands.go b/commands.go index 54b3902..d2e838a 100644 --- a/commands.go +++ b/commands.go @@ -119,13 +119,13 @@ func doDescTables(ctx context.Context, ss *session, commandIn commandIn) error { var name string handler := func(e *csvi.KeyEventArgs) (*csvi.CommandResult, error) { - if e.CursorRow.Index() == 0 { + if e.CurrentRow().Index() == 0 { return &csvi.CommandResult{}, nil } header := e.Front() for i, c := range header.Cell { if strings.EqualFold(c.Text(), ss.Dialect.TableNameField) { - name = e.CursorRow.Cell[i].Text() + name = e.CurrentRow().Cell[i].Text() return &csvi.CommandResult{Quit: true}, nil } } diff --git a/spread/view.go b/spread/view.go index 35c8001..596b4f0 100644 --- a/spread/view.go +++ b/spread/view.go @@ -59,18 +59,18 @@ func (viewer *Viewer) edit(title string, validate func(*csvi.CellValidatedEvent) applyChange := false setNull := func(e *csvi.KeyEventArgs) (*csvi.CommandResult, error) { - if e.CursorRow.Index() < viewer.HeaderLines { + if e.CurrentRow().Index() < viewer.HeaderLines { return &csvi.CommandResult{}, nil } ce := &csvi.CellValidatedEvent{ Text: viewer.Null, - Row: e.CursorRow.Index(), - Col: e.CursorCol, + Row: e.CurrentRow().Index(), + Col: e.CurrentCol(), } if _, err := validate(ce); err != nil { return &csvi.CommandResult{Message: err.Error()}, nil } - e.CursorRow.Replace(e.CursorCol, viewer.Null, &uncsv.Mode{Comma: viewer.Comma}) + e.CurrentRow().Replace(e.CurrentCol(), viewer.Null, &uncsv.Mode{Comma: viewer.Comma}) return &csvi.CommandResult{}, nil } From 1f333d886162561650c256c800cd8abd3638b649 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Mon, 9 Feb 2026 01:50:36 +0900 Subject: [PATCH 07/22] go1.20.14.exe get github.com/hymkor/csvi@develop --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6b0922e..c972a0d 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/glebarez/go-sqlite v1.22.0 github.com/go-sql-driver/mysql v1.8.1 - github.com/hymkor/csvi v1.21.1 + github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad github.com/hymkor/go-multiline-ny v0.22.4 github.com/hymkor/go-shellcommand v0.0.2 github.com/hymkor/struct2flag v0.0.4 diff --git a/go.sum b/go.sum index 32312d5..396df6f 100644 --- a/go.sum +++ b/go.sum @@ -25,8 +25,8 @@ github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EO github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hymkor/csvi v1.21.1 h1:8rgQgH0mGTeuzabk7cN53g87LwoR/uMQIAmIEqIk0bo= -github.com/hymkor/csvi v1.21.1/go.mod h1:zm4EcSzlGiiCtPWq77a+L3Q5IpJufIEX0q4iIGKXZhs= +github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad h1:2b9yxzh3XErM2CNnsffNZavYBgE+tXuU5MMaP3g8Lss= +github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad/go.mod h1:zm4EcSzlGiiCtPWq77a+L3Q5IpJufIEX0q4iIGKXZhs= github.com/hymkor/go-multiline-ny v0.22.4 h1:Ag2rkBpDnr3jp+AHe1CuXSOQ4AQ8D0+gBNVf+BAX+/0= github.com/hymkor/go-multiline-ny v0.22.4/go.mod h1:v2lqQooHVAO53WICAIbgTn74bQtzsg4tFn29d+7JPwY= github.com/hymkor/go-shellcommand v0.0.2 h1:6+XG2h/9DGk5i3Oh4rU48z/nsPWx4Sp73s6OpryQtyw= From 609f437081cc6e76a6ce2426ba42ef90c932385f Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Mon, 9 Feb 2026 00:18:54 +0900 Subject: [PATCH 08/22] Release notes: Mentioned to #38 --- release_note_en.md | 2 ++ release_note_ja.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/release_note_en.md b/release_note_en.md index 67d390c..b09db5e 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -5,8 +5,10 @@ Release notes (English) - `edit` statement: Restore row deletion commands (`dd`, `dr`): Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. (#35) - `edit` statement: Prevent creation of empty lines at the end of the editable CSV content. ([csvi#79]) +- (internal changes) Stop using deprecated fields: `csvi.KeyEventArgs.CursorRow` and `CursorCol` ([csvi#80],#38) [csvi#79]: https://github.com/hymkor/csvi/pull/79 +[csvi#80]: https://github.com/hymkor/csvi/pull/80 v0.27.3 ------- diff --git a/release_note_ja.md b/release_note_ja.md index f25aad0..68f3eb9 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -5,8 +5,10 @@ Release notes (Japanese) - `edit`文: 行削除コマンド(`dd`, `dr`)の復旧 レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 (#35) - `edit`文: 編集対象の CSV データ末尾に空行が生成されないようにした。([csvi#79]) +- (内部修正) 廃止予定のフィールド `csvi.KeyEventArgs.CursorRow` と `CursorCol` 使わないようにした ([csvi#80],#38) [csvi#79]: https://github.com/hymkor/csvi/pull/79 +[csvi#80]: https://github.com/hymkor/csvi/pull/80 v0.27.3 ------- From 730cb99674056568aef6a7abe706641c2e18d778 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:55:19 +0900 Subject: [PATCH 09/22] `edit`: When no modified, `q` quites immediately without prompt. --- spread/view.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spread/view.go b/spread/view.go index 596b4f0..fce7c7e 100644 --- a/spread/view.go +++ b/spread/view.go @@ -75,6 +75,11 @@ func (viewer *Viewer) edit(title string, validate func(*csvi.CellValidatedEvent) } quit := func(app *csvi.KeyEventArgs) (*csvi.CommandResult, error) { + if !app.IsDirty() { + io.WriteString(app, "\n") + return &csvi.CommandResult{Quit: true}, nil + } + ch, err := app.MessageAndGetKey(`"Y": Save&Exit "N": Discard&Exit : Cancel(edit)`) if err != nil { return nil, err From d1481af177c2b8741e5c8fade0236980c32f0261 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Mon, 9 Feb 2026 00:18:54 +0900 Subject: [PATCH 10/22] Release notes: Mentioned to #39 --- release_note_en.md | 2 ++ release_note_ja.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/release_note_en.md b/release_note_en.md index b09db5e..aa55be7 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -6,9 +6,11 @@ Release notes (English) Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. (#35) - `edit` statement: Prevent creation of empty lines at the end of the editable CSV content. ([csvi#79]) - (internal changes) Stop using deprecated fields: `csvi.KeyEventArgs.CursorRow` and `CursorCol` ([csvi#80],#38) +- `edit` statement: Quit immediately on `q` without a prompt if there are no changes.([csvi#81],#39) [csvi#79]: https://github.com/hymkor/csvi/pull/79 [csvi#80]: https://github.com/hymkor/csvi/pull/80 +[csvi#81]: https://github.com/hymkor/csvi/pull/81 v0.27.3 ------- diff --git a/release_note_ja.md b/release_note_ja.md index 68f3eb9..74f033a 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -6,9 +6,11 @@ Release notes (Japanese) レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 (#35) - `edit`文: 編集対象の CSV データ末尾に空行が生成されないようにした。([csvi#79]) - (内部修正) 廃止予定のフィールド `csvi.KeyEventArgs.CursorRow` と `CursorCol` 使わないようにした ([csvi#80],#38) +- `edit`文: 変更がない場合は `q` で確認なしに終了するようにした。([csvi#81],#39) [csvi#79]: https://github.com/hymkor/csvi/pull/79 [csvi#80]: https://github.com/hymkor/csvi/pull/80 +[csvi#81]: https://github.com/hymkor/csvi/pull/81 v0.27.3 ------- From f94f3114e532f3b1fe15d750b07cdba36807dc45 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:50:32 +0900 Subject: [PATCH 11/22] go1.20.14.exe get github.com/nyaosorg/go-box/v3@latest (#40) go: upgraded github.com/clipperhouse/uax29/v2 v2.3.0 => v2.6.0 go: upgraded github.com/nyaosorg/go-box/v3 v3.0.0 => v3.1.1 --- go.mod | 5 ++--- go.sum | 10 ++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index c972a0d..5969e76 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 github.com/microsoft/go-mssqldb v1.7.2 - github.com/nyaosorg/go-box/v3 v3.0.0 + github.com/nyaosorg/go-box/v3 v3.1.1 github.com/nyaosorg/go-readline-ny v1.14.1 github.com/nyaosorg/go-ttyadapter v0.3.0 github.com/sijms/go-ora/v2 v2.8.22 @@ -21,8 +21,7 @@ require ( require ( filippo.io/edwards25519 v1.1.0 // indirect - github.com/clipperhouse/stringish v0.1.1 // indirect - github.com/clipperhouse/uax29/v2 v2.3.0 // indirect + github.com/clipperhouse/uax29/v2 v2.6.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect diff --git a/go.sum b/go.sum index 396df6f..c3a020a 100644 --- a/go.sum +++ b/go.sum @@ -6,10 +6,8 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xO github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA= -github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= -github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= -github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= -github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= +github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos= +github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= @@ -50,8 +48,8 @@ github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/nyaosorg/go-box/v3 v3.0.0 h1:W5qfScEkKBoD68gbP/lwfWlvcTRB0rwXkhL+9iC62xI= -github.com/nyaosorg/go-box/v3 v3.0.0/go.mod h1:70GsE9mIh7JKVCxt71q3jEijO6C9YJmOZqWpPa9w+GY= +github.com/nyaosorg/go-box/v3 v3.1.1 h1:iTWE0MOTlD52yEySfhdN6nonX7Uagkn985xQZM6sCyI= +github.com/nyaosorg/go-box/v3 v3.1.1/go.mod h1:kuRLL+x9n7kqIAiSZRXgNxP+HJVelsCKplo2TQSnWIo= github.com/nyaosorg/go-inline-animation v0.3.0 h1:LrOHowED2PrXEUWGagL1bLR+XTXD06EoWnLRAAn0PWc= github.com/nyaosorg/go-inline-animation v0.3.0/go.mod h1:GLb7BXeLMuA12LMN3c8l69GQcmlAxit3oZRKILztOsU= github.com/nyaosorg/go-readline-ny v1.14.1 h1:bWyXpR6jRaCXysx4bnioxk36+YjQ6dypHKMjHnzIXdk= From 1ae502d3499323dbbf11dc734fa03118db20ff8e Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:08:42 +0900 Subject: [PATCH 12/22] Makefile: `make release` can work on non Windows machines now --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fcdc67d..f73e09c 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ manifest: make-scoop-manifest *-windows-*.zip > $(NAME).json release: - pwsh -Command "latest-notes.ps1" | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) + $(GO) run github.com/hymkor/latest-notes@master | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) get: $(GO) get -u From db91f2ddc0557e5953eb1d893b3042f2969b9989 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:19:20 +0900 Subject: [PATCH 13/22] Makefile: Remove `make get` entry --- Makefile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Makefile b/Makefile index f73e09c..f43dbd5 100644 --- a/Makefile +++ b/Makefile @@ -47,15 +47,6 @@ manifest: release: $(GO) run github.com/hymkor/latest-notes@master | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) -get: - $(GO) get -u - $(GO) get golang.org/x/sys@v0.30.0 -# $(GO) get golang.org/x/text@v0.22.0 - $(GO) get golang.org/x/term@v0.29.0 - $(GO) get golang.org/x/exp@v0.0.0-20240531132922-fd00a4e0eefc - $(GO) mod tidy -# cd "$(CURDIR)/cmd/sqlbless" && $(GO) get -u && $(GO) mod tidy - docs: minipage -outline-in-sidebar -readme-to-index README.md > docs/index.html minipage -outline-in-sidebar -readme-to-index README_ja.md > docs/index_ja.html From 6e10d45ccf1db9347883b5a1446beb6dbf34b908 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:42:11 +0900 Subject: [PATCH 14/22] Makefile: Improve `make build` --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f43dbd5..a461f06 100644 --- a/Makefile +++ b/Makefile @@ -21,15 +21,15 @@ VERSION:=$(shell git describe --tags 2>$(NUL) || echo v0.0.0) GOOPT:=-ldflags "-s -w -X github.com/hymkor/sqlbless.Version=$(VERSION)" EXE=$(shell $(GO) env GOEXE) -all: +build: $(GO) fmt ./... - $(SET) "CGO_ENABLED=0" && $(GO) build $(GOOPT) && $(GO) build -C "$(CURDIR)/cmd/sqlbless" -o "$(CURDIR)/$(NAME)$(EXE)" $(GOOPT) + $(SET) "CGO_ENABLED=0" && $(GO) build -C "$(CURDIR)/cmd/sqlbless" -o "$(CURDIR)" $(GOOPT) test: $(GO) test -v ./... _dist: - $(MAKE) all + $(SET) "CGO_ENABLED=0" && $(GO) build -C "$(CURDIR)/cmd/sqlbless" -o "$(CURDIR)" $(GOOPT) zip -9 $(NAME)-$(VERSION)-$(GOOS)-$(GOARCH).zip $(NAME)$(EXE) dist: From 6c9c2ef79c60536a8eed6b60aed1c0bca740c767 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:51:51 +0900 Subject: [PATCH 15/22] Makefile: `make manifest` uses `go run` instead of make-scoop-manifest.exe --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a461f06..98bb380 100644 --- a/Makefile +++ b/Makefile @@ -42,10 +42,10 @@ clean: $(DEL) *.zip $(NAME)$(EXE) manifest: - make-scoop-manifest *-windows-*.zip > $(NAME).json + $(GO) run github.com/hymkor/make-scoop-manifest@master -all *-windows-*.zip > $(NAME).json release: - $(GO) run github.com/hymkor/latest-notes@master | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) + $(GO) run github.com/hymkor/latest-notes@latest | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) docs: minipage -outline-in-sidebar -readme-to-index README.md > docs/index.html From c6db43ac96825d31ac0f810ac73d519ba5faaee3 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:54:45 +0900 Subject: [PATCH 16/22] Makefile: Use `go run` instead of `minipage.exe` --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 98bb380..7a4cf08 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ release: $(GO) run github.com/hymkor/latest-notes@latest | gh release create -d --notes-file - -t $(VERSION) $(VERSION) $(wildcard $(NAME)-$(VERSION)-*.zip) docs: - minipage -outline-in-sidebar -readme-to-index README.md > docs/index.html - minipage -outline-in-sidebar -readme-to-index README_ja.md > docs/index_ja.html + go run github.com/hymkor/minipage@latest -outline-in-sidebar -readme-to-index README.md > docs/index.html + go run github.com/hymkor/minipage@latest -outline-in-sidebar -readme-to-index README_ja.md > docs/index_ja.html .PHONY: all test dist _dist clean manifest release docs From 43e8b328c186e7f197cb5fb3e21f6f6398538b31 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:54:45 +0900 Subject: [PATCH 17/22] Makefile: Add `make readme` entry --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 7a4cf08..544a94e 100644 --- a/Makefile +++ b/Makefile @@ -51,4 +51,8 @@ docs: go run github.com/hymkor/minipage@latest -outline-in-sidebar -readme-to-index README.md > docs/index.html go run github.com/hymkor/minipage@latest -outline-in-sidebar -readme-to-index README_ja.md > docs/index_ja.html +readme: + go run github.com/hymkor/example-into-readme@latest + go run github.com/hymkor/example-into-readme@latest -target README_ja.md + .PHONY: all test dist _dist clean manifest release docs From 24a3dd671392e6a2b7a0abfeba50b624e308e8d0 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Thu, 12 Feb 2026 18:54:45 +0900 Subject: [PATCH 18/22] README: Add the badges linked to GitHub Repository --- README.md | 3 ++- README_ja.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00a399d..aeeb669 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ SQL-Bless =========== - + [![Go Test](https://github.com/hymkor/sqlbless/actions/workflows/go.yml/badge.svg)](https://github.com/hymkor/sqlbless/actions/workflows/go.yml) [![License](https://img.shields.io/badge/License-MIT-red)](https://github.com/hymkor/sqlbless/blob/master/LICENSE) [![Go Reference](https://pkg.go.dev/badge/github.com/hymkor/sqlbless.svg)](https://pkg.go.dev/github.com/hymkor/sqlbless) +[![GitHub](https://img.shields.io/badge/github-repo-blue?logo=github)](https://github.com/hymkor/sqlbless) **<English>** / [<Japanese>](./README_ja.md) diff --git a/README_ja.md b/README_ja.md index 82ccf52..61a9df4 100644 --- a/README_ja.md +++ b/README_ja.md @@ -1,10 +1,11 @@ SQL-Bless ========= - + [![Go Test](https://github.com/hymkor/sqlbless/actions/workflows/go.yml/badge.svg)](https://github.com/hymkor/sqlbless/actions/workflows/go.yml) [![License](https://img.shields.io/badge/License-MIT-red)](https://github.com/hymkor/sqlbless/blob/master/LICENSE) [![Go Reference](https://pkg.go.dev/badge/github.com/hymkor/sqlbless.svg)](https://pkg.go.dev/github.com/hymkor/sqlbless) +[![GitHub](https://img.shields.io/badge/github-repo-blue?logo=github)](https://github.com/hymkor/sqlbless) [<English>](./README.md) / **<Japanese>** From 7e41aff977be219b02ff73f2b110f4d81c1c21f9 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:35:02 +0900 Subject: [PATCH 19/22] Update Csvi to v1.22.0 > go1.20.14.exe get github.com/hymkor/csvi@latest go: upgraded github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad => v1.22.0 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5969e76..4ed0333 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/glebarez/go-sqlite v1.22.0 github.com/go-sql-driver/mysql v1.8.1 - github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad + github.com/hymkor/csvi v1.22.0 github.com/hymkor/go-multiline-ny v0.22.4 github.com/hymkor/go-shellcommand v0.0.2 github.com/hymkor/struct2flag v0.0.4 diff --git a/go.sum b/go.sum index c3a020a..10b6eec 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EO github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad h1:2b9yxzh3XErM2CNnsffNZavYBgE+tXuU5MMaP3g8Lss= -github.com/hymkor/csvi v1.21.3-0.20260208161734-1e6bcc5731ad/go.mod h1:zm4EcSzlGiiCtPWq77a+L3Q5IpJufIEX0q4iIGKXZhs= +github.com/hymkor/csvi v1.22.0 h1:fvUDS81s5LReepPjSI+/PWVmWlnxAYyL6SUILOOooO8= +github.com/hymkor/csvi v1.22.0/go.mod h1:zm4EcSzlGiiCtPWq77a+L3Q5IpJufIEX0q4iIGKXZhs= github.com/hymkor/go-multiline-ny v0.22.4 h1:Ag2rkBpDnr3jp+AHe1CuXSOQ4AQ8D0+gBNVf+BAX+/0= github.com/hymkor/go-multiline-ny v0.22.4/go.mod h1:v2lqQooHVAO53WICAIbgTn74bQtzsg4tFn29d+7JPwY= github.com/hymkor/go-shellcommand v0.0.2 h1:6+XG2h/9DGk5i3Oh4rU48z/nsPWx4Sp73s6OpryQtyw= From 343f851b40e806021ef833eedae2729bae856380 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:48:38 +0900 Subject: [PATCH 20/22] Bump to v0.27.4 --- release_note_en.md | 4 ++++ release_note_ja.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/release_note_en.md b/release_note_en.md index aa55be7..3946ccf 100644 --- a/release_note_en.md +++ b/release_note_en.md @@ -2,6 +2,10 @@ Release notes (English) ======================= ( **English** / [Japanese](release_note_ja.md) ) +v0.27.4 +------- +Feb 14, 2026 + - `edit` statement: Restore row deletion commands (`dd`, `dr`): Fixed a keybinding conflict that rendered row deletion unavailable. The `d` key has been unassigned from the "Set Null" function to restore the `dd` and `dr` commands, following specification changes in Csvi. Field Null assignment remains available via the `x` key. (#35) - `edit` statement: Prevent creation of empty lines at the end of the editable CSV content. ([csvi#79]) diff --git a/release_note_ja.md b/release_note_ja.md index 74f033a..be9f92f 100644 --- a/release_note_ja.md +++ b/release_note_ja.md @@ -2,6 +2,10 @@ Release notes (Japanese) ======================== ( [English](release_note_en.md) / **Japanese** ) +v0.27.4 +------- +Feb 14, 2026 + - `edit`文: 行削除コマンド(`dd`, `dr`)の復旧 レコードの削除操作(`dd`, `dr`)を再び利用可能にした。以前のバージョンでは、Null設定機能を `d` キーにも割り当てていたため、Csvi側の仕様変更(`D` の廃止)に伴い、行削除が実行できない状態になっていた。今回、`d` へのNull設定機能を解除することでこの競合を解消した。※Null設定機能は、引き続き `x` キーで利用可能。 (#35) - `edit`文: 編集対象の CSV データ末尾に空行が生成されないようにした。([csvi#79]) From 8e7011117f0c4600e7a192f2c292ba8d588f6d4c Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:54:58 +0900 Subject: [PATCH 21/22] Update the manifest of the scoop-installer for v0.27.4 --- sqlbless.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sqlbless.json b/sqlbless.json index 0ebecca..7258e89 100644 --- a/sqlbless.json +++ b/sqlbless.json @@ -1,16 +1,16 @@ { - "version": "0.27.3", + "version": "0.27.4", "description": "A safety-oriented terminal SQL client", "homepage": "https://github.com/hymkor/sqlbless", "license": "MIT License", "architecture": { "32bit": { - "url": "https://github.com/hymkor/sqlbless/releases/download/v0.27.3/sqlbless-v0.27.3-windows-386.zip", - "hash": "e12ae26143fcfc6c54ad98cd9b3b7e0e830999fe1dfb4124946d746530d4a002" + "url": "https://github.com/hymkor/sqlbless/releases/download/v0.27.4/sqlbless-v0.27.4-windows-386.zip", + "hash": "058859b5fc430b55c268616f9a1ede2916881448de3ee56eeae0132ddffa50b6" }, "64bit": { - "url": "https://github.com/hymkor/sqlbless/releases/download/v0.27.3/sqlbless-v0.27.3-windows-amd64.zip", - "hash": "702b1cdb20c86430f2b4743188c18821904d20c681f4be87f0b9bb2e3c6a0d7d" + "url": "https://github.com/hymkor/sqlbless/releases/download/v0.27.4/sqlbless-v0.27.4-windows-amd64.zip", + "hash": "8213a0ac3d96a2b2c111d75af6fdf61758e1703d9f882b0d11544d1d6a893343" } }, "bin": "sqlbless.exe", From 97dfdd6d286bde89e7e01fcd555534eac8314717 Mon Sep 17 00:00:00 2001 From: HAYAMA Kaoru <3752189+hymkor@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:55:11 +0900 Subject: [PATCH 22/22] Update GitHub Pages for v0.27.4 --- docs/index.html | 28 +++++++++++++++++++++------- docs/index_ja.html | 30 ++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/docs/index.html b/docs/index.html index 9a49822..6fbac77 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1140,11 +1140,12 @@

SQL-Bless

- +

Go Test License -Go Reference

- +Go Reference +GitHub

+

<English> / <Japanese>

SQL-Bless is a command-line database client similar to SQL*Plus, supporting multiple database systems.

It was designed with reliability and transparency in mind. @@ -1306,20 +1307,33 @@

Supported commands

Key -Bindings +Action -x,d -Set NULL to the current cell +r +Replace cell value (using built-in readline) + + +o +Append a new row + + +dd, dr +Delete the current row + + +x +Set the current cell to NULL q -Quit editor with confirmation to apply or discard changes +Quit editor (with apply/discard confirmation) +

Note: The D key is disabled to prevent accidental execution due to terminal escape sequence delays. Please use dd or dr instead.

  • Because the EDIT statement automatically generates SQL from data changed in the editor, it may not be able to properly represent SQL data for special types specific to individual databases. If you find it, we would appreciate it if you could contact us.

    diff --git a/docs/index_ja.html b/docs/index_ja.html index 90bbe19..7ce478b 100644 --- a/docs/index_ja.html +++ b/docs/index_ja.html @@ -1140,11 +1140,12 @@

    SQL-Bless

    - +

    Go Test License -Go Reference

    - +Go Reference +GitHub

    +

    <English> / <Japanese>

    SQL-Bless は、SQL*Plus に着想を得た、複数のデータベースエンジンに対応するコマンドライン用 SQL クライアントです。

    SQL-Bless は「安全性と再現性」を最優先に設計されています。 @@ -1303,21 +1304,34 @@

    ご連絡いただけるとたすかります。