new WOrmPostgresql(optopt) → {Object}
- Description:
操作資料庫(PostgreSQL)
本套件之主鍵欄位由opt.pk指定,預設為time,select以外之五函數皆以此欄位認定主鍵。 因主鍵得為承載業務語義之欄位(如時序資料之觀測時間),insert與save於輸入未帶有效主鍵值時不自動補值, 一律以reject回報;del亦不補值,該筆回ok:0與err。
- Source:
Parameters:
| Name | Type | Attributes | Default | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
opt |
Object |
<optional> |
{}
|
輸入設定物件,預設{} Properties
|
Returns:
回傳操作資料庫物件,各事件功能詳見說明
- Type
- Object
Methods
(async, static) createTable(cl, pkopt, arr) → {Promise}
- Description:
創建資料表 註: pk未給時採建構時之opt.pk。因insert與save倚賴主鍵之唯一約束達成原子性, 若給予與opt.pk不同之欄位,將建出其餘函數無法正確操作之資料表,故一般應留空或給予相同值
- Source:
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
cl |
String | 輸入資料表名字串 |
||
pk |
String |
<optional> |
opt.pk
|
輸入主鍵欄位名字串,預設為建構時之opt.pk |
arr |
Array | Object | 輸入數據物件陣列或數據物件 |
Returns:
回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
- Type
- Promise
(async, static) del(data) → {Promise}
- Description:
刪除數據
回傳陣列恆與輸入等長,各筆之n與nDeleted皆為主鍵命中筆數,值為0或1,未命中為0且屬正常結果。 判斷某筆是否真的被刪除一律以nDeleted為準。 未帶有效主鍵值者為該筆之輸入問題,回ok:0與err且不送查詢,不中斷其餘筆數, 以此與[主鍵未命中]之ok:1區辨。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
data |
Object | Array | 輸入數據物件或陣列 |
Returns:
回傳Promise,resolve回傳刪除結果陣列[{n,nDeleted,ok}],reject回傳錯誤訊息
- Type
- Promise
(async, static) delAll(findopt) → {Promise}
- Description:
刪除全部數據,需與del分開,避免未傳數據導致直接刪除全表
n與nDeleted皆為實際刪除筆數,不取全表筆數。find未給或為空物件時刪除全部數據, 條件無命中時回{n:0,nDeleted:0,ok:1},不視為錯誤。
- Source:
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
find |
Object |
<optional> |
{}
|
輸入刪除條件物件 |
Returns:
回傳Promise,resolve回傳刪除結果物件{n,nDeleted,ok},reject回傳錯誤訊息
- Type
- Promise
(async, static) insert(data, optionopt) → {Promise}
- Description:
插入數據,僅於主鍵不存在時寫入,已存在者跳過且不覆寫
預設回傳單一聚合物件,n為輸入筆數即本次嘗試插入之基準;nInserted為實際插入筆數, 全數已存在而nInserted為0屬正常結果,不視為錯誤。同批含重複主鍵時僅首筆計入nInserted。 因主鍵得承載業務語義,未帶有效主鍵值時不自動補值,一律以reject回報。
option.returnList為true時改回傳與輸入等長且保序之逐筆陣列,令呼叫端得知[是哪幾筆]為新數據, 而非僅知[有幾筆]。各元素之n恆為1、ok恆為1,因insert之任何錯誤皆屬整批性錯誤而reject, 故逐筆元素不出現ok:0與err;同批含重複主鍵者以首次出現者之nInserted為1,其餘為0。 兩種取值下之不變式為陣列長度等於輸入筆數,且nInserted為1者之筆數等於聚合模式之nInserted。
- Source:
Parameters:
| Name | Type | Attributes | Default | Description | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
data |
Object | Array | 輸入數據物件或陣列 |
||||||||||||
option |
Object |
<optional> |
{}
|
輸入設定物件,預設為{} Properties
|
Returns:
回傳Promise,resolve於returnList為false時回傳插入結果物件{n,nInserted,ok}, 為true時回傳逐筆結果陣列[{n,nInserted,ok}],reject回傳錯誤訊息
- Type
- Promise
(async, static) insertBulk(data) → {Promise}
- Description:
批次插入數據,全批視為一個單位,全部插入成功或一筆都不寫入
本函數非insert之加速版,兩者衝突政策不同:insert於主鍵已存在時跳過該筆且整批ok為1, 本函數則於任一筆之主鍵已存在時整批reject且不寫入任何一筆,同批含重複主鍵者亦視為衝突。 n為輸入筆數,nInserted為實際插入筆數且成功時恆等於n。 不提供逐筆結果,故不出現ok:0與err,需要逐筆處置者改用insert。 因主鍵得承載業務語義,未帶有效主鍵值時不自動補值,一律以reject回報, 且主鍵檢查於任何寫入之前一次完成,故整批reject時同批之有效筆數亦不會被寫入。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
data |
Object | Array | 輸入數據物件或陣列 |
Returns:
回傳Promise,resolve回傳插入結果物件{n,nInserted,ok},reject回傳錯誤訊息
- Type
- Promise
(async, static) save(data, optionopt) → {Promise}
- Description:
儲存數據,以主鍵為準更新既有數據,未給之欄位保留
回傳陣列恆與輸入等長,輸入單一物件亦回傳長度1之陣列。 各筆之n為主鍵命中筆數,值為0或1,命中(不論內容有無變更)或經插入而產生皆為1; nInserted與nModified恆同時出現,無對應行為時填0。 [內容相同]之判定基準為待寫入物件合併進現值後與現值相同,非待寫入物件與現值全等, 故只給部份欄位且該些欄位值皆與現值相同時,合併結果等於現值,nModified為0, 令nModified忠實反映資料庫端是否真的寫入。 因主鍵得承載業務語義,未帶有效主鍵值時不自動補值,一律以reject回報。
- Source:
Parameters:
| Name | Type | Attributes | Default | Description | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
data |
Object | Array | 輸入數據物件或陣列 |
||||||||||||
option |
Object |
<optional> |
{}
|
輸入設定物件,預設為{} Properties
|
Returns:
回傳Promise,resolve回傳儲存結果陣列[{n,nInserted,nModified,ok}],reject回傳錯誤訊息
- Type
- Promise
(async, static) select(findopt, orderopt) → {Promise}
- Description:
查詢數據
- Source:
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
find |
Object |
<optional> |
{}
|
輸入查詢條件物件 |
order |
Object |
<optional> |
{}
|
輸入排序條件物件 |
Returns:
回傳Promise,resolve回傳數據,reject回傳錯誤訊息
- Type
- Promise
(async, static) selectByPk(pk) → {Promise}
- Description:
由主鍵查詢單筆數據,因直接由資料表主鍵索引取值,不需如select提取數據至前端再處理,故數據量大時效能較佳 註: 本套件之主鍵欄位由建構時之opt.pk指定,預設為time
主鍵未命中或主鍵值無效皆回傳null而不reject,命中之判定基準與insert、save、del內對既有數據之認定一致。 主鍵值之型別與欄位不符時PostgreSQL回報22P02或22007,亦屬主鍵值無效而回傳null。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
pk |
String | Number | Date | 輸入主鍵值,即數據之主鍵欄位值 |
Returns:
回傳Promise,resolve回傳數據物件,若無此主鍵則回傳null,reject回傳錯誤訊息
- Type
- Promise