Project

General

Profile

Actions

機能 #13

open

v3.1.1 もしくはv3.2として

Added by keiji ono 8 months ago. Updated 3 months ago.

Status:
新規
Priority:
通常
Assignee:
-
Start date:
11/09/2025
Due date:
% Done:

0%

Estimated time:

Description

既存のtableに対して、"ji/ju/jd"の各apiを後付で作成できるようにしよう

  1. table一覧から該当tableを選択
  2. "create apis"で各apiを作成

Related issues 4 (4 open0 closed)

Related to 機能 #11: v3.1のivm機能実装新規10/20/2025

Actions
Related to 作業 #23: APIリストを常にクリーンな状態に保つ新規04/03/2026

Actions
Related to 作業 #24: Table変更時のAPIの再作成新規04/05/2026

Actions
Related to 作業 #22: mysqlのjetelina database作成新規03/20/2026

Actions
Actions #1

Updated by keiji ono 8 months ago

js api作成時に該当ivm tableがtable listに表示されるチャンスがある。ref #11 comment#11

Actions #2

Updated by keiji ono 8 months ago

  • Related to 機能 #11: v3.1のivm機能実装 added
Actions #3

Updated by keiji ono 7 months ago

  • Subject changed from v3.2として to v3.1.1 もしくはv3.2として
Actions #4

Updated by keiji ono 7 months ago

登録ユーザ一覧とか必要じゃね?

Actions #5

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

Actions #6

Updated by keiji ono 5 months ago

RDBMSの実装可能なカラムデータ形式がJuliaではどう取得されるか検証してみよう。
既存Tableのカラムタイプを取得するプログラムはv3.1までにはないから新規だな。

Postgresの場合

LibPQ.column_types
column_types(jl_result::Result) -> Vector{Type}

Return the corresponding Julia types for each column in the result.

Actions #7

Updated by keiji ono 5 months ago

postgres databype -> julia data type
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;
    """ 
Actions #8

Updated by keiji ono 5 months ago

json, jsonbについて

jsonは文字列でDBに格納、jsonbはバイナリでDBに格納。
jsonはpostgres/mysql共にサポートする。
jsonbはpostgresでサポートする。

Actions #9

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には全文入れだからね」と。

Actions #10

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;

処理手順はこう
  1. jetelina_delete_flgカラムがないtableをリストアップする
  2. ユーザがtableリストからmigrationするtableを選択する
  3. 指定されたtableのmigrationを実行する
    1 -> get i/fでPgDBController.mig_getTableList()を実行
    2 -> 表示されたtableリストから処理対象を選択、複数可
    3 -> PgDBController.mig_execute_migration()を実行
    
html/js側はとりあえずこれでどうかな
  1. htmlはconfigration parameter表示パネルと同じ属性だがid=migration_table_listを新たに設ける
         <div id="migration_table_list" ....>
             <label>Migrtion-able table list</label>
             <div name="table_list">
             </div>
         </div>
    
  2. jsのget/postは専用のget/post関数を用意する
        in jetelinalib.js
          const getMigAjax = () => {}
          const postMigAjax = () => {}
          const showMigTableList = (b) => {}
    
Actions #11

Updated by keiji ono 5 months ago

mysqlでもpostgresと同じようにカラム追加するだけでいけるかな

    column_str = string(keyword2, " integer not null auto_increment primary key,") # using for creating table

3/25 migration for MySQL has done

Actions #12

Updated by keiji ono 4 months ago

3/18 PostgreSQLについてのMigration処理は大体終了した感じ。

Migration tablse for PostgreSQLの一旦整理

  1. 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:
    
  2. 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は既存データがあることが条件になる。既存データがないとカラム表示ができないから。

Actions #13

Updated by keiji ono 3 months ago

migrationしたtableを元に戻す機能もあったら良くね?
  1. jt_id,jetelina_delete_flg columnsの削除
  2. 各カラム名からtable名を取り除く <table>_<original column> -> <original_column>
  3. api削除

この機能はcsv->table化したオリジナルのJetelina tableをも「戻す」ことができる、でも意味あるんだろうか? これは疑問だな。マイグレを元に戻すというだけを謳おう。

3/29 MySQL/PostgreSQL revert_migration() done

Actions #14

Updated by keiji ono 3 months ago

tableをcsvファイルにエクスポートする機能も、なんかアリっぽい気がするが「実際そんなの要る?」って感じ。
エクスポートしたけりゃオリジナルのDB機能にいくらでもあるからそれを使えばいいだろうっ、てことでこの機能は却下。
いつか思い出したように「要る?」ってこともあり得るので、ここでメモして残しておく。却下!

Actions #15

Updated by keiji ono 3 months ago

マイグレーション機能の説明ページが要るな。
  • 新規に説明ページを作成. "table-migration"
  • コマンドリストに追記
  • ガイド画面に新規ページのリンクを追加 <- "M14: migrate&revert table"
  • HPのトップ画面のリリース情報を更新
  • もちろんtar ballも差し替え

リリースはオランダに会社を立ててからにするから、それまでに準備できていればヨシだな。wordpress上で更新しても公開しなければいいだろう。
7月までにやればいいや。

Actions #16

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" 

Actions #17

Updated by keiji ono 3 months ago

いろいろと操作しているとAPIだけ残ってしまうことがある。
tableはAPIの存在にかかわらずdropできるのに、APIは対応するtableがないと削除できない。
これだといつまでたってもゴミとして残るので、強制的に削除できるようにしたい。

コマンドによる強制削除だと誤操作とかありそう。再作成となるとtable操作からやらないといけなくなるのでこれもユーザビリティに問題がありそう。
なので、jetelinaが自動的にクリーン状態に保つということでどうだろう。
ちょっと大きめの項目になりそうなので別チケットにする。 #23

Actions #18

Updated by keiji ono 3 months ago

  • Related to 作業 #23: APIリストを常にクリーンな状態に保つ added
Actions #19

Updated by keiji ono 3 months ago

  • 新バージョンリリース前に、lib関係をアップデートする。
  • v3.0ではjuliav10.0までしか動かなかったので今回はどのバージョンで動くか確認する

これらは危ない操作なのでgithubブランチは別のものでやろう

Actions #20

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
Actions #21

Updated by keiji ono 3 months ago

環境アップデート続き
julia v1.11.7 -> 1.11.9 OK
v1.12.2 NG いくつかのlib packageがprecompileでエラーになる。Genieがエラーになるのは致命的

Actions #22

Updated by keiji ono 3 months ago

  • Related to 作業 #24: Table変更時のAPIの再作成 added
Actions #23

Updated by keiji ono 3 months ago

  • Related to 作業 #22: mysqlのjetelina database作成 added
Actions

Also available in: Atom PDF