FileConnection (クラス)
public FileConnection {inherits Connection}
パッケージ: CURL.DATA-ACCESS.CONNECTED

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 を使用して作成できます。多くのアプリケーションでは、データ モデルは静的であり、こうしたファイルはソース ファイルのように扱うことができます。このようなファイルをスプレッドシートまたはテキスト エディタで作成し、アプリケーション設計に応じて変更できます。
定数 FileConnection.column-fields は、テーブル メタデータ ファイルの列を定義します。
メタデータ ファイルの例 :
            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 を使って解析されます。列はどのようなデータ型でも保持するよう定義できますが、ファイルには文字列しか書き込めないので、これが必要になります。
ドメイン列も特別に扱われます。ファイルの値は、単なる文字列で、これを使用して実行時に FileConnection.domain-table 内でその文字列を検索し、実際の Domain を見つけることができます。既定のテーブルには標準ドメインが含まれていますが、独自のドメインを使用する必要がある場合は、自身で DomainTable を作成できます。
要約すると、FileConnection を使用するには、接続を通じてアクセスされるデータベースおよびテーブルを記述するファイルを作成する必要があります。作成後は、アプレットでデータベース テーブルを使用できます。データのアクセスと変更に使用できる ConnectedFileRecordSet をインスタンス化するには、FileConnection.create-record-set を使用します。

コンストラクタ
default:インデックス ファイルの URL が指定されていると、ファイル データベース接続を作成します。
ファクトリ public {FileConnection.default
url:Url,
character-encoding:CharEncoding = "utf8",
domain-table:DomainTable = default-domain-table
}:FileConnection
from-url:インデックス ファイルの URL が指定されていると、ファイル ベースのデータベース接続を作成します。
コンストラクタ protected {FileConnection.from-url
url:Url,
character-encoding:CharEncoding = "utf8",
domain-table:DomainTable = default-domain-table
}

プロパティ
cached-database-names:この接続を使って利用できるデータベース名のリスト。
フィールド protected FileConnection.cached-database-names:StringArray ={StringArray}
cached-table-names:キャッシュに格納された、各データベースで見つかったテーブルのリスト。
フィールド protected FileConnection.cached-table-names:{HashTable-of String, StringArray} ={new {HashTable-of String, StringArray}}
character-encoding:この FileConnection のメタデータ ファイルに使用される文字エンコーディングです。
フィールド public-get private-set FileConnection.character-encoding:CharEncoding ="utf8"
domain-table:文字列から、この接続を通じてアクセスされるファイルによって使用されるドメインへのマッピングです。
フィールド public-get protected-set FileConnection.domain-table:DomainTable
table-rs:このレコードセットには、この接続で認識されるデータベースおよびテーブルに関する情報が含まれます。
フィールド protected FileConnection.table-rs:CsvRecordSet
プロパティ 継承 Connection: url

クラス変数と定数
column-fields:この接続で認識される一部のテーブルのフィールドを表わすために使用されるテーブル内のフィールドです。
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 } }

メソッド
create-record-set:この接続での使用に適した ConnectedRecordSet のサブクラスを作成して返します。
public {FileConnection.create-record-set
database-name:String,
query:String,
request-modifiable?:bool = false,
size-limit:int = -1,
...:EventHandler
}:ConnectedFileRecordSet
data-url:データが格納されているファイルの URL を返します。
protected {FileConnection.data-url url-spec:String}:Url
ensure-metadata-updated:指定データベースに関連するメタデータがクライアント上でも現在値であることを確認します。
public {FileConnection.ensure-metadata-updated
database-name:String
}:void
ensure-updated:データベース サーバーからキャッシュされたメタデータを必ず利用できるようにします。
public {FileConnection.ensure-updated}:void
get-character-encoding:ConnectedFileRecordSet が格納されているファイルに使用される文字エンコーディングを返します。インデックス ファイルでエンコーディングが指定されていない場合、接続のエンコーディングが使用されます。
protected {FileConnection.get-character-encoding r:Record}:CharEncoding
get-database-names:この接続から利用できるデータベースのリストを取得します。
public {FileConnection.get-database-names}:StringArray
get-fields:データベースと query が指定されていると、テーブルの列を記述する RecordFields オブジェクトを返します。クエリは、FileConnection の単純なテーブル名とする必要があります。
public {FileConnection.get-fields
database-name:String,
query:String
}:RecordFields
get-metadata:データベース名とテーブル名で指定されたとおりに、ConnectedFileRecordSet のメタデータを返します。
public {FileConnection.get-metadata
database-name:String,
query:String
}:( fields:RecordFields, data-url:Url, hlc:int, ce:CharEncoding )
get-tables:指定データベースのテーブルのリストを取得します。
public {FileConnection.get-tables database-name:String}:StringArray
reset:Connection を初期状態に戻します。
public {FileConnection.reset}:void
table-exists?:指定データベースに指定テーブルが存在する場合は true を返します。
public {FileConnection.table-exists?
database-name:String,
table:String
}:bool
write-metadata:CsvRecordSet を記述する CSV ファイルを作成します。
public {FileConnection.write-metadata
url:Url,
record-fields:RecordFields
}:void
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (ファクトリ)
public {FileConnection.default
url:Url,
character-encoding:CharEncoding = "utf8",
domain-table:DomainTable = default-domain-table
}:FileConnection

