機能 #13
openv3.1.1 もしくはv3.2として
Added by keiji ono 8 months ago. Updated 3 months ago.
0%
Description
既存のtableに対して、"ji/ju/jd"の各apiを後付で作成できるようにしよう
- table一覧から該当tableを選択
- "create apis"で各apiを作成
Updated by keiji ono 7 months ago
まずは開発環境のアップグレード
Ubuntu 22 -> 24
onoke@onoke-OptiPlex-990:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.3 LTS Release: 24.04 Codename: noble
onoke@onoke-OptiPlex-990:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy
Updated by keiji ono 5 months ago
| smallint | int16 |
| integer | int32 |
| bigint | int64 |
| numeric | decimals.decimal |
| numeric | decimals.decimal |
| real | float32 |
| money | string |
| varchar | string |
| date | dates.date |
| time withot time zone | dates.time |
| json | string |
| jsonb | string |
| xml | string |
| boolean | bool |
json,jsonb,xmlなどはstringでデータ取得できるけど、更新はstringではできない。さてどうしよう。
jetelina_user_tableの例でいくと
jsonbのinsertはこれ
insert_basic_st = """
insert into jetelina_user_table (username,user_info,generation) values('$username','{"register_date":"$registerDate","inviter":$inviterId}','$thisuserGeneration');
"""
updateはこれ
sql = """
update jetelina_user_table set user_info = user_info || '{"$key":"$value"}' where user_id=$uid;
"""
selectはこれ
sql = """
SELECT
jsonb_object_keys (user_info) as user_info
from jetelina_user_table
where user_id=$uid;
"""
このselectでuser_infoの中のkey名が全て取れる。それをdicとして持って、各keyをselectする関数は、数は多いけど作れるなぁ。でもそれはkeyを引数とする汎用関数でいいよなぁ。
sql = """
select user_info->'$key' as $key from jetelina_user_table where user_id=$uid;
"""
Updated by keiji ono 5 months ago
json/jsonb/xmlとかはString扱いになっているから、Stringで出し入れでもいいかなぁ。
要素の挿入/更新/削除はアプリ側でやってもらってもいいよね。json/xmlで取り扱うのはjsで全然簡単だし。
migrationとしてはカラムのデータ型は操作しないからいいかな。
xmlもjsonも普通に文字列扱いでsqlでupdateできる。だからまっいいか。
update mig_dum set xmlstr = '<xml>xml data</xml>';
注意書きとしては「xml,json,jsonbは文字列扱いするから、個別のデータ取得や更新はアプリでやってね。DBには全文入れだからね」と。
Updated by keiji ono 5 months ago
postgresでのmigrationでjt_id,jetelina_delete_flgの追加は下記とする
jt_idの追加 alter table <table name> add column <table name>_jt_id serial primary key; jetelina_delete_flgの追加 alter table <table name> add column jetelina_delete_flg integer; alter table <table name> alter column jetelina_delete_flg set default 0; update <table name> set jetelina_delete_flg=0;処理手順はこう
- jetelina_delete_flgカラムがないtableをリストアップする
- ユーザがtableリストからmigrationするtableを選択する
- 指定されたtableのmigrationを実行する
1 -> get i/fでPgDBController.mig_getTableList()を実行 2 -> 表示されたtableリストから処理対象を選択、複数可 3 -> PgDBController.mig_execute_migration()を実行
- htmlはconfigration parameter表示パネルと同じ属性だがid=migration_table_listを新たに設ける
<div id="migration_table_list" ....> <label>Migrtion-able table list</label> <div name="table_list"> </div> </div> - jsのget/postは専用のget/post関数を用意する
in jetelinalib.js const getMigAjax = () => {} const postMigAjax = () => {} const showMigTableList = (b) => {}
Updated by keiji ono 4 months ago
3/18 PostgreSQLについてのMigration処理は大体終了した感じ。
Migration tablse for PostgreSQLの一旦整理
- PgMigration.jl
OK: 対象tableの取得と*_jt_id, jetelina_delete_flg挿入関数 # migration in database table @jdic func-db-mig-show-tables:"show migration list","show migration table","show mig table","show mig list","open migration list","open migration table","open mig table","open mig list" @jdic func-db-mig-hide-tables:"hide migration list","hide migration table","hide mig table","hide mig list","close migration list","close migration table","close mig table","close mig list" (2)ji/ju/jd apiの作成 3/12 (1)既存カラム名をjetelina風(<table name>_<column name>)に変更 カラムのrenameはひとつひとつやらないといけないらしい。それはそれでもいいのだけれど「既存のtable」だから他に既存のプログラムがあることを想定するとカラム名の変更はやって欲しくないことの一つになるかもしれない。なのでこれはちょっと保留しておこうと思う。やっぱり必要でしょうとなったらちょっと考えよう。 (3)js作成時の関数 migration後のtableはcsv upしたモノと同じなので既存のアルゴリズムで同じように扱うので、これは必要ない。 YET: - jetelinalib.js
OK: 対象table取得とリスト画面の表示/非表示 (1)migration実行tableの指定と実行 (2)migration成功時のtable/api list更新 YET:
2(1)
functionpanel.js functionPanelFunctions() case SELECTTEM
指定した名前でtable list/api listを検索するところで、最初にmigration listを実行するようにした。ただし、migration panelが開いているとき限定。これにともない、各処理が同じなのでjetelinalib.jsにfindItemnameFromlist(tag,name)を追加し共通関数化した。
3/4 大体いいかんじ。YET->OKに移行。
1(2)
PgDBController.dataInsertFromCSV()を参考に別関数でji/ju/jdを作成する。sql文作成からリスト追加まで.dataInsertFromCSV()と同じようにやればいい。
jsは他のtableと同じ処理なのでmigration用に追加することはない。
今更で当たり前のことだけど、migration実行はadmin権限が必要で、もちろんstich wortも必須
[制限事項] Migration tableは既存データがあることが条件になる。既存データがないとカラム表示ができないから。
Updated by keiji ono 3 months ago
- jt_id,jetelina_delete_flg columnsの削除
- 各カラム名からtable名を取り除く <table>_<original column> -> <original_column>
- api削除
この機能はcsv->table化したオリジナルのJetelina tableをも「戻す」ことができる、でも意味あるんだろうか? これは疑問だな。マイグレを元に戻すというだけを謳おう。
3/29 MySQL/PostgreSQL revert_migration() done
Updated by keiji ono 3 months ago
migrationの仕上げとして、コマンドを見直そう
@jdic func-db-mig-exec-cmd:"do migration","do mig" @jdic func-db-mig-cancel-cmd:"cancel migration"
これでどうでしょうか
@jdic func-db-mig-exec-cmd:"do migration","do mig","execute migration","exec mig","exe mig","exec migration","exec table migration","exe table mig","execute table migration" @jdic func-db-mig-revert-cmd:"revert migration","revert mig","revert migration table","revert table","do revert","execute revert","exec revert"
Updated by keiji ono 3 months ago
環境アップデート
branch: v3.1.1-envcheck
アップデート後の動作確認 → なんかいい感じ。MacではOKなので次はLinuxで確認してOKなら大丈夫。
Before updating Project Jetelina v3.1.1 Status `~/Desktop/Jetelina/Jetelina/Project.toml` ⌃ [336ed68f] CSV v0.10.15 [5d742f6a] CSVFiles v1.0.2 [aaaa29a8] Clustering v0.15.8 [a93c6f00] DataFrames v1.8.1 [8bb1440f] DelimitedFiles v1.9.1 ⌃ [c43c736e] Genie v5.34.0 [03cc5b98] GenieSession v1.1.2 [5c4fdc26] GenieSessionFileSession v1.1.0 [6d011eab] Inflector v1.1.0 [c8e1da08] IterTools v1.10.0 ⌃ [682c06a0] JSON v1.3.0 [0f8b85d8] JSON3 v1.14.3 [194296ae] LibPQ v1.18.0 [e6f89c97] LoggingExtras v1.2.0 ⌃ [739be429] MbedTLS v1.1.9 ⌃ [4fe8b98c] Mongoc v0.10.0 ⌃ [39abe10b] MySQL v1.4.7 ⌃ [91a5bcdd] Plots v1.41.2 ⌃ [ce6b1742] RDatasets v0.7.7 [0cf705f9] Redis v3.0.0 ⌃ [295af30f] Revise v3.12.3 ⌃ [0aa819cd] SQLite v1.6.1 ⌃ [340e8cb6] SearchLight v2.11.1 [21a827c4] SearchLightSQLite v2.2.2 ⌃ [2913bbd2] StatsBase v0.34.8 [bd369af6] Tables v1.12.1 [ade2ca70] Dates v1.11.0 [56ddb016] Logging v1.11.0 Info Packages marked with ⌃ have new versions available and may be upgradable.
after updating [336ed68f] CSV v0.10.16 [5d742f6a] CSVFiles v1.0.2 [aaaa29a8] Clustering v0.15.8 [a93c6f00] DataFrames v1.8.1 [8bb1440f] DelimitedFiles v1.9.1 [c43c736e] Genie v5.35.12 [03cc5b98] GenieSession v1.1.2 [5c4fdc26] GenieSessionFileSession v1.1.0 [6d011eab] Inflector v1.1.0 [c8e1da08] IterTools v1.10.0 [682c06a0] JSON v1.5.0 [0f8b85d8] JSON3 v1.14.3 [194296ae] LibPQ v1.18.0 [e6f89c97] LoggingExtras v1.2.0 [739be429] MbedTLS v1.1.10 [4fe8b98c] Mongoc v0.10.1 [39abe10b] MySQL v1.5.1 [91a5bcdd] Plots v1.41.6 [ce6b1742] RDatasets v0.8.1 [0cf705f9] Redis v3.0.0 [295af30f] Revise v3.14.1 [0aa819cd] SQLite v1.8.0 [340e8cb6] SearchLight v2.11.2 [21a827c4] SearchLightSQLite v2.2.2 [2913bbd2] StatsBase v0.34.10 [bd369af6] Tables v1.12.1 [ade2ca70] Dates v1.11.0 [56ddb016] Logging v1.11.0