(クラス)
1 セットのデータベースを構成し、それぞれのデータベースがテーブルのコレクションを持っているようなファイル セットへの接続を表わすクラスです。
説明
FileConnection は、いくつかの CSV ファイルを使用して、コレクション データベースを表わします。データとメタデータの両方が CSV 形式で格納されます。スプレッドシートを使用してメタデータを作成、編集したり、アプレットを作成して、ファイルを作成、管理できます。一般的に、接続を通じてアクセスできるファイルはすべて 1 つのディレクトリに格納します。
メタデータ ファイルの 1 つがデータベースのルートとして機能しますが、それは一般的に connection.csv という名前です。このファイルには、接続を通じてアクセスできるテーブルごとに 1 つのレコードが含まれます。接続を作成するには、このファイルの URL が使用されます。
connection.csv ファイル内のレコードでは、それぞれ 1 つのテーブルを記述します。
Connection サブクラスでは、接続で使用できるデータベース数にも、また、それぞれのデータベースのテーブル数にも、制限はありません。そのため、
connection.csv ファイルには、
"database" と
"table" という名前の 2 つのキー フィールドがあります。テーブルのその他の列には、テーブルのメタデータの位置、テーブルのデータの位置、データ ファイル内のヘッダー行数、ファイルに使用される文字エンコーディングが示されます。これらの列はそれぞれ
"fields-url"、
"data-url"、
"header-line-count"、および
"character-encoding" という名前です。定数
FileConnection.table-fields は、データベース ルート ファイルの列を定義します。終わりには
"cached-fields" というさらにもう 1 つの列があります。この列は読み取られたり、書き込まれたりすることはありませんが、実行時にテーブル メタデータを格納するために内部的に使用されます。
データベース ルート ファイルのレコードの例 :info,contact,info-contact.csv,info-contact-fields.csv,2,,
ここでは、テーブルは "contact" という名前で "info" というデータベースにあります。データは、2 行のヘッダーを持つファイル "info-contact.csv" に格納されます。このテーブルのフィールドは、ファイル "info-contact-fields.csv" に記述されています。文字エンコーディングは指定されていないので、既定値 ("utf8") が使用されます。
ここで 1 つのテーブルを考えてみます。データベース名とテーブル名を指定すると、テーブルを記述するレコードがルート インデックス ファイル内で見つかります。このメタデータ ファイルは、テーブル内のフィールド (または列) を記述します。データ ファイルにはテーブル データが含まれます。
ConnectedFileRecordSet を作成するのに必要なのは、これだけです。
アプリケーションで実行時にこうしたメタデータ ファイルを作成する必要がある場合、テーブルの列を記述する
RecordFields が指定されていると、メソッド
FileConnection.write-metadata を使用して作成できます。多くのアプリケーションでは、データ モデルは静的であり、こうしたファイルはソース ファイルのように扱うことができます。このようなファイルをスプレッドシートまたはテキスト エディタで作成し、アプリケーション設計に応じて変更できます。
メタデータ ファイルの例 :
Name,Caption,Domain,Default,Index,Modifiable?,Nullable?,
name,Name,string,(name),none,true,false
e-mail,e-mail,string,,none,true,true
work-phone,Work Phone,string,,none,true,true
home-phone,Home Phone,string,,none,true,true
最初の行は常にヘッダー行です。これは、スプレッドシートを使用したファイルの維持を簡単にするためのものです。残りの各行は、それぞれデータ ファイルの 1 つのフィールドまたは列を記述します。
このファイルの列は、
RecordField コンストラクタへのパラメータに対応しています。
"default-value" 列は、
Domain を使って解析されます。列はどのようなデータ型でも保持するよう定義できますが、ファイルには文字列しか書き込めないので、これが必要になります。
default: | インデックス ファイルの URL が指定されていると、ファイル データベース接続を作成します。 |
from-url: | インデックス ファイルの URL が指定されていると、ファイル ベースのデータベース接続を作成します。 |
コンストラクタ protected | {FileConnection.from-url} |
フィールド protected FileConnection.cached-database-names:
StringArray ={StringArray}
フィールド protected FileConnection.cached-table-names:{
HashTable-of String, StringArray} ={new {HashTable-of String, StringArray}}
フィールド public-get private-set FileConnection.character-encoding:
CharEncoding ="utf8"
domain-table: | 文字列から、この接続を通じてアクセスされるファイルによって使用されるドメインへのマッピングです。 |
フィールド public-get protected-set FileConnection.domain-table:
DomainTable
table-rs: | このレコードセットには、この接続で認識されるデータベースおよびテーブルに関する情報が含まれます。 |
public constant FileConnection.column-fields:
RecordFields ={RecordFields
{RecordField "name",
domain = String, caption = "Name",
index-type = RecordFieldIndexType.unique
},
{RecordField "caption",
domain = String, caption = "Caption",
nullable? = true
},
{RecordField "domain",
domain = String, caption = "Domain"
},
{RecordField "default-value",
domain = String, caption = "Default",
nullable? = true
},
{RecordField "index-type",
domain = RecordFieldIndexType, caption = "Index",
nullable? = true
},
{RecordField "modifiable?",
domain = bool, caption = "Modifiable?",
nullable? = true
},
{RecordField "nullable?",
domain = bool, caption = "Nullable?",
nullable? = true
}
}
table-fields: | この接続で認識されるデータベースおよびテーブルを表わすために使用されるテーブル内のフィールドです。 |
public constant FileConnection.table-fields:
RecordFields ={RecordFields
{RecordField "database",
domain = String, caption = "Database"
},
{RecordField "table",
domain = String, caption = "Table"
},
{RecordField "data-url",
domain = String, caption = "Location"
},
{RecordField "fields-url",
domain = String, caption = "Fields Location",
nullable? = true
},
{RecordField "header-line-count",
domain = int, caption = "Header Lines"
},
{RecordField "character-encoding",
domain = String, caption = "Encoding"
},
{RecordField "cached-fields",
domain = {TransientAnyDomain}, caption = "Fields",
nullable? = true
}
}
protected | {FileConnection.data-url url-spec:String}:Url |
public | {FileConnection.ensure-metadata-updated}:void |
public | {FileConnection.ensure-updated}:void |
reset: | Connection を初期状態に戻します。 |
public | {FileConnection.reset}:void |
public | {FileConnection.table-exists?}:bool |
public | {FileConnection.write-metadata}:void |
(ファクトリ)
インデックス ファイルの URL が指定されていると、ファイル データベース接続を作成します。
説明
この URL の接続が既に作成されている場合に、同じインスタンスが返されるよう接続が記録されます。メタデータ ファイルを更新する場合は、必ず
FileConnection.reset を呼び出して、キャッシュをリフレッシュしてください。
url: この接続のインデックス ファイルの場所です。
character-encoding: インデックス ファイルが使用する文字エンコーディングです。
domain-table: メタデータ ファイルに格納されているドメイン名文字列から、この接続で作成されたレコードセット内にあって実行時に使用される
Domain オブジェクトへのマッピングです。
(コンストラクタ)
protected | {FileConnection.from-url} |
インデックス ファイルの URL が指定されていると、ファイル ベースのデータベース接続を作成します。
(フィールド)
protected FileConnection.cached-database-names:
StringArray ={StringArray}
この接続を使って利用できるデータベース名のリスト。
説明
(フィールド)
protected FileConnection.cached-table-names:{
HashTable-of String, StringArray} ={new {HashTable-of String, StringArray}}
キャッシュに格納された、各データベースで見つかったテーブルのリスト。
説明
サーバー要求を最小限に抑えるため、指定データベースで見つかったテーブルのリストがこのハッシュテーブルにキャッシュされます。各データベースにアクセスするたびに、キャッシュされる情報も増えていきます。
(フィールド)
public-get private-set FileConnection.character-encoding:
CharEncoding ="utf8"
この FileConnection のメタデータ ファイルに使用される文字エンコーディングです。
(フィールド)
public-get protected-set FileConnection.domain-table:
DomainTable 文字列から、この接続を通じてアクセスされるファイルによって使用されるドメインへのマッピングです。
(フィールド)
このレコードセットには、この接続で認識されるデータベースおよびテーブルに関する情報が含まれます。
(クラス定数)
public constant FileConnection.column-fields:
RecordFields ={RecordFields
{RecordField "name",
domain = String, caption = "Name",
index-type = RecordFieldIndexType.unique
},
{RecordField "caption",
domain = String, caption = "Caption",
nullable? = true
},
{RecordField "domain",
domain = String, caption = "Domain"
},
{RecordField "default-value",
domain = String, caption = "Default",
nullable? = true
},
{RecordField "index-type",
domain = RecordFieldIndexType, caption = "Index",
nullable? = true
},
{RecordField "modifiable?",
domain = bool, caption = "Modifiable?",
nullable? = true
},
{RecordField "nullable?",
domain = bool, caption = "Nullable?",
nullable? = true
}
}
この接続で認識される一部のテーブルのフィールドを表わすために使用されるテーブル内のフィールドです。
(クラス定数)
public constant FileConnection.table-fields:
RecordFields ={RecordFields
{RecordField "database",
domain = String, caption = "Database"
},
{RecordField "table",
domain = String, caption = "Table"
},
{RecordField "data-url",
domain = String, caption = "Location"
},
{RecordField "fields-url",
domain = String, caption = "Fields Location",
nullable? = true
},
{RecordField "header-line-count",
domain = int, caption = "Header Lines"
},
{RecordField "character-encoding",
domain = String, caption = "Encoding"
},
{RecordField "cached-fields",
domain = {TransientAnyDomain}, caption = "Fields",
nullable? = true
}
}
この接続で認識されるデータベースおよびテーブルを表わすために使用されるテーブル内のフィールドです。
(メソッド)
この接続での使用に適した ConnectedRecordSet のサブクラスを作成して返します。
説明
query: テーブル名です(SQL クエリはこのサブクラスではサポートされていません)。
request-modifiable?: true の場合、変更可能なレコードセットを返す処理が行われます。
size-limit: このサブクラスは size-limit パラメータを無視します。
(メソッド)
protected | {FileConnection.data-url url-spec:String}:Url |
データが格納されているファイルの URL を返します。
(メソッド)
public | {FileConnection.ensure-metadata-updated}:void |
指定データベースに関連するメタデータがクライアント上でも現在値であることを確認します。
オーバーライド
このメソッドは、{self.cached-table-names.key-exists? database-name} が false の場合のみ呼び出されます。2 次的な効果として、データベース名とそのテーブル名の StringArray の間の関連付けが self.cached-table-names に追加されます。
データベース単位で他のサーバー メタデータをキャッシュする
Connection サブクラスの場合、このスーパークラスの実装に加えてこのメソッドが呼び出されたときにメタデータが更新されることになります。
(メソッド)
public | {FileConnection.ensure-updated}:void |
データベース サーバーからキャッシュされたメタデータを必ず利用できるようにします。
オーバーライド
サーバー メタデータが既にキャッシュされている場合、何もせずに復帰します。その他の場合はサーバーにメタデータを要求してこれをキャッシュします。メタデータを返すさまざまな操作ではこれを最初に呼び出して、メタデータが利用可能であることを確認してください。メタデータのキャッシングにより、サーバーへのむだな要求を回避することができます。
(メソッド)
(メソッド)
この接続から利用できるデータベースのリストを取得します。
注意事項
サーバーとのトラフィックを最小限に抑えるため、このゲッターはキャッシュされている情報を返します。キャッシュをクリアしてサーバーから情報を強制的に更新するには
Connection.reset を呼び出します。
(メソッド)
データベースと query が指定されていると、テーブルの列を記述する RecordFields オブジェクトを返します。クエリは、FileConnection の単純なテーブル名とする必要があります。
query: テーブル名です(SQL クエリはこのサブクラスではサポートされていません)。
(メソッド)
(メソッド)
(メソッド)
public | {FileConnection.reset}:void |
Connection を初期状態に戻します。
説明
このメソッドはクライアント側の接続でキャッシュされている情報をすべて削除し、メタデータが次に必要になったときにサーバーから取得されるようにします。
(メソッド)
public | {FileConnection.table-exists?}:bool |
指定データベースに指定テーブルが存在する場合は true を返します。
(メソッド)
public | {FileConnection.write-metadata}:void |
CsvRecordSet を記述する CSV ファイルを作成します。
説明
CSV ファイルが指定された
url に作成され、
record-fields 内の各フィールドを記述するレコードが
FileConnection で認識される形式で書き込まれます。
url にファイルが既に存在している場合は、上書きされます。