インデックス ファイルの URL が指定されていると、ファイル データベース接続を作成します。

説明

この URL の接続が既に作成されている場合に、同じインスタンスが返されるよう接続が記録されます。メタデータ ファイルを更新する場合は、必ず FileConnection.reset を呼び出して、キャッシュをリフレッシュしてください。
url: この接続のインデックス ファイルの場所です。
character-encoding: インデックス ファイルが使用する文字エンコーディングです。
domain-table: メタデータ ファイルに格納されているドメイン名文字列から、この接続で作成されたレコードセット内にあって実行時に使用される Domain オブジェクトへのマッピングです。


from-url (コンストラクタ)
protected {FileConnection.from-url
url:Url,
character-encoding:CharEncoding = "utf8",
domain-table:DomainTable = default-domain-table
}

インデックス ファイルの URL が指定されていると、ファイル ベースのデータベース接続を作成します。




プロパティ詳細
cached-database-names (フィールド)
protected FileConnection.cached-database-names:StringArray ={StringArray}

この接続を使って利用できるデータベース名のリスト。

説明

サブクラスでは、接続が最初に確立されたときと、Connection.reset の呼び出し後に情報が必要になった場合にこのフィールドを更新する必要があります。


cached-table-names (フィールド)
protected FileConnection.cached-table-names:{HashTable-of String, StringArray} ={new {HashTable-of String, StringArray}}

キャッシュに格納された、各データベースで見つかったテーブルのリスト。

説明

サーバー要求を最小限に抑えるため、指定データベースで見つかったテーブルのリストがこのハッシュテーブルにキャッシュされます。各データベースにアクセスするたびに、キャッシュされる情報も増えていきます。


character-encoding (フィールド)
public-get private-set FileConnection.character-encoding:CharEncoding ="utf8"

この FileConnection のメタデータ ファイルに使用される文字エンコーディングです。



domain-table (フィールド)
public-get protected-set FileConnection.domain-table:DomainTable

文字列から、この接続を通じてアクセスされるファイルによって使用されるドメインへのマッピングです。



table-rs (フィールド)
protected FileConnection.table-rs:CsvRecordSet

このレコードセットには、この接続で認識されるデータベースおよびテーブルに関する情報が含まれます。




クラス変数と定数の詳細
column-fields (クラス定数)
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 } }

この接続で認識されるデータベースおよびテーブルを表わすために使用されるテーブル内のフィールドです。





メソッド詳細
create-record-set (メソッド)
public {FileConnection.create-record-set
database-name:String,
query:String,
request-modifiable?:bool = false,
size-limit:int = -1,
...:EventHandler
}:ConnectedFileRecordSet

この接続での使用に適した ConnectedRecordSet のサブクラスを作成して返します。

説明

Connection のこのサブクラスは、ConnectedFileRecordSet を返します。SQL クエリはサポートされず、size-limit は無視されます。
database-name: Connection で認識されているデータベースの名前。(これらの名前のリストを得るには Connection.get-database-names を使います。)
query: テーブル名です(SQL クエリはこのサブクラスではサポートされていません)。
request-modifiable?: true の場合、変更可能なレコードセットを返す処理が行われます。
size-limit: このサブクラスは size-limit パラメータを無視します。
...: このレコードセットに追加される EventHandler を含めることができます。


data-url (メソッド)
protected {FileConnection.data-url url-spec:String}:Url

データが格納されているファイルの URL を返します。



ensure-metadata-updated (メソッド)
public {FileConnection.ensure-metadata-updated
database-name:String
}:void

指定データベースに関連するメタデータがクライアント上でも現在値であることを確認します。

オーバーライド

このメソッドは、{self.cached-table-names.key-exists? database-name} が false の場合のみ呼び出されます。2 次的な効果として、データベース名とそのテーブル名の StringArray の間の関連付けが self.cached-table-names に追加されます。
データベース単位で他のサーバー メタデータをキャッシュする Connection サブクラスの場合、このスーパークラスの実装に加えてこのメソッドが呼び出されたときにメタデータが更新されることになります。


ensure-updated (メソッド)
public {FileConnection.ensure-updated}:void

データベース サーバーからキャッシュされたメタデータを必ず利用できるようにします。

オーバーライド

サーバー メタデータが既にキャッシュされている場合、何もせずに復帰します。その他の場合はサーバーにメタデータを要求してこれをキャッシュします。メタデータを返すさまざまな操作ではこれを最初に呼び出して、メタデータが利用可能であることを確認してください。メタデータのキャッシングにより、サーバーへのむだな要求を回避することができます。
キャッシュされる情報がない場合、このメソッドの実装では少なくともサーバーから正しい BasicConnection.cached-database-names 配列を取得する必要があります。


get-character-encoding (メソッド)
protected {FileConnection.get-character-encoding r:Record}:CharEncoding

ConnectedFileRecordSet が格納されているファイルに使用される文字エンコーディングを返します。インデックス ファイルでエンコーディングが指定されていない場合、接続のエンコーディングが使用されます。



get-database-names (メソッド)
public {FileConnection.get-database-names}:StringArray

この接続から利用できるデータベースのリストを取得します。

注意事項

サーバーとのトラフィックを最小限に抑えるため、このゲッターはキャッシュされている情報を返します。キャッシュをクリアしてサーバーから情報を強制的に更新するには Connection.reset を呼び出します。


get-fields (メソッド)
public {FileConnection.get-fields
database-name:String,
query:String
}:RecordFields

データベースと query が指定されていると、テーブルの列を記述する RecordFields オブジェクトを返します。クエリは、FileConnection の単純なテーブル名とする必要があります。

database-name: Connection で認識されているデータベースの名前。(これらの名前のリストを得るには Connection.get-database-names を使います。)
query: テーブル名です(SQL クエリはこのサブクラスではサポートされていません)。


get-metadata (メソッド)
public {FileConnection.get-metadata
database-name:String,
query:String
}:( fields:RecordFields, data-url:Url, hlc:int, ce:CharEncoding )

データベース名とテーブル名で指定されたとおりに、ConnectedFileRecordSet のメタデータを返します。

database-name: Connection で認識されているデータベースの名前。(これらの名前のリストを得るには Connection.get-database-names を使います。)
query: テーブル名です(SQL クエリはこのサブクラスではサポートされていません)。


get-tables (メソッド)
public {FileConnection.get-tables database-name:String}:StringArray

指定データベースのテーブルのリストを取得します。



reset (メソッド)
public {FileConnection.reset}:void

Connection を初期状態に戻します。

説明

このメソッドはクライアント側の接続でキャッシュされている情報をすべて削除し、メタデータが次に必要になったときにサーバーから取得されるようにします。


table-exists? (メソッド)
public {FileConnection.table-exists?
database-name:String,
table:String
}:bool

指定データベースに指定テーブルが存在する場合は true を返します。



write-metadata (メソッド)
public {FileConnection.write-metadata
url:Url,
record-fields:RecordFields
}:void

CsvRecordSet を記述する CSV ファイルを作成します。

説明

CSV ファイルが指定された url に作成され、record-fields 内の各フィールドを記述するレコードが FileConnection で認識される形式で書き込まれます。url にファイルが既に存在している場合は、上書きされます。