From 446afbc609ae456918d9c6a2ded54d9fd60d6fab Mon Sep 17 00:00:00 2001 From: knonomura Date: Thu, 17 Jul 2025 18:47:47 +0900 Subject: [PATCH 1/2] Update for V5.8 --- README.md | 2 +- .../md_reference_c_api.html | 39001 ++++++++-------- .../md_reference_feature.md | 2547 +- .../md_reference_jdbc/md_reference_jdbc.md | 4 +- manuals/md_reference_sql/md_reference_sql.md | 190 +- manuals/md_reference_tql/md_reference_tql.md | 68 +- .../md_sql_tuning_guide.md | 61 +- 7 files changed, 22093 insertions(+), 19780 deletions(-) diff --git a/README.md b/README.md index 0fa6333..2e78cd1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # GridDB ドキュメンテーション -GridDB Community Edition v5.6 のドキュメントのレポジトリです。 +GridDB Community Edition v5.8 のドキュメントのレポジトリです。 ## マニュアル一覧 diff --git a/manuals/md_reference_c_api/md_reference_c_api.html b/manuals/md_reference_c_api/md_reference_c_api.html index a308377..6f20320 100644 --- a/manuals/md_reference_c_api/md_reference_c_api.html +++ b/manuals/md_reference_c_api/md_reference_c_api.html @@ -1,19500 +1,19501 @@ - - - - -GridDB C APIリファレンス - - - - - - - - -
- -

GridDB C APIリファレンス

- - - - - - -
-

1 API

-
- -
※【注意点】 C APIの空間データはGridDB Community Editionではサポートしていません。Java APIを用いてください。 -
- -
- -
-

1.1 API一覧

-
-
-
C API
-
-
-

GridDBの公開C言語インタフェースを定義します

- - - -
-
-
-
gridstore.h File Reference
-
-
- -

GridDBのC言語向け公開API. -More...

-
#include <stdlib.h>
-#include <stdint.h>
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

struct  GSPreciseTimestampTag
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
struct  GSBlobTag
 ロウオブジェクトにおけるBLOB構造を表します。More...
 
struct  GSPropertyEntryTag
 プロパティの構成エントリです。More...
 
struct  GSColumnCompressionTag
 特定のカラムの圧縮設定を表します。More...
 
struct  GSCollectionPropertiesTag
 コレクションの構成オプションを表します。More...
 
struct  GSTimeSeriesPropertiesTag
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
struct  GSColumnInfoTag
 カラムのスキーマに関する情報を表します。More...
 
struct  GSTriggerInfoTag
 トリガに関する情報を表します。More...
 
struct  GSIndexInfoTag
 索引の設定内容を表します。More...
 
struct  GSContainerInfoTag
 特定のコンテナに関する情報を表します。More...
 
struct  GSBindingTag
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。More...
 
struct  GSQueryAnalysisEntryTag
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
struct  GSContainerRowEntryTag
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
struct  GSRowKeyPredicateEntryTag
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
union  GSValueTag
 ロウフィールドに格納できるいずれかの型の値です。More...
 
struct  GSTimeZoneTag
 タイムゾーン情報を表します。More...
 
struct  GSTimestampFormatOptionTag
 日時フォーマットに関するオプション情報を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

-#define GS_CLIENT_VERSION_MAJOR   5
 GridDBクライアントのメジャーバージョンを表す数値です。
 
-#define GS_CLIENT_VERSION_MINOR   3
 GridDBクライアントのマイナーバージョンを表す数値です。
 
-#define GS_TRUE   1
 真であることを示すブール型値です。
 
-#define GS_FALSE   0
 偽であることを示すブール型値です。
 
#define GS_RESULT_OK   0
 GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。More...
 
#define GS_SUCCEEDED(result)   ((result) == GS_RESULT_OK)
 実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。More...
 
#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
 GSPreciseTimestampの初期化子です。More...
 
-#define GS_COLUMN_COMPRESSION_INITIALIZER   { NULL, GS_FALSE, 0, 0, 0 }
 GSColumnCompressionの初期化子です。
 
-#define GS_COLLECTION_PROPERTIES_INITIALIZER   { 0 }
 GSCollectionPropertiesの初期化子です。
 
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
 GSTimeSeriesPropertiesの初期化子です。More...
 
-#define GS_COLUMN_INFO_INITIALIZER   { NULL, GS_TYPE_STRING, GS_INDEX_FLAG_DEFAULT, 0 }
 GSColumnInfoの初期化子です。
 
-#define GS_TRIGGER_INFO_INITIALIZER   { NULL, GS_TRIGGER_REST, NULL, 0, NULL, 0, NULL, NULL, NULL }
 GSTriggerInfoの初期化子です。
 
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
 GSIndexInfoの初期化子です。More...
 
-#define GS_CONTAINER_INFO_INITIALIZER
 GSContainerInfoの初期化子です。
 
-#define GS_QUERY_ANALYSIS_ENTRY_INITIALIZER   { 0, 0, NULL, NULL, NULL, NULL }
 GSQueryAnalysisEntryの初期化子です。
 
#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
 GSContainerRowEntryの初期化子です。More...
 
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
 GSRowKeyPredicateEntryの初期化子です。More...
 
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
 GSTimeZoneの初期化子です。More...
 
#define GS_TIMESTAMP_DEFAULT   0
 時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。More...
 
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
 GSTimestampFormatOptionの初期化子です。More...
 
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
 TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
 GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_GET_STRUCT_BINDING(type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
 ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。More...
 
#define GS_STRUCT_BINDING(type, entries)
 ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ELEMENT(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_KEY(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ARRAY(name, member, sizeMember, elementType)
 カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ELEMENT(member, memberType)
 ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_KEY(member, memberType)
 ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ARRAY(member, sizeMember, elementType)
 ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_COMPOSITE_KEY(member, bindingType)
 ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef char GSChar
 GridDB APIで使用される標準の文字の型です。More...
 
typedef char GSBool
 GridDB APIで使用されるブール型です。More...
 
-typedef int32_t GSEnum
 列挙型
 
typedef int64_t GSTimestamp
 GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。More...
 
typedef struct
-GSGridStoreFactoryTag 
GSGridStoreFactory
 GSGridStoreインスタンスを管理します。More...
 
typedef struct GSGridStoreTag GSGridStore
 1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。More...
 
typedef struct GSContainerTag GSContainer
 同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。More...
 
-typedef struct GSQueryTag GSQuery
 特定のGSContainerに対応付けられたクエリを保持し、結果取得方法の設定ならびに実行・結果取得を行う機能を持ちます。
 
typedef struct GSRowSetTag GSRowSet
 クエリ実行より求めたロウの集合を管理します。More...
 
typedef struct
-GSAggregationResultTag 
GSAggregationResult
 集計演算の結果を保持します。More...
 
typedef GSContainer GSCollection
 ロウ集合を汎用的に管理するためのコンテナです。More...
 
typedef GSContainer GSTimeSeries
 時刻をロウキーとする、時系列処理に特化したコンテナです。More...
 
typedef struct GSRowTag GSRow
 任意のスキーマについて汎用的にフィールド操作できるロウです。More...
 
typedef GSRow GSRowKey
 ロウキーに関するカラムのみから構成されるGSRowの一種です。More...
 
typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
 ロウキーの合致条件を表します。More...
 
typedef struct
-GSPartitionControllerTag 
GSPartitionController
 パーティション状態の取得や操作のためのコントローラです。More...
 
-typedef int32_t GSResult
 GridDBに対する命令の実行結果コードの型です。
 
typedef struct
-GSPreciseTimestampTag 
GSPreciseTimestamp
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
-typedef struct GSBlobTag GSBlob
 ロウオブジェクトにおけるBLOB構造を表します。
 
-typedef struct GSPropertyEntryTag GSPropertyEntry
 プロパティの構成エントリです。
 
typedef GSEnum GSFetchOption
 
typedef GSEnum GSQueryOrder
 
typedef int32_t GSIndexTypeFlags
 
typedef GSEnum GSAggregation
 
typedef GSEnum GSInterpolationMode
 
typedef GSEnum GSTimeOperator
 
typedef GSEnum GSGeometryOperator
 
typedef GSEnum GSCompressionMethod
 
typedef GSEnum GSTimeUnit
 
typedef GSEnum GSContainerType
 
typedef GSEnum GSType
 
typedef int32_t GSTypeOption
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
typedef GSEnum GSRowSetType
 
typedef struct
-GSColumnCompressionTag 
GSColumnCompression
 特定のカラムの圧縮設定を表します。More...
 
typedef struct
-GSCollectionPropertiesTag 
GSCollectionProperties
 コレクションの構成オプションを表します。More...
 
typedef struct
-GSTimeSeriesPropertiesTag 
GSTimeSeriesProperties
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
-typedef struct GSColumnInfoTag GSColumnInfo
 カラムのスキーマに関する情報を表します。
 
typedef GSEnum GSTriggerType
 
typedef int32_t GSTriggerEventTypeFlags
 
typedef struct GSTriggerInfoTag GSTriggerInfo
 トリガに関する情報を表します。More...
 
typedef struct GSIndexInfoTag GSIndexInfo
 索引の設定内容を表します。More...
 
-typedef struct GSContainerInfoTag GSContainerInfo
 特定のコンテナに関する情報を表します。
 
-typedef struct GSBindingTag GSBinding
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。
 
typedef struct
-GSQueryAnalysisEntryTag 
GSQueryAnalysisEntry
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
typedef struct
-GSContainerRowEntryTag 
GSContainerRowEntry
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
typedef struct
-GSRowKeyPredicateEntryTag 
GSRowKeyPredicateEntry
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
typedef union GSValueTag GSValue
 ロウフィールドに格納できるいずれかの型の値です。More...
 
typedef struct GSTimeZoneTag GSTimeZone
 タイムゾーン情報を表します。More...
 
typedef struct
-GSTimestampFormatOptionTag 
GSTimestampFormatOption
 日時フォーマットに関するオプション情報を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Enumerations

enum  GSFetchOptionTag { GS_FETCH_LIMIT, -GS_FETCH_PARTIAL_EXECUTION = (GS_FETCH_LIMIT + 2) - }
 クエリ実行結果を取得する際のオプション項目です。More...
 
enum  GSQueryOrderTag { GS_ORDER_ASCENDING, -GS_ORDER_DESCENDING - }
 クエリにおける要求ロウ順序を表します。More...
 
enum  GSIndexTypeFlagTag { GS_INDEX_FLAG_DEFAULT = -1, -GS_INDEX_FLAG_TREE = 1 << 0, -GS_INDEX_FLAG_HASH = 1 << 1, -GS_INDEX_FLAG_SPATIAL = 1 << 2 - }
 GSContainerに設定する索引の種別を示します。More...
 
enum  GSAggregationTag {
-  GS_AGGREGATION_MINIMUM, -GS_AGGREGATION_MAXIMUM, -GS_AGGREGATION_TOTAL, -GS_AGGREGATION_AVERAGE, -
-  GS_AGGREGATION_VARIANCE, -GS_AGGREGATION_STANDARD_DEVIATION, -GS_AGGREGATION_COUNT, -GS_AGGREGATION_WEIGHTED_AVERAGE -
- }
 ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。More...
 
enum  GSInterpolationModeTag { GS_INTERPOLATION_LINEAR_OR_PREVIOUS, -GS_INTERPOLATION_EMPTY - }
 ロウの補間方法の種別を表します。More...
 
enum  GSTimeOperatorTag { GS_TIME_OPERATOR_PREVIOUS, -GS_TIME_OPERATOR_PREVIOUS_ONLY, -GS_TIME_OPERATOR_NEXT, -GS_TIME_OPERATOR_NEXT_ONLY - }
 GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。More...
 
enum  GSGeometryOperatorTag { GS_GEOMETRY_OPERATOR_INTERSECT - }
 空間範囲同士の関係性についての制約を定義します。More...
 
enum  GSCompressionMethodTag { GS_COMPRESSION_NO, -GS_COMPRESSION_SS, -GS_COMPRESSION_HI - }
 圧縮方式の種別を表します。More...
 
enum  GSTimeUnitTag {
-  GS_TIME_UNIT_YEAR, -GS_TIME_UNIT_MONTH, -GS_TIME_UNIT_DAY, -GS_TIME_UNIT_HOUR, -
-  GS_TIME_UNIT_MINUTE, -GS_TIME_UNIT_SECOND, -GS_TIME_UNIT_MILLISECOND -
- }
 時系列処理で用いる時間の単位を示します。More...
 
enum  GSContainerTypeTag { GS_CONTAINER_COLLECTION, -GS_CONTAINER_TIME_SERIES - }
 コンテナの種別を表します。More...
 
enum  GSTypeTag {
-  GS_TYPE_STRING, -GS_TYPE_BOOL, -GS_TYPE_BYTE, -GS_TYPE_SHORT, -
-  GS_TYPE_INTEGER, -GS_TYPE_LONG, -GS_TYPE_FLOAT, -GS_TYPE_DOUBLE, -
-  GS_TYPE_TIMESTAMP, -GS_TYPE_GEOMETRY, -GS_TYPE_BLOB, -GS_TYPE_STRING_ARRAY, -
-  GS_TYPE_BOOL_ARRAY, -GS_TYPE_BYTE_ARRAY, -GS_TYPE_SHORT_ARRAY, -GS_TYPE_INTEGER_ARRAY, -
-  GS_TYPE_LONG_ARRAY, -GS_TYPE_FLOAT_ARRAY, -GS_TYPE_DOUBLE_ARRAY, -GS_TYPE_TIMESTAMP_ARRAY, -
-  GS_TYPE_NULL = -1, -GS_TYPE_PRECISE_TIMESTAMP = -2 -
- }
 GridDB上のフィールド値の型を表します。More...
 
enum  GSTypeOptionTag {
-  GS_TYPE_OPTION_NULLABLE = 1 << 1, -GS_TYPE_OPTION_NOT_NULL = 1 << 2, -GS_TYPE_OPTION_DEFAULT_VALUE_NULL = 1 << 3, -GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL = 1 << 4, -
-  GS_TYPE_OPTION_TIME_MILLI = 1 << 5, -GS_TYPE_OPTION_TIME_MICRO = 1 << 6, -GS_TYPE_OPTION_TIME_NANO = 1 << 7 -
- }
 カラムに関するオプション設定を示します。More...
 
enum  GSRowSetTypeTag { GS_ROW_SET_CONTAINER_ROWS, -GS_ROW_SET_AGGREGATION_RESULT, -GS_ROW_SET_QUERY_ANALYSIS - }
 GSRowSetから取り出すことのできる内容の種別です。More...
 
enum  GSTriggerTypeTag { GS_TRIGGER_REST, -GS_TRIGGER_JMS - }
 トリガの種別を表します。More...
 
enum  GSTriggerEventTypeFlagTag { GS_TRIGGER_EVENT_PUT = 1 << 0, -GS_TRIGGER_EVENT_DELETE = 1 << 1 - }
 トリガで監視対象とする更新操作種別を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory **factory, GSBool allRelated)
 必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。More...
 
GS_DLL_PUBLIC
-GSGridStoreFactory
-*GS_API_CALL 
gsGetDefaultFactory ()
 デフォルトのGSGridStoreFactoryインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount, GSGridStore **store)
 指定のプロパティを持つGSGridStoreを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount)
 指定のファクトリの設定を変更します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore **store, GSBool allRelated)
 指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStore *store, const GSChar *name)
 指定の名前を持つコレクションを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStore *store, const GSChar *name)
 指定の名前を持つ時系列を削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSCollection **collection)
 指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetContainerInfo (GSGridStore *store, const GSChar *name, GSContainerInfo *info, GSBool *exists)
 指定の名前のコンテナに関する情報を取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSTimeSeries **timeSeries)
 指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutContainer (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSCollectionProperties *properties, GSBool modifiable, GSCollection **collection)
 コレクションを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSTimeSeriesProperties *properties, GSBool modifiable, GSTimeSeries **timeSeries)
 時系列を新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutContainerGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 GSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStore *store, const GSChar *name, GSContainer **container)
 GSRowによりロウ操作できるGSContainerインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutCollectionGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSCollection **collection)
 GSContainerInfoを指定して、コレクションを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStore *store, const GSChar *name, GSCollection **collection)
 GSRowによりロウ操作できるGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutTimeSeriesGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSTimeSeries **timeSeries)
 GSContainerInfoを指定して、時系列を新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStore *store, const GSChar *name, GSTimeSeries **timeSeries)
 GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStore *store, const GSChar *name)
 指定の名前を持つコンテナを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsCreateRowByStore (GSGridStore *store, const GSContainerInfo *info, GSRow **row)
 GSContainerInfoを指定して、GSRowを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStore *store, const GSContainerInfo *info, GSRowKey **key)
 GSContainerInfoを指定して、GSRowKeyを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStore *store, GSQuery *const *queryList, size_t queryCount)
 指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStore *store, const GSContainerRowEntry *entryList, size_t entryCount)
 任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStore *store, const GSRowKeyPredicateEntry *const *predicateList, size_t predicateCount, const GSContainerRowEntry **entryList, size_t *entryCount)
 指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStore *store, GSPartitionController **partitionController)
 対応するGridDBクラスタについてのGSPartitionControllerを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStore *store, GSType keyType, GSRowKeyPredicate **predicate)
 指定のGSTypeをロウキーの型とする合致条件を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStore *store, const GSContainerInfo *info, GSRowKeyPredicate **predicate)
 指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer **container, GSBool allRelated)
 指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainer *container, const GSTriggerInfo *info)
 トリガを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsCreateIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に従い、索引を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainer *container, const GSChar *name)
 トリガを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムのうち、指定された種別の索引のみを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsDropIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainer *container)
 これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainer *container, const void *key, const void *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainer *container, const void *const *rowObjs, size_t rowCount, GSBool *exists)
 指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainer *container, const GSChar *queryString, GSQuery **query)
 指定のTQL文を実行するためのクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainer *container, const void *key, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainer *container, GSContainerType *type)
 指定のコンテナの種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainer *container, GSRow **row)
 指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainer *container, GSBool enabled)
 コミットモードの設定を変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainer *container, int32_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 INTEGER型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainer *container, int64_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 LONG型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainer *container, GSTimestamp key, void *rowObj, GSBool forUpdate, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainer *container, const GSChar *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 STRING型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainer *container, int32_t key, const void *rowObj, GSBool *exists)
 INTEGER型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainer *container, int64_t key, const void *rowObj, GSBool *exists)
 LONG型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainer *container, GSTimestamp key, const void *rowObj, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, const void *rowObj, GSBool *exists)
 高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainer *container, const GSChar *key, const void *rowObj, GSBool *exists)
 STRING型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainer *container, int32_t key, GSBool *exists)
 INTEGER型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainer *container, int64_t key, GSBool *exists)
 LONG型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainer *container, GSTimestamp key, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainer *container, const GSChar *key, GSBool *exists)
 STRING型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool forUpdate, GSBool *exists)
 指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainer *container, GSRowKey *keyObj, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollection *collection, const GSChar *column, const GSChar *geometry, GSGeometryOperator geometryOp, GSQuery **query)
 指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollection *collection, const GSChar *column, const GSChar *geometryIntersection, const GSChar *geometryDisjoint, GSQuery **query)
 除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *column, GSAggregation aggregation, GSAggregationResult **aggregationResult)
 開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeries *timeSeries, const void *rowObj, GSBool *exists)
 GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeries *timeSeries, GSTimestamp base, GSTimeOperator timeOp, void *rowObj, GSBool *exists)
 指定の時刻を基準として、関係する1つのロウを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeries *timeSeries, GSTimestamp base, const GSChar *column, void *rowObj, GSBool *exists)
 指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, GSQuery **query)
 開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeries *timeSeries, const GSTimestamp *start, const GSTimestamp *end, GSQueryOrder order, GSQuery **query)
 開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *const *columnSet, size_t columnCount, GSInterpolationMode mode, int32_t interval, GSTimeUnit intervalUnit, GSQuery **query)
 特定範囲のロウ集合をサンプリングするクエリを作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow **row)
 指定のGSRowインスタンスを解放します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetRowSchema (GSRow *row, GSContainerInfo *schemaInfo)
 指定のロウに対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRow *row, int32_t column, const GSValue *fieldValue, GSType type)
 指定のフィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRow *row, int32_t column, GSValue *fieldValue, GSType *type)
 指定のフィールドの値とその型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRow *row, int32_t column)
 指定のフィールドにNULLを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRow *row, int32_t column, GSBool *nullValue)
 指定のフィールドにNULLが設定されているかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のSTRING型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のSTRING型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRow *row, int32_t column, GSBool fieldValue)
 指定のBOOL型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRow *row, int32_t column, GSBool *fieldValue)
 指定のBOOL型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRow *row, int32_t column, int8_t fieldValue)
 指定のBYTE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRow *row, int32_t column, int8_t *fieldValue)
 指定のBYTE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRow *row, int32_t column, int16_t fieldValue)
 指定のSHORT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRow *row, int32_t column, int16_t *fieldValue)
 指定のSHORT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRow *row, int32_t column, int32_t fieldValue)
 指定のINTEGER型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRow *row, int32_t column, int32_t *fieldValue)
 指定のINTEGER型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRow *row, int32_t column, int64_t fieldValue)
 指定のLONG型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRow *row, int32_t column, int64_t *fieldValue)
 指定のLONG型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRow *row, int32_t column, float fieldValue)
 指定のFLOAT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRow *row, int32_t column, float *fieldValue)
 指定のFLOAT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRow *row, int32_t column, double fieldValue)
 指定のDOUBLE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRow *row, int32_t column, double *fieldValue)
 指定のDOUBLE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRow *row, int32_t column, GSTimestamp fieldValue)
 指定の通常精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRow *row, int32_t column, GSTimestamp *fieldValue)
 指定の通常精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRow *row, int32_t column, const GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRow *row, int32_t column, GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のGEOMETRY型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のGEOMETRY型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRow *row, int32_t column, const GSBlob *fieldValue)
 指定のBLOB型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRow *row, int32_t column, GSBlob *fieldValue)
 指定のBLOB型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRow *row, int32_t column, const GSChar *const *fieldValue, size_t size)
 指定のSTRING配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRow *row, int32_t column, const GSChar *const **fieldValue, size_t *size)
 指定のSTRING配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRow *row, int32_t column, const GSBool *fieldValue, size_t size)
 指定のBOOL配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRow *row, int32_t column, const GSBool **fieldValue, size_t *size)
 指定のBOOL配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRow *row, int32_t column, const int8_t *fieldValue, size_t size)
 指定のBYTE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRow *row, int32_t column, const int8_t **fieldValue, size_t *size)
 指定のBYTE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRow *row, int32_t column, const int16_t *fieldValue, size_t size)
 指定のSHORT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRow *row, int32_t column, const int16_t **fieldValue, size_t *size)
 指定のSHORT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRow *row, int32_t column, const int32_t *fieldValue, size_t size)
 指定のINTEGER配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRow *row, int32_t column, const int32_t **fieldValue, size_t *size)
 指定のINTEGER配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRow *row, int32_t column, const int64_t *fieldValue, size_t size)
 指定のLONG配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRow *row, int32_t column, const int64_t **fieldValue, size_t *size)
 指定のLONG配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRow *row, int32_t column, const float *fieldValue, size_t size)
 指定のFLOAT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRow *row, int32_t column, const float **fieldValue, size_t *size)
 指定のFLOAT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRow *row, int32_t column, const double *fieldValue, size_t size)
 指定のDOUBLE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRow *row, int32_t column, const double **fieldValue, size_t *size)
 指定のDOUBLE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRow *row, int32_t column, const GSTimestamp *fieldValue, size_t size)
 指定のTIMESTAMP配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRow *row, int32_t column, const GSTimestamp **fieldValue, size_t *size)
 指定のTIMESTAMP配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRow *row, GSRow **destRow)
 同一のフィールド値からなる新たなGSRowインスタンスを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRow *row, GSRowKey **key)
 ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery **query)
 指定のGSQueryインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQuery *query, GSBool forUpdate, GSRowSet **rowSet)
 オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQuery *query, GSFetchOption fetchOption, const void *value, GSType valueType)
 結果取得に関するオプションを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQuery *query, GSRowSet **rowSet)
 直近に実行した結果のGSRowSetを取得します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet **rowSet)
 指定のGSRowSetインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSet *rowSet)
 現在のカーソル位置のロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSet *rowSet, void *rowObj)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSet *rowSet, GSAggregationResult **aggregationResult)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSet *rowSet, GSQueryAnalysisEntry *queryAnalysis)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。More...
 
GS_DLL_PUBLIC GSRowSetType
-GS_API_CALL 
gsGetRowSetType (GSRowSet *rowSet)
 ロウ集合の種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSet *rowSet, GSContainerInfo *schemaInfo, GSBool *exists)
 このロウ集合に対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSet *rowSet)
 ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSet *rowSet)
 現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSet *rowSet, const void *rowObj)
 現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult **aggregationResult)
 指定のGSAggregationResultインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResult *aggregationResult, void *value, GSType valueType)
 集計結果を指定の型の値として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResult *aggregationResult, int64_t *value, GSBool *assigned)
 数値型の集計値をLONG型(int64_t)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResult *aggregationResult, double *value, GSBool *assigned)
 数値型の集計値をDOUBLE型(double)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResult *aggregationResult, GSTimestamp *value, GSBool *assigned)
 時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResult *aggregationResult, GSPreciseTimestamp *value, GSBool *assigned)
 時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate **predicate)
 指定のGSRowKeyPredicateインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicate *predicate, GSType *keyType)
 合致条件の評価対象とするロウキーの型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicate *predicate, GSContainerInfo *info)
 合致条件の評価対象とするロウキーのスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の開始位置とするロウキーを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **startKey)
 範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicate *predicate, const GSChar **startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の終了位置とするロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **finishKey)
 範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicate *predicate, const GSChar **finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicate *predicate, GSRowKey *const **keyObjList, size_t *size)
 個別条件を構成するロウキーの集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicate *predicate, const GSValue **keyList, size_t *size)
 個別条件を構成する、単一カラムのロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicate *predicate, const GSChar *const **keyList, size_t *size)
 個別条件を構成するSTRING型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicate *predicate, const int32_t **keyList, size_t *size)
 個別条件を構成するINTEGER型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicate *predicate, const int64_t **keyList, size_t *size)
 個別条件を構成するLONG型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **keyList, size_t *size)
 個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **keyList, size_t *size)
 個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の開始位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *startKey, GSType keyType)
 範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicate *predicate, const GSChar *startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicate *predicate, const int64_t *startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の終了位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *finishKey, GSType keyType)
 範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicate *predicate, const GSChar *finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicate *predicate, const int64_t *finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 個別条件の要素の一つとするロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *key, GSType keyType)
 個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicate *predicate, const GSChar *key)
 個別条件の要素の一つとするSTRING型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicate *predicate, int32_t key)
 個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicate *predicate, int64_t key)
 個別条件の要素の一つとするLONG型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicate *predicate, GSTimestamp key)
 個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *key)
 個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController **controller)
 指定のGSPartitionControllerインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionController *controller, int32_t *partitionCount)
 対象とするGridDBクラスタのパーティション数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionController *controller, int32_t partitionIndex, int64_t *containerCount)
 指定のパーティションに属するコンテナの総数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionController *controller, int32_t partitionIndex, int64_t start, const int64_t *limit, const GSChar *const **nameList, size_t *size)
 指定のパーティションに所属するコンテナの名前の一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar **address)
 指定のパーティションに対応するオーナノードのアドレスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar *host)
 優先的に選択されるホストのアドレスを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionController *controller, const GSChar *containerName, int32_t *partitionIndex)
 指定のコンテナ名に対応するパーティションインデックスを取得します。More...
 
GS_DLL_PUBLIC GSTimestamp
-GS_API_CALL 
gsCurrentTime ()
 現在時刻を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSTimestamp 
gsAddTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit)
 時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC GSTimestamp
-GS_API_CALL 
gsAddZonedTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit)
 二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamp *timestamp, GSChar *strBuf, size_t bufSize, const GSTimestampFormatOption *option)
 指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSChar *str, GSTimestamp *timestamp)
 TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSChar *str, GSPreciseTimestamp *timestamp, const GSTimestampFormatOption *option)
 通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZone *zone, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZone *zone, int64_t offset, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を設定します。More...
 
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZone *zone, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSChar *str, GSTimeZone *zone)
 TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void *gsResource)
 指定のリソースに関する直前のエラー情報のスタックサイズを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーのエラーコードを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
 要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのエラー名を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーの説明内容を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの値を取得します。More...
 
-

Detailed Description

-

GridDBのC言語向け公開API.

-
-
-
-
基本定義
-
-
- - - - - - - - - - - -

-Classes

struct  GSBlobTag
 ロウオブジェクトにおけるBLOB構造を表します。More...
 
struct  GSPropertyEntryTag
 プロパティの構成エントリです。More...
 
union  GSValueTag
 ロウフィールドに格納できるいずれかの型の値です。More...
 
- - - - - - - - - - - - - - - - - - - -

-Macros

-#define GS_CLIENT_VERSION_MAJOR   5
 GridDBクライアントのメジャーバージョンを表す数値です。
 
-#define GS_CLIENT_VERSION_MINOR   3
 GridDBクライアントのマイナーバージョンを表す数値です。
 
-#define GS_TRUE   1
 真であることを示すブール型値です。
 
-#define GS_FALSE   0
 偽であることを示すブール型値です。
 
#define GS_RESULT_OK   0
 GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。More...
 
#define GS_SUCCEEDED(result)   ((result) == GS_RESULT_OK)
 実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef char GSChar
 GridDB APIで使用される標準の文字の型です。More...
 
typedef char GSBool
 GridDB APIで使用されるブール型です。More...
 
-typedef int32_t GSEnum
 列挙型
 
-typedef int32_t GSResult
 GridDBに対する命令の実行結果コードの型です。
 
-typedef struct GSBlobTag GSBlob
 ロウオブジェクトにおけるBLOB構造を表します。
 
-typedef struct GSPropertyEntryTag GSPropertyEntry
 プロパティの構成エントリです。
 
typedef GSEnum GSType
 
typedef union GSValueTag GSValue
 ロウフィールドに格納できるいずれかの型の値です。More...
 
- - - - -

-Enumerations

enum  GSTypeTag {
-  GS_TYPE_STRING, -GS_TYPE_BOOL, -GS_TYPE_BYTE, -GS_TYPE_SHORT, -
-  GS_TYPE_INTEGER, -GS_TYPE_LONG, -GS_TYPE_FLOAT, -GS_TYPE_DOUBLE, -
-  GS_TYPE_TIMESTAMP, -GS_TYPE_GEOMETRY, -GS_TYPE_BLOB, -GS_TYPE_STRING_ARRAY, -
-  GS_TYPE_BOOL_ARRAY, -GS_TYPE_BYTE_ARRAY, -GS_TYPE_SHORT_ARRAY, -GS_TYPE_INTEGER_ARRAY, -
-  GS_TYPE_LONG_ARRAY, -GS_TYPE_FLOAT_ARRAY, -GS_TYPE_DOUBLE_ARRAY, -GS_TYPE_TIMESTAMP_ARRAY, -
-  GS_TYPE_NULL = -1, -GS_TYPE_PRECISE_TIMESTAMP = -2 -
- }
 GridDB上のフィールド値の型を表します。More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define GS_RESULT_OK   0
-
- -

GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。

-
See Also
GSResult
- -
-
- -
-
- - - - - - - - -
#define GS_SUCCEEDED( result)   ((result) == GS_RESULT_OK)
-
- -

実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。

-
See Also
GS_RESULT_OK
-
-GSResult
- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef char GSBool
-
- -

GridDB APIで使用されるブール型です。

-
GridDB上のBOOL型と対応します。
- -
-
- -
-
- - - - -
typedef char GSChar
-
- -

GridDB APIで使用される標準の文字の型です。

-
この型の文字列エンコーディングは常にUTF-8です。
- -
-
- -
-
- - - - -
typedef GSEnum GSType
-
-
See Also
GSTypeTag
- -
-
- -
-
- - - - -
typedef union GSValueTag GSValue
-
- -

ロウフィールドに格納できるいずれかの型の値です。

-
Since
1.5
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSTypeTag
-
- -

GridDB上のフィールド値の型を表します。

- - - - - - - - - - - - - - - - - - - - - - - -
Enumerator
GS_TYPE_STRING  -

STRING型です。

-
GS_TYPE_BOOL  -

BOOL型です。

-
GS_TYPE_BYTE  -

BYTE型です。

-
GS_TYPE_SHORT  -

SHORT型です。

-
GS_TYPE_INTEGER  -

INTEGER型です。

-
GS_TYPE_LONG  -

LONG型です。

-
GS_TYPE_FLOAT  -

FLOAT型です。

-
GS_TYPE_DOUBLE  -

DOUBLE型です。

-
GS_TYPE_TIMESTAMP  -

TIMESTAMP型です。

-
カラム定義に用いる場合、精度の指定にはGSTypeOptionの日時精度に関するオプションを用います。
-
ロウオブジェクトのフィールド値の型を識別するために用いる場合は、通常精度のTIMESTAMP値であることを示します。
-
GS_TYPE_GEOMETRY  -

GEOMETRY型です。

-
GS_TYPE_BLOB  -

BLOB型です。

-
GS_TYPE_STRING_ARRAY  -

STRING型配列です。

-
GS_TYPE_BOOL_ARRAY  -

BOOL型配列です。

-
GS_TYPE_BYTE_ARRAY  -

BYTE型配列です。

-
GS_TYPE_SHORT_ARRAY  -

SHORT型配列です。

-
GS_TYPE_INTEGER_ARRAY  -

INTEGER型配列です。

-
GS_TYPE_LONG_ARRAY  -

LONG型配列です。

-
GS_TYPE_FLOAT_ARRAY  -

FLOAT型配列です。

-
GS_TYPE_DOUBLE_ARRAY  -

DOUBLE型配列です。

-
GS_TYPE_TIMESTAMP_ARRAY  -

TIMESTAMP型配列です。

-
GS_TYPE_NULL  -

ロウフィールドにNULLが設定されていることを示します。

-
カラムの型として用いることはできません。
-
Since
3.5
-
GS_TYPE_PRECISE_TIMESTAMP  -

高精度のTIMESTAMP値であることを示します。

-
カラムの型として用いることはできません。ロウオブジェクトのフィールド値の型を識別するために用います。
-
Since
5.3
-
- -
-
-
-
-
-
バインディング
-
-
- - - - - -

-Classes

struct  GSBindingTag
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define GS_GET_STRUCT_BINDING(type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
 ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。More...
 
#define GS_STRUCT_BINDING(type, entries)
 ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ELEMENT(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_KEY(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ARRAY(name, member, sizeMember, elementType)
 カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ELEMENT(member, memberType)
 ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_KEY(member, memberType)
 ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ARRAY(member, sizeMember, elementType)
 ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_COMPOSITE_KEY(member, bindingType)
 ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。More...
 
- - - - -

-Typedefs

-typedef struct GSBindingTag GSBinding
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - - - - - -
#define GS_GET_STRUCT_BINDING( type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
-
- -

ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。

-
指定の定義名のGS_STRUCT_BINDINGの定義を参照できるようにする必要があります。
-
Parameters
- - -
type対応関係の定義名。
-
-
-
Returns
対応関係を示すGSBinding*型の値
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING( type,
 entries 
)
-
- -

ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。

-
現バージョンでは、静的関数の定義に展開されます。
-
複合ロウキーの構成情報の定義にも使用できます。
-
Parameters
- - - -
type対応関係の定義名。関数名の一部として使用されます。
entries構造体メンバとカラム定義との対応関係を示す以下の定義の列を、「,」で区切らず順に並べます。 -
-
-
-
See Also
GS_GET_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_ARRAY( member,
 sizeMember,
 elementType 
)
-
- -

ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。

-
構造体メンバの名前がそのままカラム名として使用されます。
-
Parameters
- - - - -
member配列ポインタ変数に対応する構造体メンバの名前
sizeMember配列サイズ変数に対応する構造体メンバの名前
elementType配列型の要素型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_COMPOSITE_KEY( member,
 bindingType 
)
-
- -

ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。

-
Parameters
- - - -
member構造体メンバの名前
bindingType複合ロウキーを構成するユーザ定義構造体の名前。対応する複合ロウキーの構成については、別途GS_STRUCT_BINDINGを通じて定義されていなければならない
-
-
-
See Also
GS_STRUCT_BINDING
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_ELEMENT( member,
 memberType 
)
-
- -

ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。

-
構造体メンバの名前がそのままカラム名として使用されます。
-
Parameters
- - - -
member構造体メンバの名前
memberType基本型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_KEY( member,
 memberType 
)
-
- -

ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。

-
構造体メンバの名前がそのままカラム名として使用されます。
-
Parameters
- - - -
member構造体メンバの名前
memberType基本型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_NAMED_ARRAY( name,
 member,
 sizeMember,
 elementType 
)
-
- -

カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。

-
Parameters
- - - - - -
nameカラム名
member配列ポインタ変数に対応する構造体メンバの名前
sizeMember配列サイズ変数に対応する構造体メンバの名前
elementType配列型の要素型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_NAMED_ELEMENT( name,
 member,
 memberType 
)
-
- -

カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。

-
Parameters
- - - - -
nameカラム名
member構造体メンバの名前
memberType基本型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define GS_STRUCT_BINDING_NAMED_KEY( name,
 member,
 memberType 
)
-
- -

カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。

-
Parameters
- - - - -
nameカラム名
member構造体メンバの名前
memberType基本型の名前
-
-
-
See Also
GS_STRUCT_BINDING
- -
-
-
-
-
-
エラー処理
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void *gsResource)
 指定のリソースに関する直前のエラー情報のスタックサイズを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーのエラーコードを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
 要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのエラー名を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーの説明内容を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの値を取得します。More...
 
-

Detailed Description

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーの説明内容を取得します。

-
説明内容は、エラーメッセージのうち、エラー番号・エラー名を除いた部分に相当します。
-
Parameters
- - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラーの説明内容を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラーの説明内容を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
-
Since
4.2
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。

-
設定によっては常に空文字列しか求まらない場合があります。
-
Parameters
- - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラー位置情報を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラー位置情報を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーのメッセージを取得します。

-
Parameters
- - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラーメッセージを格納する文字列バッファ。NULLの場合、有効な結果を取得できません。NULLではなく、別の原因で有効な結果が取得できなかった場合、bufSizeが正の値であれば空文字列を格納します。
[in]bufSizeエラーメッセージを格納する文字列バッファの終端文字を含む文字数。格納する文字列の終端文字を含む文字数の方が大きい場合、終端文字を除く後方の文字列を切り詰めて格納します。0の場合、文字列バッファにアクセスしません。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーのエラー名を取得します。

-
Parameters
- - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラー名を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラー名を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
-
Since
4.2
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void * gsResource,
size_t stackIndex,
size_t parameterIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。

-
Parameters
- - - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[in]parameterIndexエラーに関するパラメータ集合のインデックス。0以上、かつ、パラメータの個数未満の値を指定した場合のみ、有効な結果を取得できます。
[out]strBufパラメータ名を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeパラメータ名を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
-
See Also
gsGetErrorParameterCount
-
Since
4.2
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void * gsResource,
size_t stackIndex,
size_t parameterIndex,
GSCharstrBuf,
size_t bufSize 
)
-
- -

指定のリソースに関する直前のエラーに関するパラメータの値を取得します。

-
Parameters
- - - - - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[in]parameterIndexエラーに関するパラメータ集合のインデックス。gsFormatErrorParameterNameの同名の引数と同様です。
[out]strBufパラメータ値を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeパラメータ値を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
-
See Also
gsGetErrorParameterCount
-
Since
4.2
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void * gsResource,
size_t stackIndex 
)
-
- -

指定のリソースに関する直前のエラーのエラーコードを取得します。

-
Parameters
- - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。0以上スタックサイズ未満の値を指定した場合のみ、有効な結果を取得できます。
-
-
-
Returns
エラーコード。該当する情報を取得できなかった場合、GS_RESULT_OK以外の値
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void * gsResource,
size_t stackIndex 
)
-
- -

指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。

-
エラーに関する内容のうち、特定の情報についてはパラメータとして取り出すことができます。各パラメータは、名前と値を持ちます。パラメータの個数に基づく各インデックス値を通じ、順不同にパラメータを列挙することができます。取得できるパラメータについては、エラーを引き起こした操作に関する、個々のインタフェースまたは関連するインタフェースの定義を参照してください。
-
取得できるパラメータの内容は、gsFormatErrorMessageもしくはgsFormatErrorDescriptionより求まる文字列にも原則として含まれます。一方、この文字列から特定の情報だけを一定の文字列解析規則で取り出せるとは限りません。特定のバージョンのある状況下では取り出せたとしても、別の条件では意図しない情報が求まるなどして取り出せない可能性があります。エラーに関するパラメータを個々に取得することで、インタフェースの定義で明記された一部の情報については、文字列解析を行わずに取り出せます。
-
エラーに関するパラメータだけを記録し、メッセージ文字列などその他のエラー内容を記録しなかった場合、記録された内容からエラーの原因を特定することが困難となる可能性があります。
-
Parameters
- - - -
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
-
-
-
Returns
エラーに関するパラメータの個数。該当する情報を取得できなかった場合、0
-
Since
4.2
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void * gsResource)
-
- -

指定のリソースに関する直前のエラー情報のスタックサイズを取得します。

-
エラー情報はスタック構造になっており、スタック番号の大きいものほどより直接的なエラー原因と対応します。
-
Parameters
- - -
[in]gsResourceリソースのアドレス。ここでのリソースとは、GSGridStoreFactoryインスタンス、または、GSGridStoreFactoryを介して生成された、クローズ関数により破棄可能なリソースのことです。NULLが指定された場合、有効な結果を取得できません。
-
-
-
Returns
スタックサイズ。該当する情報を取得できなかった場合、0
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
-
- -

要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。

-
Returns
該当するエラーコードかどうか
-
Since
1.5
- -
-
-
-
-
-
GSAggregationResult
-
-
- - - - - -

-Typedefs

typedef struct
-GSAggregationResultTag 
GSAggregationResult
 集計演算の結果を保持します。More...
 
- - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult **aggregationResult)
 指定のGSAggregationResultインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResult *aggregationResult, void *value, GSType valueType)
 集計結果を指定の型の値として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResult *aggregationResult, int64_t *value, GSBool *assigned)
 数値型の集計値をLONG型(int64_t)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResult *aggregationResult, double *value, GSBool *assigned)
 数値型の集計値をDOUBLE型(double)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResult *aggregationResult, GSTimestamp *value, GSBool *assigned)
 時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResult *aggregationResult, GSPreciseTimestamp *value, GSBool *assigned)
 時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSAggregationResultTag GSAggregationResult
-
- -

集計演算の結果を保持します。

-
gsGetNextAggregationもしくはgsAggregateTimeSeriesにより取得できる、集計演算の結果を保持します。整数型カラムに対する演算結果を浮動小数点型として、また、有効桁数の少ない数値型のカラムに対する演算結果をより桁数の多い数値型として受け取ることができます。
-
保持する型は、集計演算の種別や集計対象のカラムの型によって決定されます。具体的な規則はGSAggregationまたはTQLの仕様を参照してください。
-
取り出しできる型は、保持する型によって決まります。保持する型が数値型の場合はDOUBLE型またはLONG型、TIMESTAMP型の場合はTIMESTAMP型の値としてのみ取り出しできます。
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult ** aggregationResult)
-
- -

指定のGSAggregationResultインスタンスを解放します。

-
Parameters
- - -
[in,out]aggregationResultクローズ対象のGSAggregationResultインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSAggregationResultインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResultaggregationResult,
void * value,
GSType valueType 
)
-
- -

集計結果を指定の型の値として取得します。

-
取り出しできる型は、指定のaggregationResultが保持している値の型によって、次のように決まります。 - - - - - - - - -
取り出しできる値の型保持している値の型
LONG型(GS_TYPE_LONG) 数値型
DOUBLE型(GS_TYPE_DOUBLE) 数値型
TIMESTAMP型(GS_TYPE_TIMESTAMP) TIMESTAMP型
-
-
また、valueとして指定できる型は、valueTypeによって次のように決まります。 - - - - - - - - -
valueType valueの型
LONG型(GS_TYPE_LONG) int64_t*
DOUBLE型(GS_TYPE_DOUBLE) double*
TIMESTAMP型(GS_TYPE_TIMESTAMP) GSTimestamp*
-
-
Attention
valueTypevalueの型との対応が正しくない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]aggregationResult処理対象のGSAggregationResult
[out]value取り出す値を格納するための変数へのポインタ値。aggregationResultNULLの場合、また、valueTypevalueとして指定できる型のいずれとも対応しない場合は、何も格納しません。aggregationResultが保持している値の型と照らし合わせて、valueTypeが取り出しできない型であった場合、初期値として0を格納します。
[in]valueType取り出す値の型
-
-
-
Returns
指定のaggregationResultが保持している値を取り出しできたかどうか。次の場合、GS_FALSEを返します。
    -
  • valueTypeとして取り出しできない型が指定された場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResultaggregationResult,
double * value,
GSBoolassigned 
)
-
- -

数値型の集計値をDOUBLE型(double)として取得します。

-
数値型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。DOUBLE型以外の数値を保持している場合、DOUBLE型に変換したものが格納されます。
-
Parameters
- - - - -
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • assigned以外の引数にNULLが指定された場合
  • -
-
-
Since
3.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResultaggregationResult,
int64_t * value,
GSBoolassigned 
)
-
- -

数値型の集計値をLONG型(int64_t)として取得します。

-
数値型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。LONG型以外の数値を保持している場合、LONG型に変換したものが格納されます。
-
Parameters
- - - - -
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • assigned以外の引数にNULLが指定された場合
  • -
-
-
Since
3.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResultaggregationResult,
GSPreciseTimestampvalue,
GSBoolassigned 
)
-
- -

時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。

-
TIMESTAMP型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。
-
高精度のTIMESTAMP値を保持している場合、通常精度の値に変換したものが求まります。
-
Parameters
- - - - -
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • assigned以外の引数にNULLが指定された場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResultaggregationResult,
GSTimestampvalue,
GSBoolassigned 
)
-
- -

時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。

-
TIMESTAMP型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。
-
通常精度のTIMESTAMP値を保持している場合、高精度の値に変換したものが求まります。
-
Parameters
- - - - -
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • assigned以外の引数にNULLが指定された場合
  • -
-
-
Since
3.5
- -
-
-
-
-
-
GSCollection
-
-
- - - - - -

-Classes

struct  GSCollectionPropertiesTag
 コレクションの構成オプションを表します。More...
 
- - - - -

-Macros

-#define GS_COLLECTION_PROPERTIES_INITIALIZER   { 0 }
 GSCollectionPropertiesの初期化子です。
 
- - - - - - - - - -

-Typedefs

typedef GSContainer GSCollection
 ロウ集合を汎用的に管理するためのコンテナです。More...
 
typedef GSEnum GSGeometryOperator
 
typedef struct
-GSCollectionPropertiesTag 
GSCollectionProperties
 コレクションの構成オプションを表します。More...
 
- - - - -

-Enumerations

enum  GSGeometryOperatorTag { GS_GEOMETRY_OPERATOR_INTERSECT - }
 空間範囲同士の関係性についての制約を定義します。More...
 
- - - - - - - -

-Functions

GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollection *collection, const GSChar *column, const GSChar *geometry, GSGeometryOperator geometryOp, GSQuery **query)
 指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollection *collection, const GSChar *column, const GSChar *geometryIntersection, const GSChar *geometryDisjoint, GSQuery **query)
 除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef GSContainer GSCollection
-
- -

ロウ集合を汎用的に管理するためのコンテナです。

-
ロウキーには次の型が使用できます。
    -
  • STRING型(GSChar*)
  • -
  • INTEGER型(int32_t)
  • -
  • LONG型(int64_t)
  • -
  • TIMESTAMP型(GSTimestamp)
  • -
-
-
ロウキーの設定は必須ではありません。
-
ロウ操作について、コンテナ固有の制限は設けられていません。
-
gsQueryもしくはgsGetMultipleContainerRowsなどより複数のロウの内容を一度に取得する場合、特に指定がなければ、返却されるロウの順序は不定となります。
-
ロック粒度はロウ単位です。
- -
-
- -
-
- -

コレクションの構成オプションを表します。

-
Note
現バージョンでは使用されておりません。
- -
-
- -
-
- - - - -
typedef GSEnum GSGeometryOperator
-
-
See Also
GSGeometryOperatorTag
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSGeometryOperatorTag
-
- -

空間範囲同士の関係性についての制約を定義します。

-
空間範囲検索の条件指定のために使用します。
- - -
Enumerator
GS_GEOMETRY_OPERATOR_INTERSECT  -

双方の空間範囲またはその外接構造が交差する関係にあることを示します。

-
双方の外接直方体(Minimum Bounding Box)、もしくは外接直方体と2次曲面が交差する関係にあることを示します。交差判定の条件は、TQLのST_MBRIntersects関数、もしくはST_QSFMBRIntersects関数と同一です。
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollectioncollection,
const GSCharcolumn,
const GSChargeometry,
GSGeometryOperator geometryOp,
GSQuery ** query 
)
-
- -

指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。

-
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
-
Parameters
- - - - - - -
[in]collection処理対象のGSCollection
[in]column比較対象の空間型カラムの名前
[in]geometry比較対象として与える空間構造
[in]geometryOp比較方法
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別がコレクションではない場合
  • -
  • 対応する名前のカラムが存在しない場合
  • -
  • geometryOp以外の引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollectioncollection,
const GSCharcolumn,
const GSChargeometryIntersection,
const GSChargeometryDisjoint,
GSQuery ** query 
)
-
- -

除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。

-
geometryIntersectionと交差し、かつ、geometryDisjointと交差しないカラム値を持つロウ集合を取得します。交差判定の条件は、GS_GEOMETRY_OPERATOR_INTERSECTと同一です。
-
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
-
Parameters
- - - - - - -
[in]collection処理対象のGSCollection
[in]column比較対象の空間型カラムの名前
[in]geometryIntersectionカラム上の値と交差する範囲を示す空間構造
[in]geometryDisjoint上の値と交差しない範囲を示す空間構造
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別がコレクションではない場合
  • -
  • 対応する名前のカラムが存在しない場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
-
-
-
-
GSContainer
-
-
- - - - - - - - - - - - - - -

-Classes

struct  GSColumnInfoTag
 カラムのスキーマに関する情報を表します。More...
 
struct  GSTriggerInfoTag
 トリガに関する情報を表します。More...
 
struct  GSIndexInfoTag
 索引の設定内容を表します。More...
 
struct  GSContainerInfoTag
 特定のコンテナに関する情報を表します。More...
 
- - - - - - - - - - - - - -

-Macros

-#define GS_COLUMN_INFO_INITIALIZER   { NULL, GS_TYPE_STRING, GS_INDEX_FLAG_DEFAULT, 0 }
 GSColumnInfoの初期化子です。
 
-#define GS_TRIGGER_INFO_INITIALIZER   { NULL, GS_TRIGGER_REST, NULL, 0, NULL, 0, NULL, NULL, NULL }
 GSTriggerInfoの初期化子です。
 
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
 GSIndexInfoの初期化子です。More...
 
-#define GS_CONTAINER_INFO_INITIALIZER
 GSContainerInfoの初期化子です。
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef struct GSContainerTag GSContainer
 同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。More...
 
typedef int32_t GSIndexTypeFlags
 
typedef GSEnum GSContainerType
 
typedef int32_t GSTypeOption
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
-typedef struct GSColumnInfoTag GSColumnInfo
 カラムのスキーマに関する情報を表します。
 
typedef GSEnum GSTriggerType
 
typedef int32_t GSTriggerEventTypeFlags
 
typedef struct GSTriggerInfoTag GSTriggerInfo
 トリガに関する情報を表します。More...
 
typedef struct GSIndexInfoTag GSIndexInfo
 索引の設定内容を表します。More...
 
-typedef struct GSContainerInfoTag GSContainerInfo
 特定のコンテナに関する情報を表します。
 
- - - - - - - - - - - - - - - - -

-Enumerations

enum  GSIndexTypeFlagTag { GS_INDEX_FLAG_DEFAULT = -1, -GS_INDEX_FLAG_TREE = 1 << 0, -GS_INDEX_FLAG_HASH = 1 << 1, -GS_INDEX_FLAG_SPATIAL = 1 << 2 - }
 GSContainerに設定する索引の種別を示します。More...
 
enum  GSContainerTypeTag { GS_CONTAINER_COLLECTION, -GS_CONTAINER_TIME_SERIES - }
 コンテナの種別を表します。More...
 
enum  GSTypeOptionTag {
-  GS_TYPE_OPTION_NULLABLE = 1 << 1, -GS_TYPE_OPTION_NOT_NULL = 1 << 2, -GS_TYPE_OPTION_DEFAULT_VALUE_NULL = 1 << 3, -GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL = 1 << 4, -
-  GS_TYPE_OPTION_TIME_MILLI = 1 << 5, -GS_TYPE_OPTION_TIME_MICRO = 1 << 6, -GS_TYPE_OPTION_TIME_NANO = 1 << 7 -
- }
 カラムに関するオプション設定を示します。More...
 
enum  GSTriggerTypeTag { GS_TRIGGER_REST, -GS_TRIGGER_JMS - }
 トリガの種別を表します。More...
 
enum  GSTriggerEventTypeFlagTag { GS_TRIGGER_EVENT_PUT = 1 << 0, -GS_TRIGGER_EVENT_DELETE = 1 << 1 - }
 トリガで監視対象とする更新操作種別を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer **container, GSBool allRelated)
 指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainer *container, const GSTriggerInfo *info)
 トリガを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsCreateIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に従い、索引を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainer *container, const GSChar *name)
 トリガを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムのうち、指定された種別の索引のみを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsDropIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainer *container)
 これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainer *container, const void *key, const void *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainer *container, const void *const *rowObjs, size_t rowCount, GSBool *exists)
 指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainer *container, const GSChar *queryString, GSQuery **query)
 指定のTQL文を実行するためのクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainer *container, const void *key, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainer *container, GSContainerType *type)
 指定のコンテナの種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainer *container, GSRow **row)
 指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainer *container, GSBool enabled)
 コミットモードの設定を変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainer *container, int32_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 INTEGER型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainer *container, int64_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 LONG型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainer *container, GSTimestamp key, void *rowObj, GSBool forUpdate, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainer *container, const GSChar *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 STRING型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainer *container, int32_t key, const void *rowObj, GSBool *exists)
 INTEGER型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainer *container, int64_t key, const void *rowObj, GSBool *exists)
 LONG型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainer *container, GSTimestamp key, const void *rowObj, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, const void *rowObj, GSBool *exists)
 高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainer *container, const GSChar *key, const void *rowObj, GSBool *exists)
 STRING型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainer *container, int32_t key, GSBool *exists)
 INTEGER型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainer *container, int64_t key, GSBool *exists)
 LONG型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainer *container, GSTimestamp key, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainer *container, const GSChar *key, GSBool *exists)
 STRING型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool forUpdate, GSBool *exists)
 指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainer *container, GSRowKey *keyObj, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
-
- -

GSIndexInfoの初期化子です。

-
Since
3.5
- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct GSContainerTag GSContainer
-
- -

同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。

-
ロウオブジェクトを入出力の基本単位として、各種管理機能を提供します。ロウオブジェクトとGridDB上のロウは、指定のロウオブジェクト型とGridDB上のスキーマとの対応関係に基づいて、相互にマッピングされます。
-
GridDB上のスキーマを構成する各カラムは、対応するGS_STRUCT_BINDINGの内容に基づき決定されます。1つのコンテナは1つ以上のカラムにより構成されます。
-
1つのコンテナのカラム間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。その他、コンテナ定義におけるカラム名の文字種や長さ、カラム数には制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、カラム名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
-
カラムの型と、ロウオブジェクト内の各値の型との対応は、それぞれ次の通りです。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
カラム型ロウオブジェクト内の各値の型
STRING GSChar*
BOOL GSBool
BYTE int8_t
SHORT int16_t
INTEGER int32_t
LONG int64_t
FLOAT float
DOUBLE double
TIMESTAMP(通常精度:ミリ秒) GSTimestamp
TIMESTAMP(高精度:マイクロ・ナノ秒) GSPreciseTimestamp
GEOMETRY GSChar*
BLOB GSBlob
STRING配列GSChar**
BOOL配列GSBool*
BYTE配列int8_t*
SHORT配列int16_t*
INTEGER配列int32_t*
LONG配列int64_t*
FLOAT配列float*
DOUBLE配列double*
TIMESTAMP配列GSTimestamp*
-
-
フィールドの値の表現範囲やサイズには制限があります。具体的には、付録の章の値の範囲の説明、ならびに、GridDB機能リファレンスを参照してください。制限に反する値をコンテナに格納することはできません。
-
ロウキーとして許可されている型や、ロウキーに対応するカラムの有無、ロウ更新の可否といった制約は、このコンテナ型から派生した個別の型の定義によって異なります。
-
GridDB上のロウにおけるNULLは、NOT NULL制約が設定されていない限り保持することができます。NULLは、GSRowを通じて格納や取り出しを行うことができます。一方、GS_STRUCT_BINDINGと対応付くロウオブジェクトにおいては、常に後述の空の値にマッピングされます。
-
ロウオブジェクト型におけるNOT NULL制約は、GS_TYPE_OPTION_NULLABLEならびにGS_TYPE_OPTION_NOT_NULLにより明示的に指定できます。NOT NULL制約がいずれの指定対象にも指定されていない場合、ロウキー以外のカラムはNOT NULL制約なしであるとみなされます。ロウキーは暗黙的にNOT NULL制約が設定された状態となっており、この制約を外すような指定はできません。また、同一指定対象での矛盾したNOT NULL制約は指定できません。NOT NULL制約は、GSColumnInfoTag::optionsを通じて指定することができます。
-
空の値は、GSRowの作成など各種操作の初期値などとして用いられることのある、フィールド値の一種です。以下のように、カラム型ごとに値が定義されています。 - - - - - - - - - - - - - - - - -
カラム型空の値
STRING "" (長さ0の文字列)
BOOL 偽(GS_FALSE)
数値型0
TIMESTAMP 1970-01-01T00:00:00Z
GEOMETRY POINT(EMPTY)
BLOB 長さ0のBLOBデータ
配列型要素数0の配列
-
-
日時精度は、GSTypeOptionの日時精度に関するオプションにより明示的に指定できます。
-
トランザクション処理では、デフォルトで自動コミットモードが有効になっています。自動コミットモードでは、変更操作は逐次確定し、明示的に取り消すことができません。手動コミットモードにおいて、GSContainerインスタンスを介した操作によりクラスタノード上でエラーが検出された場合、コミット前の更新操作はすべて取り消されます。トランザクション分離レベルはREAD COMMITTEDのみをサポートします。ロック粒度は、コンテナの種別によって異なります。
-
ロウの更新・追加・削除、ならびに更新用ロック獲得を行った場合、内部でトランザクションが生成されます。このトランザクションには、有効期限が存在します。これらの操作をあるGSContainerインスタンスに対してはじめて行った時刻を起点として、GridDB上で定められている期間だけ経過した後に、さらに同様の操作やトランザクション操作を行おうとすると、該当するGSContainerインスタンスを介した以降の操作は常に失敗するようになります。
-
あるコンテナへの操作要求に対するクラスタノード上での処理が開始され、終了するまでの間、同一のコンテナに対する操作が待機させられる場合があります。ここでの操作には、コンテナのスキーマや索引などの定義変更、コンテナ情報の参照、ロウ操作などが含まれます。一貫性レベルがIMMEDIATEGSGridStoreインスタンスを通じてコンテナを操作する場合、同一のコンテナに対するIMMEDIATE設定での他の操作処理の途中、原則としては待機させられます。また、コンテナに対する他の操作処理の途中の状態に基づいて処理が行われることは、原則としてはありません。例外事項については、個別の操作ごとの説明を参照してください。
- -
-
- -
-
- - - - -
typedef GSEnum GSContainerType
-
-
See Also
GSContainerTypeTag
- -
-
- -
-
- - - - -
typedef struct GSIndexInfoTag GSIndexInfo
-
- -

索引の設定内容を表します。

-
Since
3.5
- -
-
- -
-
- - - - -
typedef int32_t GSIndexTypeFlags
-
-
See Also
GSIndexTypeFlagTag
- -
-
- -
-
- - - - -
typedef int32_t GSTriggerEventTypeFlags
-
-
- -
-
- - - - -
typedef struct GSTriggerInfoTag GSTriggerInfo
-
- -

トリガに関する情報を表します。

-
Since
1.5
- -
-
- -
-
- - - - -
typedef GSEnum GSTriggerType
-
-
See Also
GSTriggerTypeTag
- -
-
- -
-
- - - - -
typedef int32_t GSTypeOption
-
- -

カラムに関するオプション設定を示すフラグ値のビット和です。

-
ある設定項目について、対応するフラグ値が複数含まれていた場合に、オプション設定が矛盾しているとみなされるものが存在します。それらの設定項目のうち、対応するフラグ値が一つも含まれていないものは、未設定状態であるとみなされます。この制約に該当する設定項目とフラグ値との対応は次の通りです。 - - - - - - -
設定項目フラグ値
NOT NULL制約 -
初期値でのNULL使用有無 -
-
-
See Also
GSTypeOptionTag
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSContainerTypeTag
-
- -

コンテナの種別を表します。

- - - -
Enumerator
GS_CONTAINER_COLLECTION  -

対象のコンテナがコレクションであることを示します。

-
GS_CONTAINER_TIME_SERIES  -

対象のコンテナが時系列であることを示します。

-
- -
-
- -
-
- - - - -
enum GSIndexTypeFlagTag
-
- -

GSContainerに設定する索引の種別を示します。

- - - - - -
Enumerator
GS_INDEX_FLAG_DEFAULT  -

デフォルトの索引を示します。

-
この索引種別は、特定の種別を明示せずに索引の操作を行う必要がある場合に用いられるものであり、実在する索引はこの種別以外の種別に分類されます。
-
GS_INDEX_FLAG_TREE  -

ツリー索引を示します。

-
この索引種別は、時系列におけるロウキーと対応するカラムを除く任意の種別のコンテナにおける、次の型のカラムに対して使用できます。
    -
  • STRING
  • -
  • BOOL
  • -
  • BYTE
  • -
  • SHORT
  • -
  • INTEGER
  • -
  • LONG
  • -
  • FLOAT
  • -
  • DOUBLE
  • -
  • TIMESTAMP
  • -
-
-
GS_INDEX_FLAG_HASH  -

ハッシュ索引を示します。

-
この索引は、GSCollectionにおける次の型のカラムに対して設定できます。
    -
  • STRING
  • -
  • BOOL
  • -
  • BYTE
  • -
  • SHORT
  • -
  • INTEGER
  • -
  • LONG
  • -
  • FLOAT
  • -
  • DOUBLE
  • -
  • TIMESTAMP
  • -
-
-
GSTimeSeriesに対して設定することはできません。
-
GS_INDEX_FLAG_SPATIAL  -

空間索引を示します。

-
この索引種別は、GSCollectionにおけるGEOMETRY型のカラムに対してのみ使用できます。GSTimeSeriesに対して設定することはできません。
-
- -
-
- -
-
- - - - -
enum GSTriggerEventTypeFlagTag
-
- -

トリガで監視対象とする更新操作種別を表します。

- - - -
Enumerator
GS_TRIGGER_EVENT_PUT  -

コンテナに対するロウ新規作成または更新を示します。

-
GS_TRIGGER_EVENT_DELETE  -

コンテナに対するロウ削除を示します。

-
- -
-
- -
-
- - - - -
enum GSTriggerTypeTag
-
- -

トリガの種別を表します。

- - - -
Enumerator
GS_TRIGGER_REST  -

コンテナの更新時にRESTで通知するトリガ種別を示します。

-
GS_TRIGGER_JMS  -

コンテナの更新時にJava Message Service(JMS)で通知するトリガ種別を示します。

-
- -
-
- -
-
- - - - -
enum GSTypeOptionTag
-
- -

カラムに関するオプション設定を示します。

-
See Also
GSTypeOption
- - - - - - - - -
Enumerator
GS_TYPE_OPTION_NULLABLE  -

NOT NULL制約を持たないカラムであることを示します。

-
Since
3.5
-
GS_TYPE_OPTION_NOT_NULL  -

NOT NULL制約を持つカラムであることを示します。

-
Since
3.5
-
GS_TYPE_OPTION_DEFAULT_VALUE_NULL  -

初期値としてNULLを使用するカラムであることを示します。

-
Since
4.1
-
GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL  -

初期値としてNULLを使用しないカラムであることを示します。

-
Since
4.1
-
GS_TYPE_OPTION_TIME_MILLI  -

ミリ秒単位で保持する通常精度の日時型カラムであることを示します。

-
日時型カラムの定義において、精度のオプションが指定されなかった場合、この通常精度のオプションが選択されたものとみなされます。
-
Since
5.3
-
GS_TYPE_OPTION_TIME_MICRO  -

マイクロ秒単位で保持する高精度の日時型カラムであることを示します。

-
Since
5.3
-
GS_TYPE_OPTION_TIME_NANO  -

ナノ秒単位で保持する高精度の日時型カラムであることを示します。

-
Since
5.3
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainercontainer)
-
- -

手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。

-
Parameters
- - -
[in]container処理対象のGSContainer
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 自動コミットモードであるにもかかわらず呼び出した場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer ** container,
GSBool allRelated 
)
-
- -

指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。

-
トランザクションを保持している場合、未コミットの更新内容はすべて元に戻されます。
-
この処理を行うために接続障害が発生したとしても、ローカルリソースの解放処理は適宜実施されます。ただし、GridDB上のトランザクション状態などは状態などは残る可能性があります。
-
Parameters
- - - -
[in,out]containerクローズ対象のGSContainerインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSContainerインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
[in]allRelated指定のGSContainerと関連する下位のリソースのうち、未クローズのものすべてをクローズするかどうか。関連する下位のリソースとは、指定のGSContainerを介して取得したGSQueryGSAggregationResult、ならびに、これらのリソースと関連する下位のリソースのことを指します。GS_FALSEを指定した場合、指定のGSContainerを介して取得したリソースを個別にクローズする必要があり、すべてクローズした時点で指定のGSContainer自体のリソースが解放されます。
-
-
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainercontainer)
-
- -

手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。

-
Parameters
- - -
[in]container処理対象のGSContainer
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 自動コミットモードであるにもかかわらず呼び出した場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainercontainer,
const GSCharcolumnName,
GSIndexTypeFlags flags 
)
-
- -

指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。

-
カラム名と種別のみが設定されたGSIndexInfoを指定してgsCreateIndexDetailを呼び出した場合と同様に振る舞います。ただし、flagsにデフォルト種別を含め一つも種別が指定されていない場合、索引は作成されません。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]columnName処理対象のカラムの名前
[in]flags作成する索引種別のフラグ値のビット和。指定できる値はgsCreateIndexDetailの場合と同様です
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のカラム名と種別がgsCreateIndexDetailの規則に合致しない場合
  • -
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • flags以外の引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsCreateIndexDetail (GSContainercontainer,
const GSIndexInfoinfo 
)
-
- -

GSIndexInfoで設定されている内容に従い、索引を作成します。

-
作成対象の索引のカラムについては、カラム名列またはカラム番号列の少なくとも一方が設定されており、かつ、対応するコンテナにおいて実在するものが設定されている必要があります。カラム名列とカラム番号列が共に設定されている場合、対応するカラム列が順序を含め一致している必要があります。
-
索引種別が一つも設定されていないかGS_INDEX_FLAG_DEFAULTが設定されていた場合、後述の基準に従い、デフォルト種別の索引が選択されます。それ以外の場合、対象のカラムにおいて許されている索引種別である限り、一つ以上の種別を指定できます。複数個の種別が設定されていた場合、作成途中に一部の索引のみが作成された状態のコンテナ情報を参照できることや、エラーが生じるとその状態まま作成操作が終了することがあります。
-
1つのコンテナの索引間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。その他、索引の定義において使用できる索引名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、索引名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
-
既存の同名の索引が存在した場合、後述の条件を満たす同一設定のGSIndexInfoを指定しなければならず、その場合新たな索引は作成されません。一方、既存の異なる名前の索引または名前のない索引と同一設定のGSIndexInfoを指定することはできません。
-
索引名が設定されていない場合は、名前のない索引の作成が要求されたものとみなされます。名前を除いて同一設定の索引がすでに存在していた場合、名前のない索引でなければならず、その場合新たな索引は作成されません。
-
現バージョンでは、少なくともGSContainerを通じて作成された索引において、次の条件を満たす場合に索引名を除いて同一設定の索引であるとみなされます。
    -
  • 索引対象のカラム列が順序を含め一致すること。カラム名列、カラム番号列、単一カラム指定、といった、カラム列の指定方法の違いは無視される
  • -
  • 索引種別が一致すること。デフォルト指定の有無といった索引種別の指定方法の違いは無視される
  • -
-
-
現バージョンにおける、gsGetDefaultFactoryを基に生成されたGSContainerインスタンスでは、コンテナの種別、対応するカラムの型などに基づき、次の索引種別がデフォルトとして選択されます。 - - - - - - - - - - - - - - - - -
カラムの型コレクション時系列
STRING GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
BOOL GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
数値型GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
TIMESTAMP GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE※制限あり
GEOMETRY GS_INDEX_FLAG_SPATIAL (なし)
BLOB (なし) (なし)
配列型(なし) (なし)
-
-
時系列のロウキー(TIMESTAMP型)には索引を設定できません。また、カラム列を構成するカラム型によってデフォルト種別が異なる場合には、選択できません。
-
このGSContainerインスタンスが未コミットのトランザクションを保持していた場合、コミットしてから作成を行います。処理対象のコンテナにおいて実行中の他のトランザクションが存在する場合、それらの終了を待機してから作成を行います。すでに索引が存在しており新たな索引が作成されなかった場合、他のトランザクションによって待機するかどうかは未定義です。またこの場合、このGSContainerインスタンスが保持している未コミットのトランザクションが常にコミットされるかどうかは未定義です。
-
現バージョンでは、コンテナの規模など諸条件を満たした場合、索引の作成開始から終了までの間に、処理対象のコンテナに対してコンテナ情報の参照、一部の索引操作、トリガ操作、ロウ操作(更新含む)を行える場合があります。それ以外の操作は、GSContainerでの説明通り待機させる場合があります。索引の作成途中に別の操作が行われる場合は、作成途中の索引に関する情報はコンテナ情報には含まれません。
-
Parameters
- - - -
[in]container処理対象のGSContainer
[in]info処理対象の索引の情報
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 作成対象のカラム、索引名が上記の規則に合致しない場合
  • -
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • 指定のカラムにおいてサポートされていない索引種別が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
3.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainercontainer,
GSRow ** row 
)
-
- -

指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。

-
作成されるGSRowの各フィールドにはgsCreateRowByStoreにより作成した場合と同様に既定の初期値が設定されます。
-
Parameters
- - - -
[in]container処理対象のGSContainer
[out]rowGSRowインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainercontainer,
const GSTriggerInfoinfo 
)
-
- -

トリガを設定します。

-
指定のコンテナに対して特定の種別の更新操作が行われた場合に、指定のURIに通知が送信されるようになります。指定されたトリガと同名のトリガが存在した場合、設定内容が上書きされます。
-
トリガ設定内容の詳細は、GSTriggerInfoの定義を参照してください。トリガ名、トリガ種別、通知条件、通知先URI、通知内容の詳細は以下の通りです。
-
トリガ名
トリガ種別や通知条件などの違いによらず、1つのコンテナのトリガ間で、ASCIIの大文字・小文字表記を含め同一の名前のものを複数定義することはできません。その他、トリガの定義において使用できるトリガ名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、トリガ名を指定する操作では、ASCIIの大文字・小文字表記の違いが区別されます。
-
トリガ種別
次のトリガ種別をサポートします。 - - - - - - -
名称説明
REST コンテナに指定された種別の更新操作が行われた際に、指定されたURIにREST(HTTP POSTメソッド)で通知するトリガです。
Java Message Service(JMS) コンテナに指定された種別の更新操作が行われた際に、指定されたURIのJMSサーバへJMSメッセージを通知するトリガです。JMSプロバイダとしてApache ActiveMQを使用します。
-
-
通知条件
指定のコンテナに対するロウ新規作成/更新(gsPutRowgsPutMultipleRowsgsPutMultipleContainerRowsgsUpdateCurrentRow)・削除(gsDeleteRowgsDeleteCurrentRow)操作命令の実行直後に通知を行います。監視対象として複数の操作が指定された場合は、そのうちのいずれかが実行された際に通知を行います。
-
通知を行った時点でのレプリケーションの完了は保証されません。自動コミットモード無効で実行されたロウ新規作成/更新・削除命令に対応する通知については、通知を行った時点でトランザクションが未コミットであったり、通知後にトランザクションがアボートされたりした場合、通知を受けた時点で通知に含まれるデータが取得できないことがあります。
-
複数ロウ一括操作の場合、1件のロウ操作ごとに通知を行います。指定されたURIに通知を行っても一定時間以内に応答がない場合、タイムアウトし再送は行いません。GridDBクラスタに障害が発生した場合、ある更新操作に対応する通知が行われないことのほか、複数回通知されることがあります。
-
通知先URI
通知先URIは次の書式で記述します。
(メソッド名)://(ホスト名):(ポート番号)/(パス)
-
ただし、トリガ種別がRESTの場合、メソッド名にはhttpのみ指定できます。
-
通知内容
更新が行われたコンテナ名、更新操作名、更新されたロウデータの指定したカラムの値を通知します。更新操作名は、ロウ新規作成/更新では"put"、削除では"delete"となります。
-
通知する値は、ロウ新規作成では新規作成直後、更新では更新後、削除では削除前のロウデータについての、指定カラムの値となります。カラムの型がTIMESTAMPの場合、1970-01-01T00:00:00Zからの経過ミリ秒を示す整数が値として設定されます。カラムの型が、BLOB型、GEOMETRY型、配列型の場合、空文字列が値として設定されます。
-
通知方法―RESTの場合
以下のようなJSON文字列を、MIMEタイプapplication/jsonで送信します。
{
-
"container" : "(コンテナ名)",
-
"event" : "(更新操作名)",
-
"row" : {
-
"(カラム名)" : (カラムデータ),
-
"(カラム名)" : (カラムデータ),
-
...
-
}
-
}
-
-
通知方法―JMSの場合
javax.jms.TextMessageを、指定されたデスティネーション種別・デスティネーション名で送信します。
-
コンテナ名は、javax.jms.Message::setStringProperty("@container", "(コンテナ名)")で設定されます。更新操作名は、javax.jms.Message::setStringProperty("@event", "(更新操作名)")で設定されます。
-
カラムの値は、カラムの型に応じたjavax.jms.Message::setXXXProperty("(カラム名)", (カラムデータ))で設定されます。
-
トリガが設定されているコンテナに対してgsPutCollectiongsPutTimeSeriesなどによりカラムレイアウトが変更された際に、トリガの通知対象となっているカラムの削除または名称変更があった場合、該当するカラムはトリガの通知対象から削除されます。
-
GridDBからの通知の際に、設定されている通知先URIへのリクエストに対応するサーバが応答しなかった場合、タイムアウト時刻までの待機処理が発生します。この待機処理は、このコンテナならびに他の一部のコンテナの更新に対する通知が遅れる要因となります。したがって、無効となった通知先URIを持つトリガはgsDropTriggerにより削除することが推奨されます。
-
一つのコンテナに対して設定できるトリガの最大数、ならびに、トリガの各種設定値の上限については、GridDB機能リファレンスを参照してください。
-
Parameters
- - - -
[in]container設定対象のGSContainer
[in]info設定対象のトリガ情報
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • トリガ名がNULL空、またはその他の規則に合致しない場合
  • -
  • 監視対象更新操作の指定がない場合
  • -
  • 通知先のURIが規定の構文に合致しない場合
  • -
  • トリガ種別でJMSが指定され、かつJMSデスティネーション種別がNULL、または空、または指定の書式に合致しない場合
  • -
  • トリガ種別でJMSが指定され、かつJMSデスティネーション名がNULL、または空の場合
  • -
  • この処理のタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainercontainer,
const void * key,
GSBoolexists 
)
-
- -

指定のロウキーに対応するロウを削除します。

-
ロウキーに対応するカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトのロウキーの型と指定のロウキーの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして指定された場合
  • -
  • exists以外の引数にNULLが指定された場合。また、keyに対応する文字列キーのポインタ値がNULLの場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainercontainer,
int32_t key,
GSBoolexists 
)
-
- -

INTEGER型のロウキーに対応するロウを削除します。

-
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
-
-
See Also
gsDeleteRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainercontainer,
int64_t key,
GSBoolexists 
)
-
- -

LONG型のロウキーに対応するロウを削除します。

-
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
-
-
See Also
gsDeleteRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
GSBoolexists 
)
-
- -

高精度のTIMESTAMP型のロウキーに対応するロウを削除します。

-
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして指定された場合
  • -
-
-
See Also
gsDeleteRow
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainercontainer,
const GSCharkey,
GSBoolexists 
)
-
- -

STRING型のロウキーに対応するロウを削除します。

-
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして指定された場合
  • -
-
-
See Also
gsDeleteRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainercontainer,
GSTimestamp key,
GSBoolexists 
)
-
- -

通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。

-
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして指定された場合
  • -
-
-
See Also
gsDeleteRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSBoolexists 
)
-
- -

指定のロウキーに対応するロウを削除します。

-
ロウキーを持つコンテナであれば、ロウキーを構成するカラム数やカラム型によらず使用できます。対応するロウが存在しない場合は何も変更しません。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして指定された場合
  • -
  • exists以外の引数にNULLが指定された場合。また、keyに対応する文字列キーのポインタ値がNULLの場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainercontainer,
const GSCharcolumnName,
GSIndexTypeFlags flags 
)
-
- -

指定された名前のカラムのうち、指定された種別の索引のみを削除します。

-
カラム名と種別のみが設定されたGSIndexInfoを指定してgsDropIndexDetailを呼び出した場合と同様に振る舞います。ただし、flagsにデフォルト種別を含め一つも種別が指定されていない場合、いずれの索引も削除対象にはなりません。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]columnName処理対象のカラムの名前
[in]flags削除する索引種別のフラグ値のビット和。指定できる値はgsDropIndexDetailの場合と同様です
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のカラム名と種別がgsDropIndexDetailの規則に合致しない場合
  • -
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • flags以外の引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsDropIndexDetail (GSContainercontainer,
const GSIndexInfoinfo 
)
-
- -

GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。

-
GSIndexInfoの設定内容は、削除対象の索引を絞り込む条件として使用されます。絞り込み条件は、カラム列、索引種別、索引名の3つに分類されます。それぞれ設定するかどうかは任意です。いずれも設定されていない場合は、作成済みのすべての索引が削除されます。
-
カラム名列またはカラム番号列が設定されている場合、対応するコンテナにおいて実在するものである必要があります。カラム名列とカラム番号列が共に設定されている場合、対応するカラムが互いに一致している必要があります。カラム名列ならびにカラム番号列が共に設定されていない場合、他の絞り込み条件(索引種別、索引名)を満たす任意のカラム列に対する索引が削除対象となります。
-
索引種別が設定されている場合、指定の種別の索引のみが削除対象となります。GS_INDEX_FLAG_DEFAULTが設定されている場合、gsCreateIndexDetailの基準に従い、デフォルト種別の索引が選択されます。それ以外の場合、対象のカラムにおいて許されている索引種別である限り、任意個数の種別を指定できます。複数個の種別が設定されていた場合、削除途中に一部の索引のみが削除された状態のコンテナ情報を参照できることや、エラーが生じるとその状態まま削除操作が終了することがあります。索引をサポートしていないカラムや指定の種別の索引をサポートしていないカラムについては、削除対象にはなりません。索引種別が設定されていない場合、他の絞り込み条件(カラム列、索引名)を満たす任意の種別の索引が削除対象となります。
-
索引名が設定されている場合、指定の名前の索引のみが削除対象となります。索引名の同一性は、gsCreateIndexDetailの基準に従います。索引名が設定されていない場合、他の絞り込み条件(カラム列、索引種別)を満たす、任意の名前の索引ならびに名前のない索引が削除対象となります。
-
削除対象となる索引が一つも存在しない場合、索引の削除は行われません。
-
トランザクションの扱いは、gsCreateIndexDetailと同様です。また、索引種別としてデフォルト種別または単一の種別が設定されており、かつ、複数の索引が削除対象となった場合に、一部の索引のみが削除された状態で他のトランザクションが実行されることがありうるかどうかは未定義です。
-
索引の削除要求の完了直後の状態に関しては、gsDropContainerと同様です。
-
Parameters
- - - -
[in]container処理対象のGSContainer
[in]info処理対象の索引の情報
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 削除対象のカラム、索引名が上記の規則に合致しない場合
  • -
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
3.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainercontainer,
const GSCharname 
)
-
- -

トリガを削除します。

-
指定された名前のトリガが存在しない場合は何も削除しません。
-
Parameters
- - - -
[in]container削除対象のGSContainer
[in]name削除対象のトリガ名
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理のタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainercontainer)
-
- -

これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。

-
通常より信頼性が要求される処理のために使用します。ただし、頻繁に実行すると性能低下を引き起こす可能性が高まります。
-
書き出し対象のクラスタノードの範囲など、挙動の詳細はGridDB上の設定によって変化します。
-
Parameters
- - -
[in]container処理対象のGSContainer
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainercontainer,
GSContainerTypetype 
)
-
- -

指定のコンテナの種別を取得します。

-
現バージョンでは、インスタンス生成時点で常に種別が確定するため、この操作によりGridDBクラスタに問い合わせを行うことはありません。
-
Parameters
- - - -
[in]container処理対象のGSContainer
[out]type指定のコンテナの種別を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_COLLECTIONが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainercontainer,
const void * key,
void * rowObj,
GSBoolexists 
)
-
- -

ロウキーに対応するロウの内容を取得します。

-
ロウキーに対応するカラムが存在する場合のみ使用できます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は次のようになります。 - - - - - - - - - - - - -
コンテナ上の型引数の型
STRING GSChar** ※GSChar*との取り違えに注意
INTEGER int32_t*
LONG int64_t*
TIMESTAMP GSTimeStamp*
複合ロウキーGSRowKey*
-
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainercontainer,
int32_t key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

INTEGER型のロウキーに対応するロウの内容を取得します。

-
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainercontainer,
int64_t key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

LONG型のロウキーに対応するロウの内容を取得します。

-
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。

-
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainercontainer,
const GSCharkey,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

STRING型のロウキーに対応するロウの内容を取得します。

-
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainercontainer,
GSTimestamp key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。

-
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainercontainer,
const void * key,
void * rowObj,
GSBoolexists 
)
-
- -

ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。

-
ロウキーに対応するカラムが存在する場合、かつ、手動コミットモードの場合のみ使用できます。
-
トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しない場合
  • -
  • 自動コミットモードの場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSRowrowObj,
GSBool forUpdate,
GSBoolexists 
)
-
- -

指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。

-
ロウキーを持つコンテナであれば、ロウキーを構成するカラム数やカラム型によらず使用できます。gsGetRowとは異なり、指定のGSRowがクローズされるまで各フィールド値にアクセスすることができます。
-
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
-
自動コミットモードの場合、更新用ロックを要求できません。
-
Parameters
- - - - - - -
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーが存在しない場合
  • -
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーとして設定されていた場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
-
See Also
gsGetRow
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainercontainer,
const void *const * rowObjs,
size_t rowCount,
GSBoolexists 
)
-
- -

指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。

-
指定のロウオブジェクト集合の各ロウについて、配列要素の順序にしたがってgsPutRowを呼び出した場合と同様に新規作成または更新操作を行います。
-
指定のロウオブジェクト集合内に同一のロウキーを持つ複数のロウが存在する場合、ロウオブジェクト集合を構成する配列要素の順序を基準として、同一のロウキーを持つ最も後方にあるロウオブジェクトの内容が反映されます。
-
コンテナの種別ならびに設定によっては、操作できるロウの内容についてgsPutRowと同様の制限が設けられています。具体的な制限事項は、個別のコンテナ種別の定義を参照してください。
-
手動コミットモードの場合、対象のロウがロックされます。
-
自動コミットモードのときに、コンテナならびにロウに対する処理の途中でエラーが発生した場合、コンテナの一部のロウに対する操作結果のみが反映されたままとなることがあります。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]rowObjs新規作成するロウ集合の内容と対応するロウオブジェクト列。このロウオブジェクト列は、個々のロウオブジェクトへのポインタ値の配列により構成されます。rowCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]rowCount新規作成するロウの個数。0の場合、ロウを新規作成せず正常に処理を終えます。
[out]exists現バージョンでは、ポインタ値がNULLではない限り常にGS_FALSEが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • -
  • containerNULLの場合
  • -
  • exists以外のポインタ型引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
  • rowCountが正の値であるにもかかわらず、rowObjsNULLが指定された場合
  • -
  • ロウオブジェクト列を構成する配列要素にNULLが含まれていた場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainercontainer,
const void * key,
const void * rowObj,
GSBoolexists 
)
-
- -

必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応するカラムが存在する場合、ロウキーとコンテナの状態を基に、ロウを新規作成するか、更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクトとは別にロウキーを指定した場合、ロウオブジェクト内のロウキーより優先して使用されます。
-
ロウキーに対応するカラムを持たない場合、常に新規のロウを作成します。別途指定するロウキーには、常にNULLを指定します。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    -
  • 新規作成
      -
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • -
    -
  • -
  • 既存ロウの内容の保持
      -
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • -
    -
  • -
-
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。ロウキーに対応するカラムが存在しない場合、もしくは指定のロウオブジェクト内のキーを用いる場合はNULLを指定します。
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しないにもかかわらず、キーが指定された場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainercontainer,
int32_t key,
const void * rowObj,
GSBoolexists 
)
-
- -

INTEGER型のロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。
-
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainercontainer,
int64_t key,
const void * rowObj,
GSBoolexists 
)
-
- -

LONG型のロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。
-
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
const void * rowObj,
GSBoolexists 
)
-
- -

高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
-
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    -
  • 新規作成
      -
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • -
    -
  • -
  • 既存ロウの内容の保持
      -
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • -
    -
  • -
-
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainercontainer,
const GSCharkey,
const void * rowObj,
GSBoolexists 
)
-
- -

STRING型のロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。
-
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainercontainer,
GSTimestamp key,
const void * rowObj,
GSBoolexists 
)
-
- -

通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
-
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
-
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    -
  • 新規作成
      -
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • -
    -
  • -
  • 既存ロウの内容の保持
      -
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • -
    -
  • -
-
-
手動コミットモードの場合、対象のロウはロックされます。
-
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSRowrowObj,
GSBoolexists 
)
-
- -

必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。

-
ロウキーを構成するカラム数やカラム型によらず使用できます。
-
ロウキーに対応するカラムが存在する場合、ロウキーとコンテナの状態を基に、ロウを新規作成するか、更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクトとは別にロウキーを指定した場合、ロウオブジェクト内のロウキーより優先して使用されます。
-
ロウキーに対応するカラムを持たない場合、常に新規のロウを作成します。この場合、別途指定するロウキーには、常にNULLを指定します。
-
ただし、コンテナの種別ならびに設定によっては、gsPutRowと同様の制限が設けられています。
-
手動コミットモードの場合、対象のロウはロックされます。
-
Parameters
- - - - - -
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー。ロウキーに対応するカラムが存在しない場合、もしくは指定のロウオブジェクト内のキーを用いる場合はNULLを指定します。
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーに対応するカラムが存在しないにもかかわらず、キーが指定された場合
  • -
  • 特定コンテナ固有の制限に反する操作を行った場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainercontainer,
const GSCharqueryString,
GSQuery ** query 
)
-
- -

指定のTQL文を実行するためのクエリを作成します。

-
gsFetchを通じてロウ集合を求める際に更新用ロックのオプションを有効できるのは、指定のコンテナ上に実在しないロウが選択されることのないクエリのみです。たとえば、補間演算を含むクエリに対しては有効にできません。
-
Parameters
- - - - -
[in]container処理対象のGSContainer
[in]queryStringTQL文
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainercontainer,
GSBool enabled 
)
-
- -

コミットモードの設定を変更します。

-
自動コミットモードでは、直接トランザクション状態を制御できず、変更操作が逐次コミットされます。自動コミットモードが有効でない場合、すなわち手動コミットモードの場合は、直接gsCommitを呼び出すかトランザクションがタイムアウトしない限り、指定のコンテナ内で同一のトランザクションが使用され続け、変更操作はコミットされません。
-
自動コミットモードが無効から有効に切り替わる際、未コミットの変更内容は暗黙的にコミットされます。コミットモードに変更がない場合、トランザクション状態は変更されません。
-
Parameters
- - - -
[in]container処理対象のGSContainer
[in]enabled自動コミットモードを有効にするかどうか。GS_TRUEの場合は自動コミットモード、GS_FALSEの場合は手動コミットモードが有効になります。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • モード変更に伴いコミット処理を要求した際に、この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
- -
-
-
-
-
-
GSGridStore
-
-
- - - - - - - - -

-Classes

struct  GSContainerRowEntryTag
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
struct  GSRowKeyPredicateEntryTag
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
- - - - - - - -

-Macros

#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
 GSContainerRowEntryの初期化子です。More...
 
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
 GSRowKeyPredicateEntryの初期化子です。More...
 
- - - - - - - - - - -

-Typedefs

typedef struct GSGridStoreTag GSGridStore
 1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。More...
 
typedef struct
-GSContainerRowEntryTag 
GSContainerRowEntry
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
typedef struct
-GSRowKeyPredicateEntryTag 
GSRowKeyPredicateEntry
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore **store, GSBool allRelated)
 指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStore *store, const GSChar *name)
 指定の名前を持つコレクションを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStore *store, const GSChar *name)
 指定の名前を持つ時系列を削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSCollection **collection)
 指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetContainerInfo (GSGridStore *store, const GSChar *name, GSContainerInfo *info, GSBool *exists)
 指定の名前のコンテナに関する情報を取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSTimeSeries **timeSeries)
 指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutContainer (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSCollectionProperties *properties, GSBool modifiable, GSCollection **collection)
 コレクションを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSTimeSeriesProperties *properties, GSBool modifiable, GSTimeSeries **timeSeries)
 時系列を新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutContainerGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 GSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStore *store, const GSChar *name, GSContainer **container)
 GSRowによりロウ操作できるGSContainerインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutCollectionGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSCollection **collection)
 GSContainerInfoを指定して、コレクションを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStore *store, const GSChar *name, GSCollection **collection)
 GSRowによりロウ操作できるGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsPutTimeSeriesGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSTimeSeries **timeSeries)
 GSContainerInfoを指定して、時系列を新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStore *store, const GSChar *name, GSTimeSeries **timeSeries)
 GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStore *store, const GSChar *name)
 指定の名前を持つコンテナを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsCreateRowByStore (GSGridStore *store, const GSContainerInfo *info, GSRow **row)
 GSContainerInfoを指定して、GSRowを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStore *store, const GSContainerInfo *info, GSRowKey **key)
 GSContainerInfoを指定して、GSRowKeyを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStore *store, GSQuery *const *queryList, size_t queryCount)
 指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStore *store, const GSContainerRowEntry *entryList, size_t entryCount)
 任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStore *store, const GSRowKeyPredicateEntry *const *predicateList, size_t predicateCount, const GSContainerRowEntry **entryList, size_t *entryCount)
 指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStore *store, GSPartitionController **partitionController)
 対応するGridDBクラスタについてのGSPartitionControllerを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStore *store, GSType keyType, GSRowKeyPredicate **predicate)
 指定のGSTypeをロウキーの型とする合致条件を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStore *store, const GSContainerInfo *info, GSRowKeyPredicate **predicate)
 指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
-
- -

GSContainerRowEntryの初期化子です。

-
Since
1.5
- -
-
- -
-
- - - - -
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
-
- -

GSRowKeyPredicateEntryの初期化子です。

-
Since
1.5
- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct GSContainerRowEntryTag GSContainerRowEntry
-
- -

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。

-
Since
1.5
- -
-
- -
-
- - - - -
typedef struct GSGridStoreTag GSGridStore
-
- -

1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。

-
コレクションや時系列といったコンテナの追加・削除・構成変更、ならびに、コンテナを構成するロウの操作機能を提供します。
-
コンテナ種別などの違いによらず、1つのデータベースのコンテナ間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。コンテナ名は、ベースコンテナ名単独、もしくは、ベースコンテナ名の後ろにノードアフィニティ名をアットマーク「@」で連結した形式で表記します。その他、コンテナの定義において使用できるコンテナ名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、コンテナ名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
-
このインタフェースまたはこのインタフェースを通じて得られたインスタンスのインタフェースに対する操作を通じてエラーが発生した場合、エラーに関する次のパラメータを取得できることがあります。 - - - - - - -
パラメータ名説明
address接続先クラスタノードのアドレス・ポート。ホスト名またはIPアドレスとポート番号とをコロン「:」で連結した文字列により構成されます。このインタフェースまたはこのインタフェースを通じて得られたインスタンスのインタフェースにおいて、クラスタへのアクセスを伴う操作を呼び出した際にエラーを検知すると、このパラメータを含むことがあります。このパラメータを含む場合、パラメータが示すクラスタノードにおいてエラーの詳細が記録されていることがあります。
containerエラーに関係しうるコンテナの名前。任意個数のコンテナを一括して扱う操作において、そのうち少なくとも一つのコンテナについての操作を行えないことが判明した場合に、このパラメータを含むことがあります。任意個数のコンテナを扱う具体的な操作については、個々のインタフェースの定義を参照してください。クラスタノードへのリクエスト準備段階でのリソース不足など、どのコンテナの問題か特定し切れないことがあるため、どのようなエラーでもこのパラメータを含むとは限りません。また、複数のコンテナについて操作できない可能性があったとしても、パラメータに含まれるのは高々一つのコンテナの名前のみです。
-
-
この型のポインタを第一引数とする関数のスレッド安全性は保証されません。
-
See Also
GSCollection
-
-GSTimeSeries
-
-GSContainer
-
-gsGetErrorParameterCount
- -
-
- -
-
- -

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。

-
Since
1.5
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore ** store,
GSBool allRelated 
)
-
- -

指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。

-
Parameters
- - - -
[in,out]storeクローズ対象のGSGridStoreインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSGridStoreインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
[in]allRelated指定のGSGridStoreと関連する下位のリソースのうち、未クローズのものすべてをクローズするかどうか。関連する下位のリソースとは、指定のGSGridStoreを介して取得したGSCollectionGSTimeSeries、ならびに、これらのリソースと関連する下位のリソースのことを指します。GS_FALSEを指定した場合、指定のGSGridStoreを介して取得したリソースを個別にクローズする必要があり、すべてクローズした時点で指定のGSGridStore自体のリソースが解放されます。
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsCreateRowByStore (GSGridStorestore,
const GSContainerInfoinfo,
GSRow ** row 
)
-
- -

GSContainerInfoを指定して、GSRowを新規作成します。

-
GSContainerにて規定された制約に合致するよう、GSColumnInfoのリストならびにロウキーの構成を含むカラムレイアウトをGSContainerInfoに指定します。
-
また、コンテナ種別をGSContainerInfoに含めることで、特定のコンテナ種別固有の制約に合致するかどうかを検証できます。ただし、作成されたGSRowに対してgsGetRowSchemaを呼び出したとしても、常に固定の値であるGS_CONTAINER_COLLECTIONがコンテナ種別として設定されたGSContainerInfoが求まります。
-
作成されたGSRowの各フィールドには、GSContainerInfoに含まれる各カラムのGSColumnInfoに基づいた初期値が設定されます。初期値として、GSColumnInfo::optionsに含まれるオプションに応じた次の値が使用されます。 - - - - - - - - - - -
オプション初期値
GS_TYPE_OPTION_DEFAULT_VALUE_NULL NULL。ただし制約に反するロウは作成できない。
GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL 空の値。GSContainerの定義を参照。
(上記いずれも指定なし) 現バージョンでは、GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULLが指定された場合と同様。
(上記オプションを両方指定) GSTypeOptionの定義に基づき矛盾する設定と見なされ、ロウを作成できない。
-
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]infoカラムレイアウトを含むコンテナ情報。その他の内容は無視される
[out]rowGSRowインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • コンテナ種別もしくはカラムレイアウトの制約に合致しない場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
GSContainer
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStorestore,
const GSContainerInfoinfo,
GSRowKey ** key 
)
-
- -

GSContainerInfoを指定して、GSRowKeyを新規作成します。

-
ロウキー以外のカラムに関する情報は無視されます。それ以外はgsCreateRowByStoreと同様に振る舞います。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]infoカラムレイアウトを含むコンテナ情報。その他の内容は無視される
[out]keyGSRowKeyインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ロウキーを持たないコンテナ情報が指定された場合
  • -
  • コンテナ種別もしくはカラムレイアウトの制約に合致しない場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStorestore,
GSType keyType,
GSRowKeyPredicate ** predicate 
)
-
- -

指定のGSTypeをロウキーの型とする合致条件を作成します。

-
合致条件の評価対象とするコンテナは、単一カラムからなるロウキーを持ち、かつ、そのロウキーの型は指定のGSTypeと同一の型でなければなりません。
-
設定可能なロウキーの型は、GSContainerから派生した個別のコンテナ型にて許容されている型のみです。
-
複合ロウキーなどロウキーを構成するカラムの個数によらずに合致条件を作成するには、gsCreateRowKeyPredicateGeneralを使用します。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]keyType合致条件の評価対象とするロウキーの型
[out]predicateGSRowKeyPredicateインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定された型がロウキーとして常にサポート外となる場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
-
See Also
GSContainer
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStorestore,
const GSContainerInfoinfo,
GSRowKeyPredicate ** predicate 
)
-
- -

指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。

-
合致条件の評価対象とするコンテナは、ロウキーを持ち、かつ、指定のGSContainerInfoのロウキーに関するカラム定義と対応づく必要があります。ロウキー以外のカラム定義については対応関係の判定に用いられません。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]info合致条件の判定対象とするロウキーのカラムレイアウトを含む、コンテナ情報。その他の内容は無視される
[out]predicateGSRowKeyPredicateインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定の情報がロウキーを含まないか、ロウキーとして常にサポート外となる場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStorestore,
const GSCharname 
)
-
- -

指定の名前を持つコレクションを削除します。

-
削除済みの場合の扱い、トランザクションの扱い、削除要求完了直後の状態に関しては、gsDropContainerと同様です。
-
Parameters
- - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 種別の異なるコンテナを削除しようとした場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStorestore,
const GSCharname 
)
-
- -

指定の名前を持つコンテナを削除します。

-
削除済みの場合は何も変更しません。
-
処理対象のコンテナにおいて実行中のトランザクションが存在する場合、それらの終了を待ってから削除を行います。
-
コンテナの削除要求が完了した直後は、削除したコンテナの索引やロウなどのために使用されていたメモリやストレージ領域を他の用途にただちに再利用できない場合があります。また、削除処理に関連した処理がクラスタ上で動作することにより、削除前と比べて負荷が高まる期間が一定程度継続する場合があります。
-
Parameters
- - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
gsDropCollection
-
-gsTimeSeries
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStorestore,
const GSCharname 
)
-
- -

指定の名前を持つ時系列を削除します。

-
削除済みの場合は何も変更しません。
-
削除済みの場合の扱い、トランザクションの扱い、削除要求完了直後の状態に関しては、gsDropContainerと同様です。
-
Parameters
- - - -
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 種別の異なるコンテナを削除しようとした場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStorestore,
GSQuery *const * queryList,
size_t queryCount 
)
-
- -

指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。

-
指定のクエリ列に含まれる各GSQueryについて、個別にgsFetchを行った場合と同様にクエリ実行とフェッチを行い、結果のGSRowSetを設定します。GSQueryの実行結果を取り出すには、gsGetRowSetを使用します。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、リストの要素数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。リスト内のGSQueryの実行順序は不定です。
-
指定のクエリ列には、指定のGSGridStoreインスタンスを介して得られた、対応するGSContainerがクローズされていないGSQueryのみを含めることができます。gsFetchと同様、各GSQueryが持つ最後に生成されたGSRowSetを介するロウ操作ができなくなります。同一のインスタンスが配列に複数含まれていた場合、それぞれ異なるインスタンスであった場合と同様に振る舞います。
-
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
-
指定のGSQueryに対応する各GSContainerのコミットモードが自動コミットモード、手動コミットモードのいずれであったとしても、使用できます。トランザクション状態はクエリの実行結果に反映されます。正常に操作が完了した場合、トランザクションタイムアウト時間に到達しない限り、対応する各GSContainerのトランザクションをアボートすることはありません。
-
GSQueryに対する処理の途中でエラーが発生した場合、一部のGSQueryについてのみ新たなGSRowSetが設定されることがあります。また、指定のGSQueryに対応する各GSContainerの未コミットのトランザクションについては、アボートされることがあります。
-
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
-
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]queryList対象とするクエリ列。GSQueryへのポインタ値の配列により構成されます。queryCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]queryCount対象とするクエリ列の要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のGSGridStoreインスタンスを介して得られたGSQuery以外のGSQueryが含まれていた場合
  • -
  • 正しくないパラメータ・構文・命令を含むクエリを実行しようとした場合。たとえば、TQLでは、関数の引数に対応しない型のカラムを指定した場合。具体的な制約は、指定のクエリを作成する機能の各種定義を参照してください
  • -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合
  • -
  • queryCountが正の値であるにもかかわらず、queryListNULLが指定された場合
  • -
  • クエリ列を構成する配列要素にNULLが含まれていた場合
  • -
-
-
See Also
gsFetch
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetCollection (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
GSCollection ** collection 
)
-
- -

指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。

-
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
-
Parameters
- - - - - -
[in]store処理対象のコレクションが格納されているGSGridStore
[in]name処理対象のコレクションの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコレクションが存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名の時系列が存在する場合
  • -
  • 指定の型と既存のカラムレイアウトが一致しない場合
  • -
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStorestore,
const GSCharname,
GSCollection ** collection 
)
-
- -

GSRowによりロウ操作できるGSCollectionインスタンスを取得します。

-
期待するコンテナ種別がGS_CONTAINER_COLLECTIONに限定され、常にGSContainerインスタンスが格納される点を除き、gsGetContainerGeneralと同様に振る舞います。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコレクションが存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名の時系列が存在する場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
gsGetContainerGeneral
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStorestore,
const GSCharname,
GSContainer ** container 
)
-
- -

GSRowによりロウ操作できるGSContainerインスタンスを取得します。

-
次の点を除き、gsGetCollectionもしくはgsGetTimeSeriesと同様に振る舞います。
    -
  • 既存のコンテナの種別ならびにカラムレイアウトに基づきGSContainerインスタンスを返却する
  • -
  • コンテナの種別ならびにカラムレイアウトを指定しないため、これらの不一致に伴うエラーが発生しない
  • -
  • 返却されるGSContainerのロウオブジェクトの型が常にGSRowとなるそれぞれの同名の引数nameの用法についても同様です。
  • -
-
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコンテナが存在しない場合、NULLが設定されます。指定の名前のコンテナが存在し、種別がGS_CONTAINER_COLLECTIONであった場合はGSCollectionGS_CONTAINER_TIME_SERIESであった場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
gsGetCollection
-
-gsGetTimeSeries
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetContainerInfo (GSGridStorestore,
const GSCharname,
GSContainerInfoinfo,
GSBoolexists 
)
-
- -

指定の名前のコンテナに関する情報を取得します。

-
返却されるGSContainerInfoに含まれるコンテナ名は、GridDB上に格納されているものが設定されます。したがって、指定したコンテナ名と比較すると、ASCIIの大文字・小文字表記が異なる場合があります。
-
カラム順序を無視するかどうかについては、無視しない状態に設定されます。この設定は、GSContainerInfo::columnOrderIgnorableを通じて確認できます。
-
現バージョンでは、初期値でのNULL使用有無は未設定状態で求まります。この設定は、GSColumnInfo::optionsを通じて確認できます。
-
Attention
カラム情報の列などの可変長データを格納するために、指定のGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用します。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]store処理対象のコンテナが格納されているGSGridStore
[in]name処理対象のコンテナの名前
[out]info指定の名前のコンテナに関する情報を格納するためのGSContainerInfoへのポインタ値。指定の名前のコンテナが存在しない場合、もしくは、実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
[out]exists処理対象のコンテナが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • exists以外の引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStorestore,
const GSRowKeyPredicateEntry *const * predicateList,
size_t predicateCount,
const GSContainerRowEntry ** entryList,
size_t * entryCount 
)
-
- -

指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。

-
指定のエントリ列に含まれる条件に従い、個別にgsGetRowもしくはgsFetchを呼び出した場合と同様に、ロウの内容を取得します。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、対象コンテナの総数や条件に合致するロウの総数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。
-
指定の条件エントリ列は、コンテナ名と、GSRowKeyPredicateで表現される取得条件との組からなる任意個数の条件エントリから構成されます。同一のGSRowKeyPredicateインスタンスを複数含めることもできます。また、対象とするコンテナとして、コンテナ種別やカラムレイアウトが異なるものを混在させることができます。ただし、コンテナの構成によっては評価できない取得条件が存在します。具体的な制限については、GSRowKeyPredicateに対する各種設定機能の定義を参照してください。コンテナ名または取得条件としてNULLを設定することはできません。
-
取得するエントリ列は、コンテナ名とロウオブジェクト列との組からなるエントリにより構成されます。また、取得するエントリ列には、取得条件として指定したエントリ列のうち、リクエスト時点で実在するコンテナに関するエントリのみが含まれます。同一のコンテナを指す複数のエントリが指定の条件エントリ列に含まれていた場合、取得するエントリ列にはこれらを1つにまとめたエントリが格納されます。同一のリストに複数のロウオブジェクトが含まれる場合、格納される順序はコンテナ種別と対応するGSContainerから派生した個別のコンテナ型の定義に従います。指定のコンテナに対応するロウが1つも存在しない場合、対応するロウオブジェクト列の要素数は0となります。
-
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
-
gsGetRowForUpdateもしくはgsFetchのように、トランザクションを維持し、更新用ロックを要求することはできません。
-
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
-
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
-
Attention
取得するエントリ列ならびにその中に含まれるコンテナ名やロウオブジェクト列の可変長のデータを格納するために、指定のGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]store処理対象のGSGridStore
[in]predicateList対象とするコンテナの名前と取得条件との組からなる条件エントリの列。GSContainerRowEntryの配列により構成されます。predicateCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]predicateCount条件エントリ列の要素数
[out]entryList取得結果エントリ列のアドレスを格納するためのポインタ変数へのポインタ値。取得結果エントリ列はGSContainerRowEntryの配列により構成されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
[out]entryCount取得結果エントリ列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナに関して評価できない取得条件が指定された場合
  • -
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • -
  • この処理または関連するトランザクションのタイムアウト、接続障害が発生した場合
  • -
  • predicateList以外のポインタ型引数にNULLが指定された場合
  • -
  • predicateCountが正の値であるにもかかわらず、predicateListNULLが指定された場合
  • -
  • エントリ列を構成するエントリのコンテナ名もしくは取得条件としてNULLが含まれていた場合
  • -
-
-
See Also
gsGetRow
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStorestore,
GSPartitionController ** partitionController 
)
-
- -

対応するGridDBクラスタについてのGSPartitionControllerを取得します。

-
指定のGSGridStoreをクローズした時点で使用できなくなります。
-
Parameters
- - - -
[in]store処理対象のGSGridStore
[out]partitionControllerGSPartitionControllerインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
GSPartitionController
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetTimeSeries (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
GSTimeSeries ** timeSeries 
)
-
- -

指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。

-
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
-
Parameters
- - - - - -
[in]store処理対象の時系列が格納されているGSGridStore
[in]name処理対象の時系列の名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前の時系列が存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名のコレクションが存在する場合
  • -
  • 指定の型と既存のカラムレイアウトが一致しない場合
  • -
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStorestore,
const GSCharname,
GSTimeSeries ** timeSeries 
)
-
- -

GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。

-
期待するコンテナ種別がGS_CONTAINER_TIME_SERIESに限定され、常にGSTimeSeriesインスタンスが格納される点を除き、gsGetContainerGeneralと同様に振る舞います。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[out]timeSeriesGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前の時系列が存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名のコレクションが存在する場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
See Also
gsGetContainerGeneral
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutCollection (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSCollectionPropertiesproperties,
GSBool modifiable,
GSCollection ** collection 
)
-
- -

コレクションを新規作成または変更します。

-
同名のコンテナが存在しない場合、指定のバインディング情報により定義されたカラムレイアウトに従い、新規にコレクションを作成します。すでに同名のコレクションが存在し、既存のカラムレイアウトの内容がすべて一致する場合、実行中のトランザクションを待機する点を除きgsGetCollectionと同様に振る舞います。
-
modifiableGS_TRUEであり、すでに同名のコレクションが存在する場合、必要に応じカラムレイアウトを変更します。変更する際、要求したカラムと同一の名前・型の既存のカラムは保持されます。一致しないカラムのうち、既存のコレクションにない名前のカラムは追加し、要求側にないカラムはデータも含め削除します。型が異なる同名のカラムが存在する場合は失敗します。また、ロウキーに対応するカラムの追加と削除はできません。
-
コンテナにトリガが設定されており、カラムレイアウト変更によってトリガが通知対象としているカラムが削除された場合、そのカラムはトリガの通知対象から削除されます。
-
新たに追加されるカラムの値は、GSContainerにて定義されている空の値を初期値として初期化されます。
-
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
-
すでに同名のコレクションが存在し、かつ、該当するコレクションにおいて実行中のトランザクションが存在する場合、それらの終了を待機してから処理を行います。
-
ロウキーを持つコレクションを新規に作成する場合、ロウキーに対し、gsCreateIndexにて定義されているデフォルト種別の索引が作成されます。この索引は、削除することができます。
-
現バージョンでは、コンテナの規模など諸条件を満たした場合、カラムレイアウトの変更開始から終了までの間に、処理対象のコンテナに対してコンテナ情報の参照、更新ロックなしでのロウの参照操作を行える場合があります。それ以外の操作は、GSContainerでの定義通り待機させる場合があります。カラムレイアウトの変更途中に別の操作が行われる場合は、変更前のカラムレイアウトが使用されます。
-
Parameters
- - - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]propertiesコレクションの構成オプション。NULLを指定できます。現バージョンでは使用されておらず、内容はチェックされません。
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名の時系列が存在する場合。
  • -
  • modifiableGS_FALSEであり、既存の同名のコレクションに関してカラムレイアウトの内容が一致しない場合
  • -
  • modifiableGS_TRUEであり、既存の同名のコレクションに関して変更できない項目を変更しようとした場合
  • -
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • properties以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutCollectionGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSCollection ** collection 
)
-
- -

GSContainerInfoを指定して、コレクションを新規作成または変更します。

-
コンテナ種別がGS_CONTAINER_COLLECTIONに限定され、GSContainerインスタンスが格納される点を除き、gsPutContainerGeneralと同様に振る舞います。
-
Parameters
- - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[in]info処理対象のコレクションの情報。コンテナ種別には常にGS_CONTAINER_COLLECTIONを指定
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • コンテナ種別以外の指定内容に関して、gsPutContainerGeneralの規則に合致しない場合。また、コンテナ種別に関する制限に合致しない場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • name以外のポインタ型引数にNULLが指定された場合
  • -
-
-
See Also
gsPutContainerGeneral
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutContainer (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSContainerInfoinfo,
GSBool modifiable,
GSContainer ** container 
)
-
- -

バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。

-
主に、バインディング情報を指定して、追加設定を持つコンテナを新規作成する場合に使用します。
-
カラムレイアウトならびにカラム順序の無視設定をGSContainerInfoに指定できない点を除けば、gsPutContainerGeneralと同様です。
-
Parameters
- - - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]info処理対象のコンテナの情報。NULLの場合は無視される
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。GS_CONTAINER_COLLECTIONを指定した場合はGSCollectionGS_CONTAINER_TIME_SERIESを指定した場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • nameならびにinfo引数の内容が規則に合致しない場合。また、指定のコンテナ種別に対応するコンテナ新規作成・変更関数の規則に合致しない場合
  • -
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • name以外のポインタ型引数にNULLが指定された場合
  • -
-
-
See Also
gsPutCollection
-
-gsPutTimeSeries
-
-gsPutContainerGeneral
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutContainerGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSContainer ** container 
)
-
- -

GSContainerInfoを指定して、コンテナを新規作成または変更します。

-
次の点を除き、gsPutCollectionもしくはgsPutTimeSeriesと同様に振る舞います。
    -
  • GSContainerInfoを用いてコンテナ種別、カラムレイアウト、ならびに、必要に応じ時系列構成オプションを指定する
  • -
  • 返却されるGSContainerのロウオブジェクトの型が常にGSRowとなるそれぞれの同名の引数modifiableの用法についても同様です。
  • -
-
-
コンテナに関する情報の指定方法の一覧は次の通りです。 - - - - - - - - - - - - - - - - - - -
項目引数説明
コンテナ名nameまたはinfo 少なくともいずれかの引数にNULLではない値を指定する。両方に指定する場合、異なる値を指定してはならない。
コンテナ種別info GS_CONTAINER_COLLECTIONを指定した場合、gsPutCollectionと同様の振る舞いとなる。GS_CONTAINER_TIME_SERIESを指定した場合、gsPutTimeSeriesと同様の振る舞いとなる。
カラムレイアウトinfo GSContainerにて規定された制約に合致するようGSColumnInfoのリストならびにロウキーの構成を設定する。ただし現バージョンでは、初期値でのNULL使用有無が設定されたGSColumnInfo::optionsを持つGSColumnInfoを含めることはできない。
カラム順序の無視info 無視する場合、同名の既存のコンテナのカラム順序と一致するかどうかを検証しない。
時系列構成オプションinfo コンテナ種別がGS_CONTAINER_TIME_SERIESの場合のみ、NULLではない値を指定できる。
索引設定info 現バージョンでは無視される。今後のバージョンでは、gsCreateIndexの規則に合致しない設定が含まれていた場合、エラーとなる可能性がある。
トリガ設定info 現バージョンでは無視される。今後のバージョンでは、gsCreateTriggerの規則に合致しない設定が含まれていた場合、エラーとなる可能性がある。
コンテナ類似性info NULL以外を指定し新規作成する場合、指定の内容が反映される。既存コンテナの設定を変更することはできない。NULLを指定した場合は無視される。
-
-
Parameters
- - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[in]info処理対象のコンテナの情報
[in]modifiable既存コンテナのカラムレイアウト変更を許可するかどうか
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。GS_CONTAINER_COLLECTIONを指定した場合はGSCollectionGS_CONTAINER_TIME_SERIESを指定した場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • nameならびにinfo引数の内容が規則に合致しない場合。また、指定のコンテナ種別に対応するコンテナ新規作成・変更関数の規則に合致しない場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • name以外のポインタ型引数にNULLが指定された場合
  • -
-
-
See Also
gsPutCollection
-
-gsPutTimeSeries
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStorestore,
const GSContainerRowEntryentryList,
size_t entryCount 
)
-
- -

任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。

-
指定のエントリ列に含まれる各ロウオブジェクトについて、個別にgsPutRowを呼び出した場合と同様に新規作成または更新操作を行います。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、対象コンテナの総数や指定のロウオブジェクトの総数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。
-
指定のエントリ列は、コンテナ名とロウオブジェクト列との組からなる任意個数のエントリから構成されます。対象とするコンテナとして、コンテナ種別やカラムレイアウトが異なるものを混在させることができます。ただし、すでに存在するコンテナでなければなりません。エントリ列のコンテナ名としてNULLを設定することはできません。また、ロウオブジェクト列の要素数が正ならば、ロウオブジェクト列の配列アドレスとしてNULLを設定することはできません。
-
各ロウオブジェクト列には、対象のコンテナと同一のカラムレイアウトのGSRowのみを任意個数含めることができます。現バージョンでは、カラム順序についてもすべて同一でなければなりません。ロウオブジェクト列の要素としてNULLを含めることはできません。
-
コンテナの種別ならびに設定によっては、操作できるロウの内容についてgsPutRowと同様の制限が設けられています。具体的な制限事項は、gsPutRowの定義を参照してください。
-
指定のエントリ列内に同一コンテナを対象とした同一ロウキーを持つ複数のロウオブジェクト列が存在する場合、異なるリスト間であればエントリ列の要素順、同一ロウオブジェクト列内であればその要素順を基準として、同値のロウキーを持つ最も後方にあるロウオブジェクトの内容が反映されます。
-
トランザクションを維持し、ロックを保持し続けることはできません。ただし、既存のトランザクションが対象ロウに影響するロックを確保している場合、すべてのロックが解放されるまで待機し続けます。
-
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
-
各コンテナならびにロウに対する処理の途中でエラーが発生した場合、一部のコンテナの一部のロウに対する操作結果のみが反映されたままとなることがあります。
-
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
-
Attention
エントリ列に含まれるロウオブジェクトへのアドレスとしてGSRow以外のものが含まれており、異常を検知できなかった場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]store処理対象のGSGridStore
[in]entryList対象とするコンテナの名前とロウオブジェクト列からなるエントリの列。GSContainerRowEntryの配列により構成されます。entryCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]entryCountエントリ列の要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 対象とするコンテナが存在しない場合、また、対象とするコンテナとロウオブジェクトとのカラムレイアウトが一致しない場合
  • -
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • -
  • この処理または関連するトランザクションのタイムアウト、接続障害が発生した場合、またはサポート範囲外の値がロウオブジェクトに含まれていた場合
  • -
  • storeNULLの場合
  • -
  • queryCountが正の値であるにもかかわらず、queryListNULLが指定された場合
  • -
  • エントリ列に含まれるロウオブジェクトへのアドレスとしてGSRow以外のものが含まれており、異常検知に成功した場合
  • -
  • エントリ列を構成するエントリのコンテナ名としてNULLが含まれていた場合、ロウオブジェクト列の要素数が正であるにも関わらずロウオブジェクト列の配列アドレスとしてNULLが含まれていた場合、また、ロウオブジェクト列の要素としてNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutTimeSeries (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSTimeSeriesPropertiesproperties,
GSBool modifiable,
GSTimeSeries ** timeSeries 
)
-
- -

時系列を新規作成または変更します。

-
同名のコンテナが存在しない場合、指定のバインディング情報により定義されたカラムレイアウトに従い、新規に時系列を作成します。すでに同名の時系列が存在し、既存のカラムレイアウトの内容がすべて一致する場合、実行中のトランザクションを待機する点を除きgsGetTimeSeriesと同様に振る舞います。
-
modifiableGS_TRUEであり、すでに同名の時系列が存在する場合、必要に応じカラムレイアウトを変更します。変更する際、要求したカラムと同一の名前・型の既存のカラムは保持されます。一致しないカラムのうち、既存の時系列にない名前のカラムは追加し、要求側にないカラムはデータも含め削除します。型が異なる同名のカラムが存在する場合は失敗します。また、ロウキーに対応するカラムの追加と削除、時系列構成オプションの変更はできません。時系列構成オプションを指定する場合は、既存の設定内容とすべて同値にする必要があります。
-
コンテナにトリガが設定されており、カラムレイアウト変更によってトリガが通知対象としているカラムが削除された場合、そのカラムはトリガの通知対象から削除されます。
-
新たに追加されるカラムの値は、gsPutCollectionの定義を参照してください。
-
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
-
すでに同名の時系列が存在し、かつ、該当する時系列において実行中のトランザクションが存在する場合、それらの終了を待機してから処理を行います。
-
Parameters
- - - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]properties時系列の構成オプション。NULLを指定すると、同名の時系列が存在する場合は既存の設定が継承され、存在しない場合は初期設定を指定したものとみなされます。初期設定とは、GS_TIME_SERIES_PROPERTIES_INITIALIZERにより初期化した時系列構成オプションと同値の設定のことです。
[in]modifiable既存時系列のカラムレイアウト変更を許可するかどうか
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 同名の時系列が存在する場合。
  • -
  • modifiableGS_FALSEであり、既存の同名の時系列に関してカラムレイアウトの内容が一致しない場合
  • -
  • modifiableGS_TRUEであり、既存の同名の時系列に関して変更できない項目を変更しようとした場合
  • -
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • properties以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutTimeSeriesGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSTimeSeries ** timeSeries 
)
-
- -

GSContainerInfoを指定して、時系列を新規作成または変更します。

-
コンテナ種別がGS_CONTAINER_TIME_SERIESに限定され、GSTimeSeriesインスタンスが格納される点を除き、gsPutTimeSeriesGeneralと同様に振る舞います。
-
Parameters
- - - - - - -
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[in]info処理対象の時系列の情報。コンテナ種別には常にGS_CONTAINER_TIME_SERIESを指定
[in]modifiable既存時系列のカラムレイアウト変更を許可するかどうか
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • コンテナ種別以外の指定内容に関して、gsPutContainerGeneralの規則に合致しない場合。また、コンテナ種別に関する制限に合致しない場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • name以外のポインタ型引数にNULLが指定された場合
  • -
-
-
See Also
gsPutContainerGeneral
-
Since
1.5
- -
-
-
-
-
-
GSGridStoreFactory
-
-
- - - - - -

-Typedefs

typedef struct
-GSGridStoreFactoryTag 
GSGridStoreFactory
 GSGridStoreインスタンスを管理します。More...
 
- - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory **factory, GSBool allRelated)
 必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。More...
 
GS_DLL_PUBLIC
-GSGridStoreFactory
-*GS_API_CALL 
gsGetDefaultFactory ()
 デフォルトのGSGridStoreFactoryインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount, GSGridStore **store)
 指定のプロパティを持つGSGridStoreを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount)
 指定のファクトリの設定を変更します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSGridStoreFactoryTag GSGridStoreFactory
-
- -

GSGridStoreインスタンスを管理します。

-
GSGridStoreインスタンス共通のクライアント設定や使用済みのコネクションを管理します。
-
GridDBにアクセスするためには、このファクトリを介してGSGridStoreインスタンスを取得する必要があります。
-
この型のポインタを第一引数とする関数は、すべてスレッド安全です。
-
追加の環境設定を行うことで、次の機能を使用できるようになります。
-
SSL接続
アドバンスド機能用ライブラリを使用できるよう設定することで、クラスタもしくはアドレスプロバイダへのTCP接続においてSSL接続を選択できるようになります。アドバンスド機能用ライブラリの設定方法については、GridDB機能リファレンスを参照してください。
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory ** factory,
GSBool allRelated 
)
-
- -

必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。

-
Note
現バージョンでは、何もクローズ処理を行いません。
-
Parameters
- - - -
[in,out]factory対象とするGSGridStoreFactoryインスタンスのポインタ変数へのポインタ値
[in]allRelated現バージョンでは、結果に影響しません。
-
-
- -
-
- -
-
- - - - - - - -
GS_DLL_PUBLIC GSGridStoreFactory* GS_API_CALL gsGetDefaultFactory ()
-
- -

デフォルトのGSGridStoreFactoryインスタンスを取得します。

-
Returns
GSGridStoreFactoryインスタンスへのポインタ値
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactoryfactory,
const GSPropertyEntryproperties,
size_t propertyCount,
GSGridStore ** store 
)
-
- -

指定のプロパティを持つGSGridStoreを取得します。

-
GSGridStoreを取得した時点では、各GSContainerを管理するマスタノード(以下、マスタ)のアドレス探索を必要に応じて行うだけであり、認証処理は行われません。実際に各GSContainerに対応するノードに接続する必要が生じたタイミングで、認証処理が行われます。
-
以下のプロパティを指定できます。サポート外の名称のプロパティは無視されます。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
名称説明
host 接続先ホスト名。IPアドレス(IPV4のみ)も可。マスタを手動指定する場合は必須。マスタを自動検出する場合は設定しない。notificationMemberおよびnotificationProviderプロパティと同時に指定することはできない
port 接続先ポート番号。0から65535までの数値の文字列表現。マスタを手動指定する場合は必須。マスタを自動検出する場合は設定しない
notificationAddress マスタ自動検出に用いられる通知情報を受信するためのIPアドレス(IPv4のみ)。省略時はデフォルトのアドレスを使用。notificationMemberおよびnotificationProviderプロパティと同時に指定することはできない
notificationPort マスタ自動検出に用いられる通知情報を受信するためのポート番号。0から65535までの数値の文字列表現。省略時はデフォルトのポートを使用
clusterName クラスタ名。接続先のクラスタに設定されているクラスタ名と一致するかどうかを確認するために使用される。省略時もしくは空文字列を指定した場合、クラスタ名の確認は行われない。
database 接続先のデータベース名。省略時は全てのユーザがアクセス可能な「public」データベースに自動接続される。接続ユーザは接続データベースに属するコンテナを操作できる。
user ユーザ名
password ユーザ認証用のパスワード
consistency 一貫性レベル。次のいずれかの文字列を指定できる。
-
"IMMEDIATE"
-
他のクライアントからの更新結果は、該当トランザクションの完了後即座に反映される
-
"EVENTUAL"
-
他のクライアントからの更新結果は、該当トランザクションが完了した後でも反映されない場合がある。Containerに対する更新操作は実行できない
-
-省略時は"IMMEDIATE"が指定されたものとみなされる
transactionTimeout トランザクションタイムアウト時間の最低値。関係するGSContainerにおける各トランザクションの開始時点から適用。0からINTEGER型の最大値までの値の文字列表現であり、単位は秒。ただし、タイムアウト時間として有効に機能する範囲に上限があり、上限を超える指定は上限値が指定されたものとみなされる。0の場合、後続のトランザクション処理がタイムアウトエラーになるかどうかは常に不定となる。省略時は接続先GridDB上のデフォルト値を使用
failoverTimeout フェイルオーバ処理にて新たな接続先が見つかるまで待機する時間の最低値。0からINTEGER型の最大値までの数値の文字列表現であり、単位は秒。0の場合、フェイルオーバ処理を行わない。省略時は指定のファクトリの設定値を使用
containerCacheSize コンテナキャッシュに格納するコンテナ情報の最大個数。0からINTEGER型の最大値までの数値の文字列表現。値が0の場合、コンテナキャッシュを使用しないことを意味する。GSContainerを取得する際にキャッシュにヒットした場合は、GridDBへのコンテナ情報の問い合わせを行わない。省略時は既存の設定値を使用。バージョン1.5よりサポート
notificationMember 固定リスト方式を使用して構成されたクラスタに接続する場合に、クラスタノードのアドレス・ポートのリストを次のように指定する。
(アドレス1):(ポート1),(アドレス2):(ポート2),...
notificationAddressおよびnotificationProviderプロパティと同時に指定することはできない。バージョン2.9よりサポート
notificationProvider プロバイダ方式を使用して構成されたクラスタに接続する場合に、アドレスプロバイダのURLを指定する。notificationAddressおよびnotificationMemberプロパティと同時に指定することはできない。バージョン2.9よりサポート
applicationName アプリケーションの名前。アプリケーションの識別を補助するための情報として、接続先のクラスタ上での各種管理情報の出力の際に含められる場合がある。ただし、アプリケーションの同一性をどのように定義するかについては関与しない。省略時はアプリケーション名の指定がなかったものとみなされる。空文字列は指定できない。バージョン4.2よりサポート
timeZone タイムゾーン情報。TQLでのTIMESTAMP値演算などに使用される。「±hh:mm」または「±hhmm」形式によるオフセット値(±+または-hhは時、mmは分)、「Z」(+00:00に相当)、「auto」(実行環境に応じ自動設定)のいずれかを指定する。autoが使用できるのは夏時間を持たないタイムゾーンに限定される。バージョン4.3よりサポート
authentication 認証種別。次のいずれかの文字列を指定できる。
-
"INTERNAL"
-
クラスタ上で管理されているアカウント情報に基づいた、内部認証
-
"LDAP"
-
クラスタ外にあるLDAPサーバで管理されているアカウント情報に基づいた、外部認証。LDAP接続設定のないクラスタに接続する場合、もしくは、管理ユーザを使用する場合は指定できない
-
-省略時は自動的に認証種別が選択される。原則として指定は不要。非管理ユーザについて内部認証と外部認証を併用するクラスタへの接続の際に、内部認証を用いる場合などに指定する。バージョン4.5よりサポート
sslMode クラスタへの接続においてSSLの使用有無の判断に用いられるモード。次のいずれかの文字列を指定できる。
-
"DISABLED"
-
SSLを常に使用しない
-
"PREFERRED"
-
可能な限りSSLを使用する。SSL接続・非SSL接続共に使用できる場合はSSL接続を使用する
-
"VERIFY"
-
SSLを常に使用する。サーバ検証あり
-
-SSL接続を選択できる環境設定(詳細: GSGridStoreFactory)の場合のみ指定できる。それ以外の場合は、プロパティの値によらず指定できない。SSL接続を選択できる場合、省略時は"PREFERRED"が指定されたものとみなされる。バージョン4.5よりサポート。VERIFYはバージョン4.6よりサポート。
connectionRoute クラスタ接続時における通信経路。次の文字列を指定できる。
-
"PUBLIC"
-
クラスタの外部通信経路が設定されている場合に、外部通信経路を経由した接続を行う
-
-省略時は通常のクラスタ通信経路を用いた接続が行われる。外部接続が必要な場合のみ指定する。バージョン5.1.1よりサポート
-
-
クラスタ名、データベース名、ユーザ名、パスワードについては、ASCIIの大文字・小文字表記の違いがいずれも区別されます。その他、これらの定義に使用できる文字種や長さの上限などの制限については、GridDB機能リファレンスを参照してください。ただし、制限に反する文字列をプロパティ値として指定した場合、各ノードへの接続のタイミングまでエラーが検知されないことや、認証情報の不一致など別のエラーになることがあります。
-
取得のたびに、新たなGSGridStoreインスタンスが生成されます。異なるGSGridStoreインスタンスならびに関連するリソースに対する操作は、スレッド安全です。すなわち、ある2つのリソースがそれぞれGSGridStoreインスタンスを基にして生成されたものまたはGSGridStoreインスタンスそのものであり、かつ、該当する関連GSGridStoreインスタンスが異なる場合、一方のリソースに対してどのスレッドからどのタイミングで関連する関数が呼び出されていたとしても、他方のリソースの関連する関数を呼び出すことができます。ただし、GSGridStore自体のスレッド安全性は保証されていないため、同一GSGridStoreインスタンスに対して複数スレッドから任意のタイミングで関連する関数を呼び出すことはできません。
-
Parameters
- - - - - -
[in]factory取得元のGSGridStoreFactoryインスタンス。NULLの場合、gsGetDefaultFactoryにより得られるインスタンスと同一のものが使用されます。
[in]properties取得設定を指示するためのプロパティ。GSPropertyEntryの配列により構成されます。エントリ数が0の場合、この配列を参照することはなく、NULLを指定することもできます。エントリを構成する名前もしくは値にNULLを含めることはできません。
[in]propertyCountpropertiesとして引数に指定するプロパティのエントリ数。
[out]storeGSGridStoreインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のホストについて名前解決できなかった場合
  • -
  • 指定のプロパティが上で説明した形式・制限に合致しないことを検知できた場合
  • -
  • storeNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactoryfactory,
const GSPropertyEntryproperties,
size_t propertyCount 
)
-
- -

指定のファクトリの設定を変更します。

-
設定の変更は、指定のファクトリより生成されたGSGridStore、ならびに、今後指定のファクトリで生成されるGSGridStoreに反映されます。
-
以下のプロパティを指定できます。サポート外の名称のプロパティは無視されます。 - - - - - - -
名称説明
maxConnectionPoolSize 内部で使用されるコネクションプールの最大コネクション数。0からINTEGER型の最大値までの数値の文字列表現。値が0の場合、コネクションプールを使用しないことを意味する。省略時は既存の設定値を使用
failoverTimeout フェイルオーバ処理にて新たな接続先が見つかるまで待機する時間の最低値。0からINTEGER型の最大値までの数値の文字列表現であり、単位は秒。0の場合、フェイルオーバ処理を行わない。省略時は既存の設定値を使用
-
-
Parameters
- - - - -
[in]factory取得元のGSGridStoreFactoryインスタンス。NULLの場合、gsGetDefaultFactoryにより得られるインスタンスと同一のものが使用されます。
[in]properties取得設定を指示するためのプロパティ。GSPropertyEntryの配列により構成されます。エントリ数が0の場合、NULLを指定することもできます。エントリを構成する名前もしくは値にNULLを含めることはできません。
[in]propertyCountpropertiesとして引数に指定するプロパティのエントリ数。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のプロパティが上で説明した形式に合致しない場合
  • -
  • propertiesNULLが指定された場合
  • -
-
- -
-
-
-
-
-
GSPartitionController
-
-
- - - - - -

-Typedefs

typedef struct
-GSPartitionControllerTag 
GSPartitionController
 パーティション状態の取得や操作のためのコントローラです。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController **controller)
 指定のGSPartitionControllerインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionController *controller, int32_t *partitionCount)
 対象とするGridDBクラスタのパーティション数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionController *controller, int32_t partitionIndex, int64_t *containerCount)
 指定のパーティションに属するコンテナの総数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionController *controller, int32_t partitionIndex, int64_t start, const int64_t *limit, const GSChar *const **nameList, size_t *size)
 指定のパーティションに所属するコンテナの名前の一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar **address)
 指定のパーティションに対応するオーナノードのアドレスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar *host)
 優先的に選択されるホストのアドレスを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionController *controller, const GSChar *containerName, int32_t *partitionIndex)
 指定のコンテナ名に対応するパーティションインデックスを取得します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSPartitionControllerTag GSPartitionController
-
- -

パーティション状態の取得や操作のためのコントローラです。

-
パーティションとは、データを格納する論理的な領域です。GridDBクラスタ内のデータ配置に基づいた操作を行うために使用します。
-
Since
1.5
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSCharhost 
)
-
- -

優先的に選択されるホストのアドレスを設定します。

-
バックアップノードへの接続など、可能な接続先が複数存在する場合に、設定されたアドレスが候補に含まれていれば常に選択されるようになります。それ以外の場合は設定が無視されます。
-
Parameters
- - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[in]host優先的に選択されるホストのアドレス。IPアドレス(IPv4のみ)も可。NULLの場合、設定が解除される
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • controller引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • アドレスの名前解決に失敗した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController ** controller)
-
- -

指定のGSPartitionControllerインスタンスを解放します。

-
Parameters
- - -
[in,out]controllerクローズ対象のGSPartitionControllerインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSPartitionControllerインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar *const ** addressList,
size_t * size 
)
-
- -

指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。

-
オーナノードとは、gsGetGridStoreおける一貫性レベルとして"EVENTUAL"を指定した場合に、優先的に選択されるノードのことです。
-
一覧の順序に関しては不定です。重複するアドレスが含まれることはありません。
-
Attention
アドレス一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressListアドレスの文字列表現一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionControllercontroller,
int32_t partitionIndex,
int64_t * containerCount 
)
-
- -

指定のパーティションに属するコンテナの総数を取得します。

-
コンテナ数を求める際の計算量は、コンテナ数にはおおむね依存しません。
-
Parameters
- - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値
[out]containerCountコンテナ数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionControllercontroller,
int32_t partitionIndex,
int64_t start,
const int64_t * limit,
const GSChar *const ** nameList,
size_t * size 
)
-
- -

指定のパーティションに所属するコンテナの名前の一覧を取得します。

-
指定のパーティションについてコンテナの新規作成・構成変更・削除が行われたとしても、該当コンテナを除くとその前後で一覧の取得結果の順序が変わることはありません。それ以外の一覧の順序に関しては不定です。重複する名前が含まれることはありません。
-
取得件数の上限が指定された場合、上限を超える場合、後方のものから切り捨てられます。指定条件に該当するものが存在しない場合、空のリストが求まります。
-
Attention
コンテナ名一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[in]start取得範囲の開始位置。0以上の値
[in]limit取得件数の上限。NULLの場合、上限なしとみなされる
[out]nameListコンテナ名一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • limit以外のポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionControllercontroller,
int32_t * partitionCount 
)
-
- -

対象とするGridDBクラスタのパーティション数を取得します。

-
対象とするGridDBクラスタにおけるパーティション数設定の値を取得します。一度取得した結果はキャッシュされ、次にクラスタ障害・クラスタノード障害を検知するまで再びGridDBクラスタに問い合わせることはありません。
-
Parameters
- - - -
[in]controller処理対象のGSPartitionController
[out]partitionCountパーティション数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、-1が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar *const ** addressList,
size_t * size 
)
-
- -

指定のパーティションに対応するノードのアドレス一覧を取得します。

-
一覧の順序に関しては不定です。重複するアドレスが含まれることはありません。
-
Attention
アドレス一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressListアドレスの文字列表現一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionControllercontroller,
const GSCharcontainerName,
int32_t * partitionIndex 
)
-
- -

指定のコンテナ名に対応するパーティションインデックスを取得します。

-
一度GridDBクラスタが構築されると、コンテナの所属先のパーティションが変化することはなく、パーティションインデックスも一定となります。指定の名前に対応するコンテナが存在するかどうかは、結果に依存しません。
-
パーティションインデックスの算出に必要とする情報はキャッシュされ、次にクラスタ障害・クラスタノード障害を検知するまで再びGridDBクラスタに問い合わせることはありません。
-
Parameters
- - - - -
[in]controller処理対象のGSPartitionController
[in]containerNameコンテナ名
[out]partitionIndexパーティションインデックスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、-1が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • コンテナ名として許可されない文字列が指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar ** address 
)
-
- -

指定のパーティションに対応するオーナノードのアドレスを取得します。

-
オーナノードとは、gsGetGridStoreおける一貫性レベルとして"IMMEDIATE"を指定した場合に、常に選択されるノードのことです。
-
Attention
アドレスを格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressアドレスの文字列表現を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のパーティションインデックスが指定された場合
  • -
  • この処理のタイムアウト、接続障害が発生した場合
  • -
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • -
-
-
Since
1.5
- -
-
-
-
-
-
GSQuery
-
-
- - - - - - - - - -

-Typedefs

-typedef struct GSQueryTag GSQuery
 特定のGSContainerに対応付けられたクエリを保持し、結果取得方法の設定ならびに実行・結果取得を行う機能を持ちます。
 
typedef GSEnum GSFetchOption
 
typedef GSEnum GSQueryOrder
 
- - - - - - - -

-Enumerations

enum  GSFetchOptionTag { GS_FETCH_LIMIT, -GS_FETCH_PARTIAL_EXECUTION = (GS_FETCH_LIMIT + 2) - }
 クエリ実行結果を取得する際のオプション項目です。More...
 
enum  GSQueryOrderTag { GS_ORDER_ASCENDING, -GS_ORDER_DESCENDING - }
 クエリにおける要求ロウ順序を表します。More...
 
- - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery **query)
 指定のGSQueryインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQuery *query, GSBool forUpdate, GSRowSet **rowSet)
 オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQuery *query, GSFetchOption fetchOption, const void *value, GSType valueType)
 結果取得に関するオプションを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQuery *query, GSRowSet **rowSet)
 直近に実行した結果のGSRowSetを取得します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef GSEnum GSFetchOption
-
-
See Also
GSFetchOptionTag
- -
-
- -
-
- - - - -
typedef GSEnum GSQueryOrder
-
-
See Also
GSQueryOrderTag
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSFetchOptionTag
-
- -

クエリ実行結果を取得する際のオプション項目です。

- - - -
Enumerator
GS_FETCH_LIMIT  -

取得するロウの数の最大値を設定するために使用します。

-
実行結果のロウ数が最大値を超えた場合、GSRowSetで得られる順番で先頭から最大値の分だけが取得できます。それ以降のロウは取得できません。
-
サポートされる設定値の型は、INTEGERまたはLONGです。負の値は指定できません。設定が省略された場合、上限は設定されません。
-
GS_FETCH_PARTIAL_EXECUTION  -

部分実行モードを設定するために使用します。

-
部分実行モードでは、クエリの中間処理や結果送受信に用いるバッファのサイズなどがなるべく一定の範囲に収まるよう、必要に応じて実行対象のデータ範囲を分割し、この部分範囲ごとに実行とフェッチをリクエストすることがあります。そのため、GSRowSetを取得した時点で一部の範囲の結果が求まっていないことや、結果ロウを順に参照していく段階で、残りの範囲を部分的に実行していくことがあります。
-
部分実行モードは、現バージョンでは次の条件すべてを満たすクエリに使用できます。また、GS_FETCH_LIMITオプションと併用することができます。条件を満たさない場合でも、各種フェッチオプションの設定時点ではエラーを検知しない場合があります。
    -
  • TQL文からなるクエリであること
  • -
  • TQL文において、選択式が「*」のみからなり、ORDER BY節を含まないこと
  • -
  • 対応するGSContainerが個々の部分的なクエリ実行時点において常に自動コミットモードに設定されていること
  • -
-
-
部分実行モードでは、対応するGSContainerのトランザクション分離レベルや状態に基づき、個々の部分的なクエリ実行時点において参照可能なロウが使用されます。ただし、クエリ全体の実行開始時点で存在しないロウは、実行対象から外れる場合があります。
-
部分実行モードを有効にした場合にGSRowSetに対して使用できない操作や特有の挙動については、個別の定義を参照してください。
-
サポートされる設定値の型は、BOOLのみです。部分実行モードを有効にするには、GS_TRUEと一致する値を指定します。現バージョンでは、未設定の場合には部分実行モードを有効にしません。
-
Since
4.0
-
- -
-
- -
-
- - - - -
enum GSQueryOrderTag
-
- -

クエリにおける要求ロウ順序を表します。

-
各種クエリ機能別に定義される判定対象を基準として、順序指定を行うために使用します。具体的な判定対象は、個別の機能によって異なります。
- - - -
Enumerator
GS_ORDER_ASCENDING  -

要求ロウ順序が昇順であることを表します。

-
GS_ORDER_DESCENDING  -

要求ロウ順序が降順であることを表します。

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery ** query)
-
- -

指定のGSQueryインスタンスを解放します。

-
Parameters
- - -
[in,out]queryクローズ対象のGSQueryインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSQueryインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQueryquery,
GSBool forUpdate,
GSRowSet ** rowSet 
)
-
- -

オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。

-
forUpdateGS_TRUEが指定された場合、取得対象のロウすべてをロックします。ロックすると、対応するトランザクションが有効である間、他のトランザクションからの対象ロウに対する変更操作が阻止されます。対応するコンテナの自動コミットモードが無効の場合のみ、指定できます。
-
新たなロウ集合を取得すると、指定のクエリについて直近に実行した結果のGSRowSetを介するロウ操作はできなくなります。
-
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
-
Parameters
- - - - -
[in]query処理対象のGSQuery
[in]forUpdate更新用ロックを要求するかどうか
[out]rowSetGSRowSetインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 対応するコレクションの自動コミットモード有効であるにもかかわらず、forUpdateGS_TRUEが指定された場合
  • -
  • ロックできないクエリであるにもかかわらず、forUpdateGS_TRUEが指定された場合。具体的なロックの可否は、指定のクエリを作成する機能の各種定義を参照してください。
  • -
  • 正しくないパラメータ・構文・命令を含むクエリを実行しようとした場合。具体的な制約は、指定のクエリを作成する機能の各種定義を参照してください。
  • -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するGSContainerのクローズ後に呼び出された場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQueryquery,
GSRowSet ** rowSet 
)
-
- -

直近に実行した結果のGSRowSetを取得します。

-
一度取得すると、以降新たに指定のクエリを実行するまでGSRowSetが取得できなくなります。
-
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の続きを行う場合があります。
-
Parameters
- - - -
[in]query処理対象のGSQuery
[out]rowSet直近に実行した結果のGSRowSetインスタンスを格納するためのポインタ変数へのポインタ値。取得済みの場合、もしくは、一度もクエリを実行したことのない場合はNULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、またはGSContainerのクローズ後に呼び出された場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQueryquery,
GSFetchOption fetchOption,
const void * value,
GSType valueType 
)
-
- -

結果取得に関するオプションを設定します。

-
設定可能なオプション項目と値の定義については、GSFetchOptionTagを参照してください。
-
Attention
valueTypevalueの型との対応が正しくない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]query処理対象のGSQuery
[in]fetchOptionオプション項目
[in]valueオプションの値。指定可能な型は、valueTypeによって次のように異なります。 - - - - - - - - -
valueType valueの型
INTEGER int32_t*
LONG int64_t*
BOOL GSBool*
-
[in]valueTypeオプションの値の型
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • オプション項目固有の制約に違反した場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 対応するGSContainerのクローズ後に呼び出された場合
  • -
-
- -
-
-
-
-
-
GSRow
-
-
- - - - - - - - -

-Typedefs

typedef struct GSRowTag GSRow
 任意のスキーマについて汎用的にフィールド操作できるロウです。More...
 
typedef GSRow GSRowKey
 ロウキーに関するカラムのみから構成されるGSRowの一種です。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow **row)
 指定のGSRowインスタンスを解放します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSResult 
gsGetRowSchema (GSRow *row, GSContainerInfo *schemaInfo)
 指定のロウに対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRow *row, int32_t column, const GSValue *fieldValue, GSType type)
 指定のフィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRow *row, int32_t column, GSValue *fieldValue, GSType *type)
 指定のフィールドの値とその型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRow *row, int32_t column)
 指定のフィールドにNULLを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRow *row, int32_t column, GSBool *nullValue)
 指定のフィールドにNULLが設定されているかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のSTRING型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のSTRING型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRow *row, int32_t column, GSBool fieldValue)
 指定のBOOL型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRow *row, int32_t column, GSBool *fieldValue)
 指定のBOOL型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRow *row, int32_t column, int8_t fieldValue)
 指定のBYTE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRow *row, int32_t column, int8_t *fieldValue)
 指定のBYTE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRow *row, int32_t column, int16_t fieldValue)
 指定のSHORT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRow *row, int32_t column, int16_t *fieldValue)
 指定のSHORT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRow *row, int32_t column, int32_t fieldValue)
 指定のINTEGER型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRow *row, int32_t column, int32_t *fieldValue)
 指定のINTEGER型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRow *row, int32_t column, int64_t fieldValue)
 指定のLONG型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRow *row, int32_t column, int64_t *fieldValue)
 指定のLONG型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRow *row, int32_t column, float fieldValue)
 指定のFLOAT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRow *row, int32_t column, float *fieldValue)
 指定のFLOAT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRow *row, int32_t column, double fieldValue)
 指定のDOUBLE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRow *row, int32_t column, double *fieldValue)
 指定のDOUBLE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRow *row, int32_t column, GSTimestamp fieldValue)
 指定の通常精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRow *row, int32_t column, GSTimestamp *fieldValue)
 指定の通常精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRow *row, int32_t column, const GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRow *row, int32_t column, GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のGEOMETRY型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のGEOMETRY型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRow *row, int32_t column, const GSBlob *fieldValue)
 指定のBLOB型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRow *row, int32_t column, GSBlob *fieldValue)
 指定のBLOB型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRow *row, int32_t column, const GSChar *const *fieldValue, size_t size)
 指定のSTRING配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRow *row, int32_t column, const GSChar *const **fieldValue, size_t *size)
 指定のSTRING配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRow *row, int32_t column, const GSBool *fieldValue, size_t size)
 指定のBOOL配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRow *row, int32_t column, const GSBool **fieldValue, size_t *size)
 指定のBOOL配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRow *row, int32_t column, const int8_t *fieldValue, size_t size)
 指定のBYTE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRow *row, int32_t column, const int8_t **fieldValue, size_t *size)
 指定のBYTE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRow *row, int32_t column, const int16_t *fieldValue, size_t size)
 指定のSHORT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRow *row, int32_t column, const int16_t **fieldValue, size_t *size)
 指定のSHORT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRow *row, int32_t column, const int32_t *fieldValue, size_t size)
 指定のINTEGER配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRow *row, int32_t column, const int32_t **fieldValue, size_t *size)
 指定のINTEGER配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRow *row, int32_t column, const int64_t *fieldValue, size_t size)
 指定のLONG配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRow *row, int32_t column, const int64_t **fieldValue, size_t *size)
 指定のLONG配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRow *row, int32_t column, const float *fieldValue, size_t size)
 指定のFLOAT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRow *row, int32_t column, const float **fieldValue, size_t *size)
 指定のFLOAT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRow *row, int32_t column, const double *fieldValue, size_t size)
 指定のDOUBLE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRow *row, int32_t column, const double **fieldValue, size_t *size)
 指定のDOUBLE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRow *row, int32_t column, const GSTimestamp *fieldValue, size_t size)
 指定のTIMESTAMP配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRow *row, int32_t column, const GSTimestamp **fieldValue, size_t *size)
 指定のTIMESTAMP配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRow *row, GSRow **destRow)
 同一のフィールド値からなる新たなGSRowインスタンスを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRow *row, GSRowKey **key)
 ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSRowTag GSRow
-
- -

任意のスキーマについて汎用的にフィールド操作できるロウです。

-
NULLが設定されたフィールドに対して型指定のフィールド値取得機能を用いた場合、NULLの代わりにGSContainerにて定義されている空の値が求まります。たとえば文字列型カラムに対応するフィールドにNULLが設定されており、かつ、gsGetRowFieldAsStringを用いた場合、NULLアドレスではなく、空の値である長さ0の文字列を指すアドレスが求まります。
-
Since
1.5
- -
-
- -
-
- - - - -
typedef GSRow GSRowKey
-
- -

ロウキーに関するカラムのみから構成されるGSRowの一種です。

-
gsGetRowSchemaより求まるGSContainerInfoに含まれるカラム情報は、ロウキーに関するカラムの情報のみとなります。
-
Since
4.3
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow ** row)
-
- -

指定のGSRowインスタンスを解放します。

-
Parameters
- - -
[in,out]rowクローズ対象のGSRowインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRowrow,
GSRow ** destRow 
)
-
- -

同一のフィールド値からなる新たなGSRowインスタンスを作成します。

-
Parameters
- - - -
[in]row作成元とするGSRow
[out]destRow新たに作成されるGSRowインスタンスを格納するための、ポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRowrow,
GSRowKey ** key 
)
-
- -

ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。

-
Parameters
- - - -
[in]row作成元とするGSRow
[out]key新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 作成元とするGSRowがロウキーを持たない場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRowrow,
int32_t column,
GSBlobfieldValue 
)
-
- -

指定のBLOB型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRowrow,
int32_t column,
GSBoolfieldValue 
)
-
- -

指定のBOOL型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRowrow,
int32_t column,
const GSBool ** fieldValue,
size_t * size 
)
-
- -

指定のBOOL配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRowrow,
int32_t column,
int8_t * fieldValue 
)
-
- -

指定のBYTE型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRowrow,
int32_t column,
const int8_t ** fieldValue,
size_t * size 
)
-
- -

指定のBYTE配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRowrow,
int32_t column,
double * fieldValue 
)
-
- -

指定のDOUBLE型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRowrow,
int32_t column,
const double ** fieldValue,
size_t * size 
)
-
- -

指定のDOUBLE配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRowrow,
int32_t column,
float * fieldValue 
)
-
- -

指定のFLOAT型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRowrow,
int32_t column,
const float ** fieldValue,
size_t * size 
)
-
- -

指定のFLOAT配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRowrow,
int32_t column,
const GSChar ** fieldValue 
)
-
- -

指定のGEOMETRY型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRowrow,
int32_t column,
int32_t * fieldValue 
)
-
- -

指定のINTEGER型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRowrow,
int32_t column,
const int32_t ** fieldValue,
size_t * size 
)
-
- -

指定のINTEGER配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRowrow,
int32_t column,
int64_t * fieldValue 
)
-
- -

指定のLONG型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRowrow,
int32_t column,
const int64_t ** fieldValue,
size_t * size 
)
-
- -

指定のLONG配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRowrow,
int32_t column,
GSPreciseTimestampfieldValue 
)
-
- -

指定の高精度のTIMESTAMP型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型・精度種別と一致しない場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRowrow,
int32_t column,
int16_t * fieldValue 
)
-
- -

指定のSHORT型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRowrow,
int32_t column,
const int16_t ** fieldValue,
size_t * size 
)
-
- -

指定のSHORT配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRowrow,
int32_t column,
const GSChar ** fieldValue 
)
-
- -

指定のSTRING型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRowrow,
int32_t column,
const GSChar *const ** fieldValue,
size_t * size 
)
-
- -

指定のSTRING配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRowrow,
int32_t column,
GSTimestampfieldValue 
)
-
- -

指定の通常精度のTIMESTAMP型フィールドの値を取得します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型・精度種別と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRowrow,
int32_t column,
const GSTimestamp ** fieldValue,
size_t * size 
)
-
- -

指定のTIMESTAMP配列型フィールドの値を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRowrow,
int32_t column,
GSValuefieldValue,
GSTypetype 
)
-
- -

指定のフィールドの値とその型を取得します。

-
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]type対象フィールドの値の型を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRowrow,
int32_t column,
GSBoolnullValue 
)
-
- -

指定のフィールドにNULLが設定されているかどうかを返します。

-
NOT NULL制約の設定されたカラムが指定された場合、常にGS_FALSEを返します。
-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]nullValueNULLが設定されているかどうか受け取る変数へのポインタ値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
-
-
Since
3.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetRowSchema (GSRowrow,
GSContainerInfoschemaInfo 
)
-
- -

指定のロウに対応するスキーマを取得します。

-
ロウキーの有無を含むカラムレイアウトにする情報のみが設定されたGSContainerInfoが求まります。コンテナ名、コンテナ種別、索引設定、時系列構成オプションなどその他のコンテナ情報は含まれません。
-
Attention
カラム情報の列などの可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用します。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]row処理対象のGSRow
[out]schemaInfoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRowrow,
int32_t column,
const GSBlobfieldValue 
)
-
- -

指定のBLOB型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRowrow,
int32_t column,
GSBool fieldValue 
)
-
- -

指定のBOOL型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRowrow,
int32_t column,
const GSBoolfieldValue,
size_t size 
)
-
- -

指定のBOOL配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRowrow,
int32_t column,
int8_t fieldValue 
)
-
- -

指定のBYTE型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRowrow,
int32_t column,
const int8_t * fieldValue,
size_t size 
)
-
- -

指定のBYTE配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRowrow,
int32_t column,
double fieldValue 
)
-
- -

指定のDOUBLE型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRowrow,
int32_t column,
const double * fieldValue,
size_t size 
)
-
- -

指定のDOUBLE配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRowrow,
int32_t column,
float fieldValue 
)
-
- -

指定のFLOAT型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRowrow,
int32_t column,
const float * fieldValue,
size_t size 
)
-
- -

指定のFLOAT配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRowrow,
int32_t column,
const GSCharfieldValue 
)
-
- -

指定のGEOMETRY型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRowrow,
int32_t column,
int32_t fieldValue 
)
-
- -

指定のINTEGER型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRowrow,
int32_t column,
const int32_t * fieldValue,
size_t size 
)
-
- -

指定のINTEGER配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRowrow,
int32_t column,
int64_t fieldValue 
)
-
- -

指定のLONG型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRowrow,
int32_t column,
const int64_t * fieldValue,
size_t size 
)
-
- -

指定のLONG配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRowrow,
int32_t column,
const GSPreciseTimestampfieldValue 
)
-
- -

指定の高精度のTIMESTAMP型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型・精度種別と一致しない場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRowrow,
int32_t column,
int16_t fieldValue 
)
-
- -

指定のSHORT型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRowrow,
int32_t column,
const int16_t * fieldValue,
size_t size 
)
-
- -

指定のSHORT配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRowrow,
int32_t column,
const GSCharfieldValue 
)
-
- -

指定のSTRING型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRowrow,
int32_t column,
const GSChar *const * fieldValue,
size_t size 
)
-
- -

指定のSTRING配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
  • 配列要素にNULLが含まれる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRowrow,
int32_t column,
GSTimestamp fieldValue 
)
-
- -

指定の通常精度のTIMESTAMP型フィールドに値を設定します。

-
Parameters
- - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型・精度種別と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRowrow,
int32_t column,
const GSTimestampfieldValue,
size_t size 
)
-
- -

指定のTIMESTAMP配列型フィールドに値を設定します。

-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • 指定のカラム番号の型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRowrow,
int32_t column,
const GSValuefieldValue,
GSType type 
)
-
- -

指定のフィールドに値を設定します。

-
Attention
対象フィールドの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値。typeとしてGS_TYPE_NULLが指定された場合は、指定の内容が参照されることはありません。ただし、NULL以外のポインタ値を指定する必要があります
[in]type対象フィールドの値の型
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • NOT NULL制約の設定されたカラムに対して、フィールド値の型としてGS_TYPE_NULLが指定された場合
  • -
  • フィールドの値の構成要素のポインタ値としてNULLが含まれていた場合
  • -
  • フィールドの値がカラムの型と一致しない場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRowrow,
int32_t column 
)
-
- -

指定のフィールドにNULLを設定します。

-
Parameters
- - - -
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 範囲外のカラム番号が指定された場合
  • -
  • NOT NULL制約の設定されたカラムが指定された場合
  • -
-
-
Since
3.5
- -
-
-
-
-
-
GSRowKeyPredicate
-
-
- - - - - -

-Typedefs

typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
 ロウキーの合致条件を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate **predicate)
 指定のGSRowKeyPredicateインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicate *predicate, GSType *keyType)
 合致条件の評価対象とするロウキーの型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicate *predicate, GSContainerInfo *info)
 合致条件の評価対象とするロウキーのスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の開始位置とするロウキーを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **startKey)
 範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicate *predicate, const GSChar **startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の終了位置とするロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **finishKey)
 範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicate *predicate, const GSChar **finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicate *predicate, GSRowKey *const **keyObjList, size_t *size)
 個別条件を構成するロウキーの集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicate *predicate, const GSValue **keyList, size_t *size)
 個別条件を構成する、単一カラムのロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicate *predicate, const GSChar *const **keyList, size_t *size)
 個別条件を構成するSTRING型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicate *predicate, const int32_t **keyList, size_t *size)
 個別条件を構成するINTEGER型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicate *predicate, const int64_t **keyList, size_t *size)
 個別条件を構成するLONG型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **keyList, size_t *size)
 個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **keyList, size_t *size)
 個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の開始位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *startKey, GSType keyType)
 範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicate *predicate, const GSChar *startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicate *predicate, const int64_t *startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の終了位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *finishKey, GSType keyType)
 範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicate *predicate, const GSChar *finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicate *predicate, const int64_t *finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 個別条件の要素の一つとするロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *key, GSType keyType)
 個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicate *predicate, const GSChar *key)
 個別条件の要素の一つとするSTRING型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicate *predicate, int32_t key)
 個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicate *predicate, int64_t key)
 個別条件の要素の一つとするLONG型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicate *predicate, GSTimestamp key)
 個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *key)
 個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
-
- -

ロウキーの合致条件を表します。

-
gsGetMultipleContainerRowsにおける取得条件を構成するために使用できます。
-
条件の種別として、範囲条件と個別条件の2つの種別があります。両方の種別の条件を共に指定することはできません。条件の内容を何も指定しない場合、対象とするすべてのロウキーに合致することを表します。
-
Since
1.5
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
-
- -

個別条件の要素の一つとするロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj個別条件の要素の一つとするロウキー
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicatepredicate,
int32_t key 
)
-
- -

個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicatepredicate,
int64_t key 
)
-
- -

個別条件の要素の一つとするLONG型ロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampkey 
)
-
- -

個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicatepredicate,
const GSCharkey 
)
-
- -

個別条件の要素の一つとするSTRING型ロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicatepredicate,
GSTimestamp key 
)
-
- -

個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuekey,
GSType keyType 
)
-
- -

個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。

-
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
-
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキー
[in]keyType個別条件の要素の一つとするロウキーの値の型
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • ポインタ型引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate ** predicate)
-
- -

指定のGSRowKeyPredicateインスタンスを解放します。

-
Parameters
- - -
[in,out]predicateクローズ対象のGSRowKeyPredicateインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowKeyPredicateインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicatepredicate,
GSRowKey *const ** keyObjList,
size_t * size 
)
-
- -

個別条件を構成するロウキーの集合を取得します。

-
Attention
ロウキーの列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObjList個別条件を構成するロウキーの集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** keyList,
size_t * size 
)
-
- -

個別条件を構成するINTEGER型ロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicatepredicate,
const int64_t ** keyList,
size_t * size 
)
-
- -

個別条件を構成するLONG型ロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** keyList,
size_t * size 
)
-
- -

個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicatepredicate,
const GSChar *const ** keyList,
size_t * size 
)
-
- -

個別条件を構成するSTRING型ロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** keyList,
size_t * size 
)
-
- -

個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicatepredicate,
const GSValue ** keyList,
size_t * size 
)
-
- -

個別条件を構成する、単一カラムのロウキーの値の集合を取得します。

-
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 複合ロウキーについての合致条件が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicatepredicate,
GSRowKey ** keyObj 
)
-
- -

範囲条件の終了位置とするロウキーの値を取得します。

-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObj終了位置とするロウキーとして新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** finishKey 
)
-
- -

範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicatepredicate,
const int64_t ** finishKey 
)
-
- -

範囲条件の終了位置とするLONG型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** finishKey 
)
-
- -

範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicatepredicate,
const GSChar ** finishKey 
)
-
- -

範囲条件の終了位置とするSTRING型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** finishKey 
)
-
- -

範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicatepredicate,
const GSValue ** finishKey 
)
-
- -

範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 複合ロウキーについての合致条件が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicatepredicate,
GSContainerInfoinfo 
)
-
- -

合致条件の評価対象とするロウキーのスキーマを取得します。

-
この合致条件の作成に用いられた情報に、ロウキー以外のカラム情報やスキーマ以外のコンテナ情報が含まれていたとしても、返却されるスキーマ情報には含まれません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]infoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicatepredicate,
GSTypekeyType 
)
-
- -

合致条件の評価対象とするロウキーの型を取得します。

-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyType合致条件の評価対象とするロウキーの型を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicatepredicate,
GSRowKey ** keyObj 
)
-
- -

範囲条件の開始位置とするロウキーを取得します。

-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObj開始位置とするロウキーとして新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** startKey 
)
-
- -

範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicatepredicate,
const int64_t ** startKey 
)
-
- -

範囲条件の開始位置とするLONG型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** startKey 
)
-
- -

範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicatepredicate,
const GSChar ** startKey 
)
-
- -

範囲条件の開始位置とするSTRING型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** startKey 
)
-
- -

範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 引数にNULLが指定された場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicatepredicate,
const GSValue ** startKey 
)
-
- -

範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。

-
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 複合ロウキーについての合致条件が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
-
- -

範囲条件の終了位置とするロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のロウキーまたはその型を含む複合ロウキーのように、大小関係が定義されていないロウキーの場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj終了位置とするロウキー。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicatepredicate,
const int32_t * finishKey 
)
-
- -

範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicatepredicate,
const int64_t * finishKey 
)
-
- -

範囲条件の終了位置とするLONG型ロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampfinishKey 
)
-
- -

範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicatepredicate,
const GSCharfinishKey 
)
-
- -

範囲条件の終了位置とするSTRING型ロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型では大小関係が定義されていないため、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicatepredicate,
const GSTimestampfinishKey 
)
-
- -

範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuefinishKey,
GSType keyType 
)
-
- -

範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。

-
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
[in]keyType終了位置とするロウキーの値の型
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
-
- -

範囲条件の開始位置とするロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のロウキーまたはその型を含む複合ロウキーのように、大小関係が定義されていないロウキーの場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj開始位置とするロウキー。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicatepredicate,
const int32_t * startKey 
)
-
- -

範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicatepredicate,
const int64_t * startKey 
)
-
- -

範囲条件の開始位置とするLONG型ロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampstartKey 
)
-
- -

範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicatepredicate,
const GSCharstartKey 
)
-
- -

範囲条件の開始位置とするSTRING型ロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型では大小関係が定義されていないため、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicatepredicate,
const GSTimestampstartKey 
)
-
- -

範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Parameters
- - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型・精度種別が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuestartKey,
GSType keyType 
)
-
- -

範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。

-
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
-
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
-
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
[in]keyType開始位置とするロウキーの値の型
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • predicate引数にNULLが指定された場合
  • -
  • 個別条件がすでに設定されていた場合
  • -
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • -
-
-
Since
1.5
- -
-
-
-
-
-
GSRowSet
-
-
- - - - - -

-Classes

struct  GSQueryAnalysisEntryTag
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
- - - - -

-Macros

-#define GS_QUERY_ANALYSIS_ENTRY_INITIALIZER   { 0, 0, NULL, NULL, NULL, NULL }
 GSQueryAnalysisEntryの初期化子です。
 
- - - - - - - - - -

-Typedefs

typedef struct GSRowSetTag GSRowSet
 クエリ実行より求めたロウの集合を管理します。More...
 
typedef GSEnum GSRowSetType
 
typedef struct
-GSQueryAnalysisEntryTag 
GSQueryAnalysisEntry
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
- - - - -

-Enumerations

enum  GSRowSetTypeTag { GS_ROW_SET_CONTAINER_ROWS, -GS_ROW_SET_AGGREGATION_RESULT, -GS_ROW_SET_QUERY_ANALYSIS - }
 GSRowSetから取り出すことのできる内容の種別です。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet **rowSet)
 指定のGSRowSetインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSet *rowSet)
 現在のカーソル位置のロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSet *rowSet, void *rowObj)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSet *rowSet, GSAggregationResult **aggregationResult)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSet *rowSet, GSQueryAnalysisEntry *queryAnalysis)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。More...
 
GS_DLL_PUBLIC GSRowSetType
-GS_API_CALL 
gsGetRowSetType (GSRowSet *rowSet)
 ロウ集合の種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSet *rowSet, GSContainerInfo *schemaInfo, GSBool *exists)
 このロウ集合に対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSet *rowSet)
 ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSet *rowSet)
 現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSet *rowSet, const void *rowObj)
 現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。More...
 
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef struct GSQueryAnalysisEntryTag GSQueryAnalysisEntry
-
- -

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。

-
TQLのEXPLAIN文ならびEXPLAIN ANALYZE文の実行結果を保持するために使用します。1つの実行結果は、このエントリの列により表現されます。
- -
-
- -
-
- - - - -
typedef struct GSRowSetTag GSRowSet
-
- -

クエリ実行より求めたロウの集合を管理します。

-
ロウ単位・ロウフィールド単位での操作機能を持ち、対象とするロウを指し示すためのカーソル状態を保持します。初期状態のカーソルは、ロウ集合の先頭より手前に位置しています。
- -
-
- -
-
- - - - -
typedef GSEnum GSRowSetType
-
-
See Also
GSRowSetTypeTag
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSRowSetTypeTag
-
- -

GSRowSetから取り出すことのできる内容の種別です。

- - - - -
Enumerator
GS_ROW_SET_CONTAINER_ROWS  -

クエリ実行対象のコンテナと対応する型のロウデータからなるGSRowSetであることを示します。

-
GS_ROW_SET_AGGREGATION_RESULT  -

集計演算からなるGSRowSetであることを示します。

-
See Also
GSAggregationResult
-
GS_ROW_SET_QUERY_ANALYSIS  -

EXPLAIN文ならびEXPLAIN ANALYZE文の実行結果エントリからなるGSRowSetであることを示します。

-
See Also
GSQueryAnalysisEntry
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet ** rowSet)
-
- -

指定のGSRowSetインスタンスを解放します。

-
Parameters
- - -
[in,out]rowSetクローズ対象のGSRowSetインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowSetインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
-
-
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSetrowSet)
-
- -

現在のカーソル位置のロウを削除します。

-
ロックを有効にして取得したGSRowSetに対してのみ使用できます。また、gsDeleteRowと同様、コンテナの種別ならびに設定によっては、さらに制限が設けられています。
-
Parameters
- - -
[in]rowSet処理対象のGSRowSet
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • -
  • 対象位置のロウが存在しない場合
  • -
  • ロックを有効にせずに取得したGSRowSetに対して呼び出された場合
  • -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSetrowSet,
GSAggregationResult ** aggregationResult 
)
-
- -

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。

-
Parameters
- - - -
[in]rowSet処理対象のGSRowSet
[out]aggregationResult集計結果をGSAggregationResultとして格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のロウ集合の種別がGS_ROW_SET_AGGREGATION_RESULT以外の場合
  • -
  • 対象位置の集計結果が存在しない場合
  • -
  • 引数にNULLが指定された場合
  • -
  • 対応するGSContainerのクローズ後に呼び出された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSetrowSet,
GSQueryAnalysisEntryqueryAnalysis 
)
-
- -

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。

-
Parameters
- - - -
[in]rowSet処理対象のGSRowSet
[out]queryAnalysisクエリ解析結果エントリの内容を格納するためのGSQueryAnalysisEntry。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、GS_QUERY_ANALYSIS_ENTRY_INITIALIZERと同一の内容の初期値が格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のロウ集合の種別がGS_ROW_SET_QUERY_ANALYSIS以外の場合
  • -
  • 対象位置のエントリが存在しない場合
  • -
  • 引数にNULLが指定された場合
  • -
  • 対応するGSContainerのクローズ後に呼び出された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSetrowSet,
void * rowObj 
)
-
- -

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。

-
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の続きを行う場合があります。
-
Attention
対応するGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSRowSetと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - -
[in]rowSet処理対象のGSRowSet
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • -
  • 対象位置のロウが存在しない場合
  • -
  • 引数にNULLが指定された場合
  • -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • 対応するGSContainerのクローズ後に呼び出された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSetrowSet,
GSContainerInfoschemaInfo,
GSBoolexists 
)
-
- -

このロウ集合に対応するスキーマを取得します。

-
ロウキーの有無を含むカラムレイアウトにする情報のみが設定されたGSContainerInfoが求まります。コンテナ名、コンテナ種別、索引設定、時系列構成オプションなどその他のコンテナ情報は含まれません。
-
このロウ集合の種別がGS_ROW_SET_AGGREGATION_RESULTであり、かつ、1件もロウを含まない場合、現バージョンではスキーマを取得しません。
-
Parameters
- - - - -
[in]rowSet処理対象のGSRowSet
[out]schemaInfoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
[out]exists取得可能なスキーマが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • exists引数にNULLが指定された場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSetrowSet)
-
- -

ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。

-
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の進行状況によらず、結果を求めることはできません。
-
Parameters
- - -
[in]rowSet処理対象のGSRowSet
-
-
-
Returns
ロウ集合のサイズ。ただし、rowSetNULLが指定された場合、またはオプション設定の影響によりロウの数を取得できない場合は-1
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSRowSetType GS_API_CALL gsGetRowSetType (GSRowSetrowSet)
-
- -

ロウ集合の種別を取得します。

-
ロウ集合の種別に応じて、それぞれ次の取得機能が使用できます。 - - - - - - - - -
ロウ集合の種別使用できる取得機能
GS_ROW_SET_CONTAINER_ROWS gsGetNextRow
GS_ROW_SET_AGGREGATION_RESULT gsGetNextAggregation
GS_ROW_SET_QUERY_ANALYSIS gsGetNextQueryAnalysis
-
-
Parameters
- - -
[in]rowSet処理対象のGSRowSet
-
-
-
Returns
ロウ集合の種別。ただし、rowSetNULLが指定された場合は-1
- -
-
- -
-
- - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSetrowSet)
-
- -

現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。

-
Parameters
- - -
[in]rowSet処理対象のGSRowSet
-
-
-
Returns
後続のロウが存在するかどうか。ただし、rowSetNULLが指定された場合はGS_FALSE
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSetrowSet,
const void * rowObj 
)
-
- -

現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。

-
Attention
対応するGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
ロックを有効にして取得したGSRowSetに対してのみ使用できます。また、gsPutRowと同様、コンテナの種別ならびに設定によっては、さらに制限が設けられています。
-
Parameters
- - - -
[in]rowSet処理対象のGSRowSet
[in]rowObj更新するロウの内容と対応するロウオブジェクト。ロウキーの内容は無視されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • -
  • 対象位置のロウが存在しない場合
  • -
  • ロックを有効にせずに取得したGSRowSetに対して呼び出された場合
  • -
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
-
-
-
-
GSTimeSeries
-
-
- - - - - - - - -

-Classes

struct  GSColumnCompressionTag
 特定のカラムの圧縮設定を表します。More...
 
struct  GSTimeSeriesPropertiesTag
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
- - - - - - - -

-Macros

-#define GS_COLUMN_COMPRESSION_INITIALIZER   { NULL, GS_FALSE, 0, 0, 0 }
 GSColumnCompressionの初期化子です。
 
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
 GSTimeSeriesPropertiesの初期化子です。More...
 
- - - - - - - - - - - - - - - - - - -

-Typedefs

typedef GSContainer GSTimeSeries
 時刻をロウキーとする、時系列処理に特化したコンテナです。More...
 
typedef GSEnum GSAggregation
 
typedef GSEnum GSInterpolationMode
 
typedef GSEnum GSTimeOperator
 
typedef GSEnum GSCompressionMethod
 
typedef struct
-GSColumnCompressionTag 
GSColumnCompression
 特定のカラムの圧縮設定を表します。More...
 
typedef struct
-GSTimeSeriesPropertiesTag 
GSTimeSeriesProperties
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
- - - - - - - - - - - - - -

-Enumerations

enum  GSAggregationTag {
-  GS_AGGREGATION_MINIMUM, -GS_AGGREGATION_MAXIMUM, -GS_AGGREGATION_TOTAL, -GS_AGGREGATION_AVERAGE, -
-  GS_AGGREGATION_VARIANCE, -GS_AGGREGATION_STANDARD_DEVIATION, -GS_AGGREGATION_COUNT, -GS_AGGREGATION_WEIGHTED_AVERAGE -
- }
 ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。More...
 
enum  GSInterpolationModeTag { GS_INTERPOLATION_LINEAR_OR_PREVIOUS, -GS_INTERPOLATION_EMPTY - }
 ロウの補間方法の種別を表します。More...
 
enum  GSTimeOperatorTag { GS_TIME_OPERATOR_PREVIOUS, -GS_TIME_OPERATOR_PREVIOUS_ONLY, -GS_TIME_OPERATOR_NEXT, -GS_TIME_OPERATOR_NEXT_ONLY - }
 GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。More...
 
enum  GSCompressionMethodTag { GS_COMPRESSION_NO, -GS_COMPRESSION_SS, -GS_COMPRESSION_HI - }
 圧縮方式の種別を表します。More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *column, GSAggregation aggregation, GSAggregationResult **aggregationResult)
 開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeries *timeSeries, const void *rowObj, GSBool *exists)
 GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeries *timeSeries, GSTimestamp base, GSTimeOperator timeOp, void *rowObj, GSBool *exists)
 指定の時刻を基準として、関係する1つのロウを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeries *timeSeries, GSTimestamp base, const GSChar *column, void *rowObj, GSBool *exists)
 指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, GSQuery **query)
 開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeries *timeSeries, const GSTimestamp *start, const GSTimestamp *end, GSQueryOrder order, GSQuery **query)
 開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *const *columnSet, size_t columnCount, GSInterpolationMode mode, int32_t interval, GSTimeUnit intervalUnit, GSQuery **query)
 特定範囲のロウ集合をサンプリングするクエリを作成します。More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
-
- -

GSTimeSeriesPropertiesの初期化子です。

-
ロウの有効期限ならびに圧縮ロウの間引き連続制限は無効、時系列圧縮方式は無圧縮に設定されます。
- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef GSEnum GSAggregation
-
-
See Also
GSAggregationTag
- -
-
- -
-
- - - - -
typedef struct GSColumnCompressionTag GSColumnCompression
-
- -

特定のカラムの圧縮設定を表します。

-
時系列を対象とした誤差あり間引き圧縮のカラム別設定に使用します。
- -
-
- -
-
- - - - -
typedef GSEnum GSCompressionMethod
-
-
- -
-
- - - - -
typedef GSEnum GSInterpolationMode
-
-
- -
-
- - - - -
typedef GSEnum GSTimeOperator
-
-
See Also
GSTimeOperatorTag
- -
-
- -
-
- - - - -
typedef GSContainer GSTimeSeries
-
- -

時刻をロウキーとする、時系列処理に特化したコンテナです。

-
一般的に、範囲取得や集計演算といった処理は、GSCollectionよりも効率的な実装が選択されます。
-
ロウ操作については、GSCollectionと異なり一部制限が設けられています。GSTimeSeriesPropertiesに基づき圧縮オプションが設定されている場合、次のロウ操作を行えません。
    -
  • 指定ロウの更新
  • -
  • 指定ロウの削除
  • -
  • 指定時刻より新しい時刻のロウが存在する場合の、ロウの新規作成
  • -
-
-
gsQueryもしくはgsGetMultipleContainerRowsなどより複数のロウの内容を一度に取得する場合、特に指定がなければ、返却されるロウの順序はロウキーの時刻を基準としてGS_ORDER_ASCENDING相当の順序に整列されます。
-
ロック粒度は、1つ以上のロウ集合をひとまとまりとする内部格納単位となります。したがって、特定ロウについてロックする際、そのロウが属する内部格納単位上の他のロウも同時にロックしようとします。
- -
-
- -
-
- -

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。

-
カラム名の表記、もしくは、個別に圧縮設定できるカラム数の上限などの内容の妥当性について、必ずしも検査するとは限りません。
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSAggregationTag
-
- -

ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。

-
現バージョンでは、GSTimeSeriesに対してのみ使用できます。
-
重み付きの演算の場合、キーの値に基づき重み付け値を決定します。GSTimeSeriesに対する重み付きの演算の場合、前後それぞれの時刻のロウとの中間時刻間の期間を特定の単位で換算したものを、重み付け値として使用します。ただし、前後いずれかの時刻のロウのみが存在しない場合は、存在しないロウの代わりに重み付け対象のロウを用いて求めた重み付け値を使用します。前後いずれの時刻のロウも存在しない場合は、重み付け値として1 (単位は前後いずれかのロウが存在する場合と同一)を使用します。
-
演算の内部処理にてオーバーフローが発生した場合、浮動小数点数型では負または正の無限大、整数型では未定義の値が求まります。また、浮動小数点数型にて演算対象に非数(NaN)が含まれていた場合、非数が求まります。
- - - - - - - - - -
Enumerator
GS_AGGREGATION_MINIMUM  -

最小値を求める演算です。

-
大小比較できる型、すなわち数値型や時刻型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムと同一の型となります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_MAXIMUM  -

最大値を求める演算です。

-
大小比較できる型、すなわち数値型や時刻型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムと同一の型となります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_TOTAL  -

合計を求める演算です。

-
数値型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムが整数型の場合LONG、浮動小数点型の場合DOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_AVERAGE  -

平均を求める演算です。

-
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_VARIANCE  -

分散を求める演算です。

-
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_STANDARD_DEVIATION  -

標準偏差を求める演算です。

-
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
GS_AGGREGATION_COUNT  -

標本数、すなわちロウ数を求める演算です。

-
任意のカラムに対して使用できます。演算結果の型は常にLONGとなります。対象となるロウが1つも存在しない場合、演算結果の値は0となります。
-
GS_AGGREGATION_WEIGHTED_AVERAGE  -

重み付きで平均を求める演算です。

-
各標本値と重み付け値との積の合計を、各重み付け値の合計で割ることにより求めます。重み付け値の計算方法は、GSAggregationTagの説明を参照してください。
-
この演算は、数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
-
- -
-
- -
-
- - - - -
enum GSCompressionMethodTag
-
- -

圧縮方式の種別を表します。

-
時系列圧縮設定を行う際に使用します。
- - - - -
Enumerator
GS_COMPRESSION_NO  -

無圧縮であることを示します。

-
GS_COMPRESSION_SS  -

誤差なし間引き圧縮方式であることを示します。

-
誤差なし間引き圧縮では、直前及び直後に登録したロウと同じデータを持つロウは省かれます。省かれたデータはinterpolateやsample処理の際に、誤差を発生することなく復元されます。
-
GS_COMPRESSION_HI  -

誤差あり間引き圧縮方式であることを示します。

-
誤差あり間引き圧縮では、前回まで及び直後に登録したデータと同じ傾斜を表すロウは省かれます。同じ傾斜かを判定する条件はユーザが指定できます。指定されたカラムが条件を満たし、それ以外のカラムの値が前回のデータと同じ場合のみ省かれます。省かれたデータはinterpolateやsample処理の際に、指定された誤差の範囲内で復元されます。
-
- -
-
- -
-
- - - - -
enum GSInterpolationModeTag
-
- -

ロウの補間方法の種別を表します。

-
時系列ロウの補間機能で使用されます。
- - - -
Enumerator
GS_INTERPOLATION_LINEAR_OR_PREVIOUS  -

カラムに応じて線形補間または直前ロウの値による補間を行うことを示します。

-
補間機能にて指定されたカラムについては、補間対象時刻の前後時刻のロウの値により線形補間を行います。対象とするカラムの型は数値型でなければなりません。
-
補間機能にて特に指定されていないカラムについては、補間対象時刻と隣接する直前の時刻のロウの値を補間値として使用します。対象とするカラムの型に制限はありません。
-
GS_INTERPOLATION_EMPTY  -

空の値を補間値として用いることを示します。

-
ロウキーを除くすべてのロウフィールドについて、GSContainerにて定義されている空の値を補間値として用いることを示します。
-
- -
-
- -
-
- - - - -
enum GSTimeOperatorTag
-
- -

GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。

-
別途指定する時刻と組み合わせることで、最も近い時刻のキーを持つロウなどを特定できます。該当するロウが存在しない場合の扱いは、この列挙型を使用するそれぞれの機能により異なります。
- - - - - -
Enumerator
GS_TIME_OPERATOR_PREVIOUS  -

指定時刻と同一またはより前の時刻のロウのうち、最も新しいものを求めます。

-
GS_TIME_OPERATOR_PREVIOUS_ONLY  -

指定より前の時刻のロウのうち、最も新しいものを求めます。

-
GS_TIME_OPERATOR_NEXT  -

指定時刻同一またはより後の時刻のロウのうち、最も古いものを求めます。

-
GS_TIME_OPERATOR_NEXT_ONLY  -

指定時刻より後の時刻のロウのうち、最も古いものを求めます。

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
const GSCharcolumn,
GSAggregation aggregation,
GSAggregationResult ** aggregationResult 
)
-
- -

開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。

-
columnaggregation次第で無視されることがあります。演算対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
-
Parameters
- - - - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[in]column集計対象のカラム名。合計演算のように、特定のカラムを対象としない場合はNULL
[in]aggregation集計方法
[out]aggregationResult集計結果をGSAggregationResultとして格納するためのポインタ変数へのポインタ値。対象時系列の内容と集計方法によっては、NULLが設定されることもあります。詳細はGSAggregationの定義を参照してください。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別が時系列ではない場合
  • -
  • 指定の演算方法で許可されていない型のカラムを指定した場合
  • -
  • 対応する名前のカラムが存在しない場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeriestimeSeries,
const void * rowObj,
GSBoolexists 
)
-
- -

GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。

-
GridDB上の現在時刻に相当するTIMESTAMP値をロウキーとする点を除き、gsPutRowと同様に振る舞います。指定のロウオブジェクト内のロウキーは無視されます。
-
圧縮オプションが設定された状態の時系列に対しては、GridDB上の現在時刻より新しい時刻のロウが存在しない場合のみ使用できます。最も新しい時刻を持つ既存ロウの時刻が現在時刻と一致する場合、何も変更は行わず既存ロウの内容を保持します。
-
手動コミットモードの場合、対象のロウがロックされます。また、内部格納単位が同一の他のロウもロックされます。
-
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
Parameters
- - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]existsGridDB上の現在時刻と一致するロウが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定の時系列について圧縮オプションが設定されており、現在時刻より新しい時刻のロウが存在した場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • -
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクトについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • -
-
-
See Also
gsPutRow
-
-GSTimeSeriesPropertiesTag::compressionMethod
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeriestimeSeries,
GSTimestamp base,
GSTimeOperator timeOp,
void * rowObj,
GSBoolexists 
)
-
- -

指定の時刻を基準として、関係する1つのロウを取得します。

-
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSTimeSeriesと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]base基準となる時刻
[in]timeOp取得方法
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists条件に一致するロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値が基準時刻として指定された場合
  • -
  • exists以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeriestimeSeries,
GSTimestamp base,
const GSCharcolumn,
void * rowObj,
GSBoolexists 
)
-
- -

指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。

-
一致する時系列ロウの指定のカラムの値、もしくは、前後時刻のロウの指定カラムの値を線形補間して得られた値を基にロウオブジェクトを生成します。前後時刻のロウの少なくともいずれか、もしくは、一致するロウが存在しない場合は生成されません。
-
補間対象として指定できるカラムの型は、数値型のみです。指定のカラムならびにロウキー以外のフィールドには、指定時刻と同一またはより前の時刻のロウのうち、最も新しい時刻を持つロウのフィールドの値が設定されます。
-
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
-
-文字列や配列などの可変長のデータを格納するために、指定のGSTimeSeriesと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
-
Parameters
- - - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]base基準となる時刻
[in]column線形補間対象のカラム
[out]rowObj生成結果を格納するためのロウオブジェクト。生成のために必要とするロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists生成のために必要とするロウが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 対応する名前のカラムが存在しない場合。また、サポートされていない型のカラムが指定された場合
  • -
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • -
  • サポート範囲外の値が基準時刻として指定された場合
  • -
  • exists以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeriestimeSeries,
const GSTimestampstart,
const GSTimestampend,
GSQueryOrder order,
GSQuery ** query 
)
-
- -

開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。

-
取得対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
-
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
-
Parameters
- - - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻またはNULLNULLの場合、指定の時系列上の最も古いロウの時刻が開始時刻として指定されたものとみなします。
[in]end終了時刻またはNULLNULLの場合、指定の時系列上の最も新しいロウの時刻が終了時刻として指定されたものとみなします。
[in]order取得するロウ集合の時刻順序。GS_ORDER_ASCENDINGの場合は古い時刻から新しい時刻の順、GS_ORDER_DESCENDINGの場合は新しい時刻から古い時刻の順となります。
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが設定されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別が時系列ではない場合
  • -
  • startend以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
GSQuery ** query 
)
-
- -

開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。

-
取得対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。要求するロウ集合は昇順、すなわち古い時刻から新しい時刻の順となります。
-
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
-
Parameters
- - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが設定されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別が時系列ではない場合
  • -
  • ポインタ型引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
const GSChar *const * columnSet,
size_t columnCount,
GSInterpolationMode mode,
int32_t interval,
GSTimeUnit intervalUnit,
GSQuery ** query 
)
-
- -

特定範囲のロウ集合をサンプリングするクエリを作成します。

-
サンプリング対象の時刻は、開始時刻に対し非負整数倍のサンプリング間隔を加えた時刻のうち、終了時刻と同じかそれ以前のもののみです。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
-
作成したクエリを実行すると、各サンプリング位置の時刻と一致するロウが存在する場合は該当ロウの値を、存在しない場合はcolumnSetmode引数の指定に従い補間された値を使用しロウ集合を生成します。個別の補間方法については、GSInterpolationModeの定義を参照してください。
-
補間のために参照する必要のあるロウが存在しない場合、該当するサンプリング時刻のロウは生成されず、該当箇所の数だけ結果件数が減少します。サンプリング間隔をより短く設定すると、補間方法次第では異なるサンプリング時刻であっても同一のロウの内容が使用される可能性が高まります。
-
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることはできません。
-
Parameters
- - - - - - - - - - -
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[in]columnSetmodeに基づき特定の補間処理を適用するカラムの名前の集合。文字列ポインタの配列より構成されます。空集合の場合は、適用対象のカラムを何も指定しないことを示します。NULLの場合は、空集合を指定した場合と同様です。
[in]columnCountmodeに基づき特定の補間処理を適用するカラムの個数
[in]mode補間方法
[in]intervalサンプリング間隔。0および負の値は指定できません
[in]intervalUnitサンプリング間隔の時間単位。GS_TIME_UNIT_YEARGS_TIME_UNIT_MONTHは指定できません
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
-
-
-
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    -
  • 指定のコンテナの種別が時系列ではない場合
  • -
  • columnSet以外のポインタ型引数にNULLが指定された場合
  • -
-
- -
-
-
-
-
-
GSTimestamp
-
-
- - - - - - - - - - - -

-Classes

struct  GSPreciseTimestampTag
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
struct  GSTimeZoneTag
 タイムゾーン情報を表します。More...
 
struct  GSTimestampFormatOptionTag
 日時フォーマットに関するオプション情報を表します。More...
 
- - - - - - - - - - - - - - - - - - - -

-Macros

#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
 GSPreciseTimestampの初期化子です。More...
 
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
 GSTimeZoneの初期化子です。More...
 
#define GS_TIMESTAMP_DEFAULT   0
 時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。More...
 
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
 GSTimestampFormatOptionの初期化子です。More...
 
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
 TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
 GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
- - - - - - - - - - - - - - - -

-Typedefs

typedef int64_t GSTimestamp
 GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。More...
 
typedef struct
-GSPreciseTimestampTag 
GSPreciseTimestamp
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
typedef GSEnum GSTimeUnit
 
typedef struct GSTimeZoneTag GSTimeZone
 タイムゾーン情報を表します。More...
 
typedef struct
-GSTimestampFormatOptionTag 
GSTimestampFormatOption
 日時フォーマットに関するオプション情報を表します。More...
 
- - - - -

-Enumerations

enum  GSTimeUnitTag {
-  GS_TIME_UNIT_YEAR, -GS_TIME_UNIT_MONTH, -GS_TIME_UNIT_DAY, -GS_TIME_UNIT_HOUR, -
-  GS_TIME_UNIT_MINUTE, -GS_TIME_UNIT_SECOND, -GS_TIME_UNIT_MILLISECOND -
- }
 時系列処理で用いる時間の単位を示します。More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

GS_DLL_PUBLIC GSTimestamp
-GS_API_CALL 
gsCurrentTime ()
 現在時刻を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
-GSTimestamp 
gsAddTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit)
 時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC GSTimestamp
-GS_API_CALL 
gsAddZonedTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit)
 二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamp *timestamp, GSChar *strBuf, size_t bufSize, const GSTimestampFormatOption *option)
 指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSChar *str, GSTimestamp *timestamp)
 TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSChar *str, GSPreciseTimestamp *timestamp, const GSTimestampFormatOption *option)
 通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZone *zone, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZone *zone, int64_t offset, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を設定します。More...
 
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZone *zone, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSChar *str, GSTimeZone *zone)
 TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
-
- -

GSPreciseTimestampの初期化子です。

-
Since
5.3
- -
-
- -
-
- - - - -
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
-
- -

TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。

-
See Also
gsFormatTime
- -
-
- -
-
- - - - -
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
-
- -

GSTimeZoneの初期化子です。

-
Since
4.3
- -
-
- -
-
- - - - -
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
-
- -

GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。

-
See Also
gsFormatTimeZone
-
Since
4.3
- -
-
- -
-
- - - - -
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
-
- -

GSTimestampFormatOptionの初期化子です。

-
Since
5.3
- -
-
- -
-
- - - - -
#define GS_TIMESTAMP_DEFAULT   0
-
- -

時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。

-
Since
4.3
- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct GSPreciseTimestampTag GSPreciseTimestamp
-
- -

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。

-
See Also
GS_TYPE_OPTION_TIME_MICRO
-
-GS_TYPE_OPTION_TIME_NANO
-
Since
5.3
- -
-
- -
-
- - - - -
typedef int64_t GSTimestamp
-
- -

GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。

-
See Also
GS_TYPE_OPTION_TIME_MILLI
- -
-
- -
-
- -

日時フォーマットに関するオプション情報を表します。

-
Note
使用する関数によっては、オプション情報を一部またはすべて参照しない場合があります。
-
Since
5.3
- -
-
- -
-
- - - - -
typedef GSEnum GSTimeUnit
-
-
See Also
GSTimeUnitTag
- -
-
- -
-
- - - - -
typedef struct GSTimeZoneTag GSTimeZone
-
- -

タイムゾーン情報を表します。

-
Since
4.3
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum GSTimeUnitTag
-
- -

時系列処理で用いる時間の単位を示します。

- - - - - - - - -
Enumerator
GS_TIME_UNIT_YEAR  -

年の単位です。

-
GS_TIME_UNIT_MONTH  -

月の単位です。

-
GS_TIME_UNIT_DAY  -

日の単位です。

-
GS_TIME_UNIT_HOUR  -

時の単位です。

-
GS_TIME_UNIT_MINUTE  -

分の単位です。

-
GS_TIME_UNIT_SECOND  -

秒の単位です。

-
GS_TIME_UNIT_MILLISECOND  -

ミリ秒の単位です。

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_STATIC_HEADER_FUNC_SPECIFIER GSTimestamp gsAddTime (GSTimestamp timestamp,
int64_t amount,
GSTimeUnit timeUnit 
)
-
- -

時刻に一定の値を加算します。

-
amountに負の値を指定することで、指定の時刻より前の時刻を求めることができます。
-
現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。
-
Parameters
- - - - -
[in]timestamp対象とする時刻
[in]amount加算する値
[in]timeUnit加算する値の単位
-
-
-
Returns
加算後のGSTimestamp。次の場合は-1
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
  • 加算結果がサポート範囲外の時刻となりうる場合
  • -
-
-
See Also
gsAddZonedTime
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSTimestamp GS_API_CALL gsAddZonedTime (GSTimestamp timestamp,
int64_t amount,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
-
- -

指定のタイムゾーン設定を用い、時刻に一定の値を加算します。

-
amountに負の値を指定することで、指定の時刻より前の時刻を求めることができます。
-
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
-
Parameters
- - - - - -
[in]timestamp対象とする時刻
[in]amount加算する値
[in]timeUnit加算する値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsAddTimeと同様に振る舞います。
-
-
-
Returns
加算後のGSTimestamp。次の場合は-1
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
  • 加算結果がサポート範囲外の時刻となりうる場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
See Also
gsAddZonedTime
-
Since
4.3
- -
-
- -
-
- - - - - - - -
GS_DLL_PUBLIC GSTimestamp GS_API_CALL gsCurrentTime ()
-
- -

現在時刻を求めます。

-
Returns
現在時刻に相当するGSTimestamp。内部のシステムコールに失敗した場合、-1
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamptimestamp,
GSCharstrBuf,
size_t bufSize,
const GSTimestampFormatOptionoption 
)
-
- -

指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。

-
Parameters
- - - - - -
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
[in]optionオプション設定情報へのポインタ値。NULLの場合はgsFormatTimeと同様に振る舞います。タイムゾーンが指定された場合、指定のタイムゾーン設定を用います。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    -
  • サポート範囲外の時刻が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
See Also
GS_TIME_STRING_SIZE_MAX
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp,
GSCharstrBuf,
size_t bufSize 
)
-
- -

TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。

-
現バージョンでは、変換の際に使用されるタイムゾーンはUTCです。
-
Parameters
- - - - -
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    -
  • サポート範囲外の時刻が指定された場合
  • -
-
-
See Also
GS_TIME_STRING_SIZE_MAX
-
-gsFormatZonedTime
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZonezone,
GSCharstrBuf,
size_t bufSize 
)
-
- -

TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。

-
Parameters
- - - - -
[out]zone対象とするタイムゾーン情報
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
See Also
GS_TIME_ZONE_STRING_SIZE_MAX
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp,
GSCharstrBuf,
size_t bufSize,
const GSTimeZonezone 
)
-
- -

指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。

-
Parameters
- - - - - -
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsFormatTimeと同様に振る舞います。
-
-
-
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    -
  • サポート範囲外の時刻が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
See Also
GS_TIME_STRING_SIZE_MAX
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1,
GSTimestamp timestamp2,
GSTimeUnit timeUnit 
)
-
- -

二つの時刻間の差分値を求めます。

-
timestamp1に対して、timestamp2で減じた値を求めます。
-
現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。
-
Parameters
- - - - -
[in]timestamp1対象とする一つ目の時刻
[in]timestamp2対象とする二つ目の時刻
[in]timeUnit求める差分値の単位
-
-
-
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
-
-
See Also
gsGetZonedTimeDiff
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp,
GSTimeUnit timeUnit 
)
-
- -

GSTimestampを構成するフィールド値の一つを取得します。

-
現バージョンでは、取得の際に使用されるタイムゾーンはUTCです。
-
Parameters
- - - -
[in]timestamp対象とする時刻
[in]timeUnit取得するフィールド値の単位
-
-
-
Returns
指定の条件に合致するフィールド値。次の場合は-1
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
-
-
See Also
gsGetZonedTimeField
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZonezone,
GSTimeUnit timeUnit 
)
-
- -

指定のタイムゾーンのオフセット値を取得します。

-
Parameters
- - - -
[in]zone対象とするタイムゾーン情報
[in]timeUnit求めるオフセット値の単位
-
-
-
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    -
  • サポート外の単位が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1,
GSTimestamp timestamp2,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
-
- -

指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。

-
timestamp1に対して、timestamp2で減じた値を求めます。
-
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
-
Parameters
- - - - - -
[in]timestamp1対象とする一つ目の時刻
[in]timestamp2対象とする二つ目の時刻
[in]timeUnit求める差分値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsGetTimeDiffと同様に振る舞います。
-
-
-
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
-
- -

指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。

-
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
-
Parameters
- - - - -
[in]timestamp対象とする時刻
[in]timeUnit取得するフィールド値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsGetTimeFieldと同様に振る舞います。
-
-
-
Returns
指定の条件に合致するフィールド値。次の場合は-1
    -
  • サポート範囲外の時刻や単位が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSCharstr,
GSPreciseTimestamptimestamp,
const GSTimestampFormatOptionoption 
)
-
- -

通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。

-
TIMESTAMP値表記に含まれるタイムゾーン設定を使用します。
-
Parameters
- - - - -
[in]str対象とする時刻を表す文字列
[out]timestamp変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限り-1が格納されます。
[in]optionオプション設定情報へのポインタ値。現バージョンでは、使用されません。
-
-
-
Returns
GSTimestamp値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    -
  • 時刻の文字列表記と一致しない文字列が指定された場合
  • -
  • サポート範囲外の時刻が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
5.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSCharstr,
GSTimestamptimestamp 
)
-
- -

TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。

-
TIMESTAMP値表記に含まれるタイムゾーン設定を使用します。
-
Parameters
- - - -
[in]str対象とする時刻を表す文字列
[out]timestamp変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限り-1が格納されます。
-
-
-
Returns
GSTimestamp値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    -
  • 時刻の文字列表記と一致しない文字列が指定された場合
  • -
  • サポート範囲外の時刻が指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSCharstr,
GSTimeZonezone 
)
-
- -

TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。

-
Parameters
- - - -
[in]str対象とするタイムゾーン文字列
[out]zone変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限りGS_TIME_ZONE_INITIALIZERと同一の内容の初期値が格納されます。
-
-
-
Returns
GSTimeZone値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    -
  • タイムゾーン情報の文字列表記と一致しない文字列が指定された場合
  • -
  • サポート範囲外のタイムゾーンが指定された場合
  • -
  • 引数にNULLが指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamptimestamp,
int64_t field,
GSTimeUnit timeUnit 
)
-
- -

GSTimestampを構成するフィールド値の一つを設定します。

-
現バージョンでは、設定の際に使用されるタイムゾーンはUTCです。
-
Parameters
- - - - -
[in,out]timestamp対象とする時刻
[in]field設定するフィールド値
[in]timeUnit設定するフィールド値の単位
-
-
-
Returns
フィールド値を設定できたかどうか。次の場合はGS_FALSE
    -
  • timestamp引数にNULLが指定された場合
  • -
  • サポート範囲外の時刻や単位、フィールド値が指定された場合
  • -
-
-
See Also
gsGetZonedTimeField
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZonezone,
int64_t offset,
GSTimeUnit timeUnit 
)
-
- -

指定のタイムゾーンのオフセット値を設定します。

-
Parameters
- - - - -
[out]zone対象とするタイムゾーン情報
[in]offsetオフセット値
[in]timeUnitオフセット値の単位
-
-
-
Returns
オフセット値を設定できたかどうか。次の場合はGS_FALSE
    -
  • zone引数にNULLが指定された場合
  • -
  • サポート範囲外のオフセット値や単位が指定された場合
  • -
-
-
Since
4.3
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamptimestamp,
int64_t field,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
-
- -

指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。

-
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
-
Parameters
- - - - - -
[in,out]timestamp対象とする時刻
[in]field設定するフィールド値
[in]timeUnit設定するフィールド値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsSetTimeFieldと同様に振る舞います。
-
-
-
Returns
フィールド値を設定できたかどうか。次の場合はGS_FALSE
    -
  • timestamp引数にNULLが指定された場合
  • -
  • サポート範囲外の時刻や単位、フィールド値が指定された場合
  • -
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • -
-
-
Since
4.3
- -
-
-
-
-
-
GSBindingTag Struct Reference
-
-
- -

ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。 More...

- -

#include <gridstore.h>

-

Detailed Description

-

ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。

-
- -
-
-
-
GSBlobTag Struct Reference
-
-
- -

ロウオブジェクトにおけるBLOB構造を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - -

-Public Attributes

-size_t size
 BLOBデータのサイズです。
 
-const void * data
 BLOBデータの格納先ポインタです。
 
-

Detailed Description

-

ロウオブジェクトにおけるBLOB構造を表します。

-
- -
-
-
-
GSCollectionPropertiesTag Struct Reference
-
-
- -

コレクションの構成オプションを表します。 More...

- -

#include <gridstore.h>

-

Detailed Description

-

コレクションの構成オプションを表します。

-
Note
現バージョンでは使用されておりません。
-
- -
-
-
-
GSColumnCompressionTag Struct Reference
-
-
- -

特定のカラムの圧縮設定を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - -

-Public Attributes

const GSCharcolumnName
 設定対象のカラムの名前です。More...
 
GSBool relative
 間引き圧縮における判定基準値として、相対誤差を適用するかどうかを示します。More...
 
double rate
 相対誤差あり間引き圧縮における、値がとりうる範囲を基準とした誤差境界値の比率です。More...
 
double span
 相対誤差あり間引き圧縮における、値がとりうる範囲の最大値と最小値の差です。More...
 
double width
 絶対誤差あり間引き圧縮における、誤差境界の幅です。More...
 
-

Detailed Description

-

特定のカラムの圧縮設定を表します。

-
時系列を対象とした誤差あり間引き圧縮のカラム別設定に使用します。
-

Member Data Documentation

- -
-
- - - - -
const GSChar* GSColumnCompressionTag::columnName
-
- -

設定対象のカラムの名前です。

-
間引き圧縮方式(GS_COMPRESSION_HI)を選択し、次の型のカラムに対して指定した場合のみ、カラム別の圧縮設定として使用できます。 -
- -
-
- -
-
- - - - -
double GSColumnCompressionTag::rate
-
- -

相対誤差あり間引き圧縮における、値がとりうる範囲を基準とした誤差境界値の比率です。

-
値がとりうる範囲は、spanメンバと対応します。また、比率は0以上1以下でなければ、時系列を作成することができません。
-
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
- -
-
- -
-
- - - - -
GSBool GSColumnCompressionTag::relative
-
- -

間引き圧縮における判定基準値として、相対誤差を適用するかどうかを示します。

-
間引き圧縮方式(GS_COMPRESSION_HI)以外を選択した場合は無視されます。
- -
-
- -
-
- - - - -
double GSColumnCompressionTag::span
-
- -

相対誤差あり間引き圧縮における、値がとりうる範囲の最大値と最小値の差です。

-
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
- -
-
- -
-
- - - - -
double GSColumnCompressionTag::width
-
- -

絶対誤差あり間引き圧縮における、誤差境界の幅です。

-
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
- -
-
- - -
-
-
-
GSColumnInfoTag Struct Reference
-
-
- -

カラムのスキーマに関する情報を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - -

-Public Attributes

-const GSCharname
 カラム名です。
 
-GSType type
 カラムの型、すなわち、カラムに対応する各フィールド値の型です。
 
GSIndexTypeFlags indexTypeFlags
 索引種別を示すフラグ値のビット和です。More...
 
GSTypeOption options
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
-

Detailed Description

-

カラムのスキーマに関する情報を表します。

-

Member Data Documentation

- -
-
- - - - -
GSIndexTypeFlags GSColumnInfoTag::indexTypeFlags
-
- -

索引種別を示すフラグ値のビット和です。

-
GS_INDEX_FLAG_DEFAULTは索引種別が未設定であることを示します。
-
Since
1.5
- -
-
- -
-
- - - - -
GSTypeOption GSColumnInfoTag::options
-
- -

カラムに関するオプション設定を示すフラグ値のビット和です。

-
現バージョンでは、NOT NULL制約または初期値に関連する、以下のフラグ値のみを含めることができます。 -
-
Since
3.5
- -
-
- - -
-
-
-
GSContainerInfoTag Struct Reference
-
-
- -

特定のコンテナに関する情報を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

-const GSCharname
 コンテナ名です。
 
-GSContainerType type
 コンテナの種別です。
 
-size_t columnCount
 カラム数です。
 
const GSColumnInfocolumnInfoList
 カラム情報のリストです。More...
 
GSBool rowKeyAssigned
 ロウキーに対応するカラムが設定されているかどうかを示す真偽値です。More...
 
GSBool columnOrderIgnorable
 カラム順序が無視できるかどうかを示す真偽値です。More...
 
const GSTimeSeriesPropertiestimeSeriesProperties
 時系列構成オプションです。More...
 
size_t triggerInfoCount
 トリガ情報のエントリ数です。More...
 
const GSTriggerInfotriggerInfoList
 トリガ情報の一覧です。More...
 
const GSChardataAffinity
 データ配置最適化のために用いられる、コンテナ間の類似性(データアフィニティ)を示す文字列です。More...
 
size_t indexInfoCount
 索引情報のエントリ数です。More...
 
const GSIndexInfoindexInfoList
 索引情報の一覧です。More...
 
size_t rowKeyColumnCount
 ロウキーを構成するカラム列についての、カラム数です。More...
 
const int32_t * rowKeyColumnList
 ロウキーを構成するカラム列についての、0から始まるカラム番号一覧です。More...
 
-

Detailed Description

-

特定のコンテナに関する情報を表します。

-

Member Data Documentation

- -
-
- - - - -
const GSColumnInfo* GSContainerInfoTag::columnInfoList
-
- -

カラム情報のリストです。

-
カラム数と同一の長さのGSColumnInfoの配列です。各要素はカラムの定義順と対応します。
- -
-
- -
-
- - - - -
GSBool GSContainerInfoTag::columnOrderIgnorable
-
- -

カラム順序が無視できるかどうかを示す真偽値です。

-
See Also
gsPutContainerGeneral
-
Since
1.5
- -
-
- -
-
- - - - -
const GSChar* GSContainerInfoTag::dataAffinity
-
- -

データ配置最適化のために用いられる、コンテナ間の類似性(データアフィニティ)を示す文字列です。

-
同一クラスタノード上の同一管理領域内に格納されるコンテナについて、配置先を最適化するために使用されます。
-
データアフィニティが同一のコンテナの内容は、近接する配置先に格納される可能性が高くなります。また、解放期限が設定され、近接する配置先に格納された時系列について、登録頻度などの変更パターンが類似している場合、解放期限に到達したロウの解放処理が効率的に行われる可能性が高くなります。
-
コンテナの定義において使用できるデータアフィニティ文字列の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。ただし、文字列を設定した時点で必ずしもすべての制限を検査するとは限りません。特に記載のない限り、データアフィニティ文字列が使用される操作では、ASCIIの大文字・小文字表記の違いが区別されます。
-
値がNULLの場合、標準設定を優先することを示します。
-
Since
2.1
- -
-
- -
-
- - - - -
size_t GSContainerInfoTag::indexInfoCount
-
- -

索引情報のエントリ数です。

-
Since
3.5
- -
-
- -
-
- - - - -
const GSIndexInfo* GSContainerInfoTag::indexInfoList
-
- -

索引情報の一覧です。

-
Since
3.5
- -
-
- -
-
- - - - -
GSBool GSContainerInfoTag::rowKeyAssigned
-
- -

ロウキーに対応するカラムが設定されているかどうかを示す真偽値です。

-
現バージョンでは、コンテナが単一カラムからなるロウキーを持つ場合、対応するカラム番号は0となります。
-
任意のロウキー構成を扱うには、GSContainerInfo::rowKeyColumnListを使用します。
- -
-
- -
-
- - - - -
size_t GSContainerInfoTag::rowKeyColumnCount
-
- -

ロウキーを構成するカラム列についての、カラム数です。

-
Since
4.3
- -
-
- -
-
- - - - -
const int32_t* GSContainerInfoTag::rowKeyColumnList
-
- -

ロウキーを構成するカラム列についての、0から始まるカラム番号一覧です。

-
Since
4.3
- -
-
- -
-
- - - - -
const GSTimeSeriesProperties* GSContainerInfoTag::timeSeriesProperties
-
- -

時系列構成オプションです。

-
Since
1.5
- -
-
- -
-
- - - - -
size_t GSContainerInfoTag::triggerInfoCount
-
- -

トリガ情報のエントリ数です。

-
Since
1.5
- -
-
- -
-
- - - - -
const GSTriggerInfo* GSContainerInfoTag::triggerInfoList
-
- -

トリガ情報の一覧です。

-
Since
1.5
- -
-
- - -
-
-
-
GSContainerRowEntryTag Struct Reference
-
-
- -

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - -

-Public Attributes

-const GSCharcontainerName
 コンテナ名です。
 
void *const * rowList
 ロウオブジェクトへのアドレスのリストです。More...
 
-size_t rowCount
 ロウオブジェクトの個数です。
 
-

Detailed Description

-

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。

-
Since
1.5
-

Member Data Documentation

- -
-
- - - - -
void* const* GSContainerRowEntryTag::rowList
-
- -

ロウオブジェクトへのアドレスのリストです。

-
現バージョンでは、GSRowのアドレスのみを要素として含めることができます。
- -
-
- - -
-
-
-
GSIndexInfoTag Struct Reference
-
-
- -

索引の設定内容を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

const GSCharname
 索引名です。More...
 
GSIndexTypeFlags type
 索引種別を示すフラグ値です。More...
 
int32_t column
 索引に対応するカラムのカラム番号です。More...
 
const GSCharcolumnName
 索引に対応するカラムのカラム名です。More...
 
size_t columnCount
 索引に対応する任意個数のカラムのカラム番号の列のカラム数です。More...
 
const int32_t * columnList
 索引に対応する任意個数のカラムのカラム番号の列です。More...
 
size_t columnNameCount
 索引に対応する任意個数のカラムのカラム名の列のカラム数です。More...
 
const GSChar *const * columnNameList
 索引に対応する任意個数のカラムのカラム名の列です。More...
 
-

Detailed Description

-

索引の設定内容を表します。

-
Since
3.5
-

Member Data Documentation

- -
-
- - - - -
int32_t GSIndexInfoTag::column
-
- -

索引に対応するカラムのカラム番号です。

-
単一のカラムからなるカラム番号の列が設定された場合と同等であるとみなされます。
-
Since
3.5
- -
-
- -
-
- - - - -
size_t GSIndexInfoTag::columnCount
-
- -

索引に対応する任意個数のカラムのカラム番号の列のカラム数です。

-
Since
4.3
- -
-
- -
-
- - - - -
const int32_t* GSIndexInfoTag::columnList
-
- -

索引に対応する任意個数のカラムのカラム番号の列です。

-
Since
4.3
- -
-
- -
-
- - - - -
const GSChar* GSIndexInfoTag::columnName
-
- -

索引に対応するカラムのカラム名です。

-
単一のカラムからなるカラム名の列が設定された場合と同等であるとみなされます。
-
Since
3.5
- -
-
- -
-
- - - - -
size_t GSIndexInfoTag::columnNameCount
-
- -

索引に対応する任意個数のカラムのカラム名の列のカラム数です。

-
Since
4.3
- -
-
- -
-
- - - - -
const GSChar* const* GSIndexInfoTag::columnNameList
-
- -

索引に対応する任意個数のカラムのカラム名の列です。

-
Since
4.3
- -
-
- -
-
- - - - -
const GSChar* GSIndexInfoTag::name
-
- -

索引名です。

-
Since
3.5
- -
-
- -
-
- - - - -
GSIndexTypeFlags GSIndexInfoTag::type
-
- -

索引種別を示すフラグ値です。

-
デフォルトまたは任意個数の索引種別を含めることができます。複数個の索引種別を含める場合は、各種別のフラグ値のビット和により表現します。コンテナ情報の一部として得られた索引情報では、デフォルトを除くいずれか一つの索引種別のみが設定されます。
-
Since
3.5
- -
-
- - -
-
-
-
GSPreciseTimestampTag Struct Reference
-
-
- -

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。 More...

- -

#include <gridstore.h>

- - - - - - - - -

-Public Attributes

-GSTimestamp base
 通常精度のTIMESTAMP値を表します。
 
uint32_t nanos
 ミリ秒未満の桁の値について、ナノ秒単位ので表します。More...
 
-

Detailed Description

-

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。

-
See Also
GS_TYPE_OPTION_TIME_MICRO
-
-GS_TYPE_OPTION_TIME_NANO
-
Since
5.3
-

Member Data Documentation

- -
-
- - - - -
uint32_t GSPreciseTimestampTag::nanos
-
- -

ミリ秒未満の桁の値について、ナノ秒単位ので表します。

-
有効な値の範囲はから999999までです。
- -
-
- - -
-
-
-
GSPropertyEntryTag Struct Reference
-
-
- -

プロパティの構成エントリです。 More...

- -

#include <gridstore.h>

- - - - - - - - -

-Public Attributes

-const GSCharname
 プロパティエントリの名前です。
 
-const GSCharvalue
 プロパティエントリの値です。
 
-

Detailed Description

-

プロパティの構成エントリです。

-
- -
-
-
-
GSQueryAnalysisEntryTag Struct Reference
-
-
- -

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - -

-Public Attributes

int32_t id
 一連のエントリ列における、このエントリの位置を示すIDです。More...
 
int32_t depth
 他のエントリとの関係を表すための、深さです。More...
 
const GSChartype
 このエントリが示す情報の種別です。More...
 
const GSCharvalueType
 このエントリが示す情報に対応付けられた値の型名です。More...
 
-const GSCharvalue
 このエントリが示す情報に対応付けられた値の文字列表現です。
 
-const GSCharstatement
 このエントリが示す情報に対応するTQL文の一部です。
 
-

Detailed Description

-

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。

-
TQLのEXPLAIN文ならびEXPLAIN ANALYZE文の実行結果を保持するために使用します。1つの実行結果は、このエントリの列により表現されます。
-

Member Data Documentation

- -
-
- - - - -
int32_t GSQueryAnalysisEntryTag::depth
-
- -

他のエントリとの関係を表すための、深さです。

-
このエントリより小さな値のIDを順にたどり、このエントリの深さより1だけ浅いエントリが存在した場合、このエントリは、該当するエントリの内容をより詳しく説明するためのものであることを意味します。
- -
-
- -
-
- - - - -
int32_t GSQueryAnalysisEntryTag::id
-
- -

一連のエントリ列における、このエントリの位置を示すIDです。

-
TQLを実行した結果を受け取る場合、IDは1から順に割り当てられます。
- -
-
- -
-
- - - - -
const GSChar* GSQueryAnalysisEntryTag::type
-
- -

このエントリが示す情報の種別です。

-
実行時間といった解析結果の種別、クエリプランの構成要素の種別などを表します。
- -
-
- -
-
- - - - -
const GSChar* GSQueryAnalysisEntryTag::valueType
-
- -

このエントリが示す情報に対応付けられた値の型名です。

-
実行時間といった解析結果などに対応する値の型名です。型の名称は、TQLで定義された基本型のうち次のものです。
    -
  • STRING
  • -
  • BOOL
  • -
  • BYTE
  • -
  • SHORT
  • -
  • INTEGER
  • -
  • LONG
  • -
  • FLOAT
  • -
  • DOUBLE
  • -
-
- -
-
- - -
-
-
-
GSRowKeyPredicateEntryTag Struct Reference
-
-
- -

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。 More...

- -

#include <gridstore.h>

- - - - - - - - -

-Public Attributes

-const GSCharcontainerName
 コンテナ名です。
 
-GSRowKeyPredicatepredicate
 コンテナのロウキーについての合致条件です。
 
-

Detailed Description

-

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。

-
Since
1.5
-
- -
-
-
-
GSTimeSeriesPropertiesTag Struct Reference
-
-
- -

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

int32_t rowExpirationTime
 ロウの有効期限の基準となる経過期間です。More...
 
GSTimeUnit rowExpirationTimeUnit
 ロウの有効期限の基準とする経過時間の単位です。More...
 
int32_t compressionWindowSize
 間引き圧縮において連続して間引きされるロウの最大期間です。More...
 
GSTimeUnit compressionWindowSizeUnit
 間引き圧縮において連続して間引きされるロウの最大期間の単位です。More...
 
-GSCompressionMethod compressionMethod
 時系列圧縮方式の種別です。
 
size_t compressionListSize
 カラム別圧縮設定(compressionList)のエントリ数です。More...
 
GSColumnCompressioncompressionList
 カラム別の圧縮設定です。More...
 
int32_t expirationDivisionCount
 期限に到達したロウデータの解放単位と対応する、有効期間に対しての分割数です。More...
 
-

Detailed Description

-

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。

-
カラム名の表記、もしくは、個別に圧縮設定できるカラム数の上限などの内容の妥当性について、必ずしも検査するとは限りません。
-

Member Data Documentation

- -
-
- - - - -
GSColumnCompression* GSTimeSeriesPropertiesTag::compressionList
-
- -

カラム別の圧縮設定です。

-
エントリ数が0の場合、時系列を新規作成または更新する際に無視されます。
- -
-
- -
-
- - - - -
size_t GSTimeSeriesPropertiesTag::compressionListSize
-
- -

カラム別圧縮設定(compressionList)のエントリ数です。

-
1つの時系列に対してパラメータ設定できるカラムの上限数については、GridDB機能リファレンスを参照してください。上限を超えたオプションを指定して時系列を作成することはできません。
- -
-
- -
-
- - - - -
int32_t GSTimeSeriesPropertiesTag::compressionWindowSize
-
- -

間引き圧縮において連続して間引きされるロウの最大期間です。

-
この期間が設定された時系列のロウについて、前方のロウと指定の期間以上時刻が離れていた場合、間引き圧縮として間引き可能な条件を満たしていたとしても、間引かれなくなります。
-
時系列圧縮方式としてGS_COMPRESSION_NOが設定されていた場合、この期間の設定は無視されます。
-
時系列圧縮方式としてGS_COMPRESSION_HIまたはGS_COMPRESSION_SSが設定されており、この期間として0以下の値が設定された場合、TIMESTAMP型の取りうる値の範囲全体が期間として設定されたとみなされます。
-
前方のロウと指定の期間以上時刻が離れておらず、かつ、間引き圧縮として間引き可能な条件を満たしていたとしても、格納先の内部の配置などによっては間引かれない場合があります。
- -
-
- -
-
- - - - -
GSTimeUnit GSTimeSeriesPropertiesTag::compressionWindowSizeUnit
-
- -

間引き圧縮において連続して間引きされるロウの最大期間の単位です。

-
最大期間の値が明示的に設定されていた場合、GS_TIME_UNIT_YEARまたはGS_TIME_UNIT_MONTHが設定されたオプションを指定して、時系列を作成することはできません。
- -
-
- -
-
- - - - -
int32_t GSTimeSeriesPropertiesTag::expirationDivisionCount
-
- -

期限に到達したロウデータの解放単位と対応する、有効期間に対しての分割数です。

-
分割数を設定すると、期限に到達したロウデータの管理領域を解放するための条件を制御できます。期限に到達したロウデータが分割数に相当する期間だけ集まった時点で解放しようとします。
-
分割数の上限については、GridDB機能リファレンスを参照してください。上限を超えたオプションを指定して時系列を作成することはできません。
-
値が負の場合、分割数が設定されていないことを示します。0が設定されたオプションを指定して時系列を作成することはできません。
-
ロウの有効期限の基準となる経過期間の設定がない場合、この分割数の設定は無視されます。一方、ロウの有効期限の基準となる経過期間の設定がある場合にこの分割数の設定を省略すると、作成される時系列にはGridDBクラスタ上のデフォルトの分割数が設定されます。
-
Since
2.0
- -
-
- -
-
- - - - -
int32_t GSTimeSeriesPropertiesTag::rowExpirationTime
-
- -

ロウの有効期限の基準となる経過期間です。

-
ロウの有効期限の時刻は、ロウキーの時刻から指定の経過期間を加算することで求まります。有効期限の時刻がGridDB上の現在時刻よりも古いロウは、有効期限の切れたロウとみなされます。期限切れのロウは、検索や更新といったロウ操作の対象から外れ、存在しないものとみなされます。対応するGridDB上の内部データは、随時削除されます。
-
Attention
有効期限超過の判定に使用される現在時刻は、GridDBの各ノードの実行環境に依存します。したがって、ネットワークの遅延や実行環境の時刻設定のずれなどにより、このプロセスの実行環境の現在時刻より前に期限切れ前のロウにアクセスできなくなる場合や、この現在時刻より後に期限切れロウにアクセスできる場合があります。意図しないロウの喪失を避けるために、最低限必要な期間よりも大きな値を設定することを推奨します。
-
作成済みの時系列の設定を変更することはできません。
-
値が負の場合、有効期限はないものとみなされ、明示的に削除操作を行わない限りロウが削除されなくなります。0が設定されたオプションを指定して時系列を作成することはできません。
- -
-
- -
-
- - - - -
GSTimeUnit GSTimeSeriesPropertiesTag::rowExpirationTimeUnit
-
- -

ロウの有効期限の基準とする経過時間の単位です。

-
有効期限の期間値が設定されていた場合、GS_TIME_UNIT_YEARまたはGS_TIME_UNIT_MONTHが設定されたオプションを指定して、時系列を作成することはできません。
- -
-
- - -
-
-
-
GSTimeZoneTag Struct Reference
-
-
- -

タイムゾーン情報を表します。 More...

- -

#include <gridstore.h>

-

Detailed Description

-

タイムゾーン情報を表します。

-
Since
4.3
-
- -
-
-
-
GSTimestampFormatOptionTag Struct Reference
-
-
- -

日時フォーマットに関するオプション情報を表します。 More...

- -

#include <gridstore.h>

- - - - - -

-Public Attributes

const GSTimeZonetimeZone
 日時フォーマットに用いるタイムゾーンのオプションです。More...
 
-

Detailed Description

-

日時フォーマットに関するオプション情報を表します。

-
Note
使用する関数によっては、オプション情報を一部またはすべて参照しない場合があります。
-
Since
5.3
-

Member Data Documentation

- -
-
- - - - -
const GSTimeZone* GSTimestampFormatOptionTag::timeZone
-
- -

日時フォーマットに用いるタイムゾーンのオプションです。

-
NULLの場合、タイムゾーンが指定されなかったものとみなされます。
- -
-
- - -
-
-
-
GSTriggerInfoTag Struct Reference
-
-
- -

トリガに関する情報を表します。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

-const GSCharname
 トリガ名です。
 
-GSTriggerType type
 トリガ種別です。
 
-const GSCharuri
 通知先URIです。
 
-GSTriggerEventTypeFlags eventTypeFlags
 監視対象とする更新操作種別です。
 
-const GSChar *const * columnSet
 通知対象とするカラム名の集合です。
 
-size_t columnCount
 通知対象とするカラム名の数です。
 
-const GSCharjmsDestinationType
 JMS通知で使用するJMSデスティネーション種別です。
 
-const GSCharjmsDestinationName
 JMS通知で使用するJMSデスティネーション名です。
 
-const GSCharuser
 通知先サーバに接続する際のユーザ名です。
 
-const GSCharpassword
 通知先サーバに接続する際のパスワードです。
 
-

Detailed Description

-

トリガに関する情報を表します。

-
Since
1.5
-
- -
-
-
-
GSValueTag Union Reference
-
-
- -

ロウフィールドに格納できるいずれかの型の値です。 More...

- -

#include <gridstore.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

-const GSCharasString
 STRING型のロウフィールドに対応する値です。
 
-GSBool asBool
 BOOL型のロウフィールドに対応する値です。
 
-int8_t asByte
 BYTE型のロウフィールドに対応する値です。
 
-int16_t asShort
 SHORT型のロウフィールドに対応する値です。
 
-int32_t asInteger
 INTEGER型のロウフィールドに対応する値です。
 
-int64_t asLong
 LONG型のロウフィールドに対応する値です。
 
-float asFloat
 FLOAT型のロウフィールドに対応する値です。
 
-double asDouble
 DOUBLE型のロウフィールドに対応する値です。
 
GSTimestamp asTimestamp
 通常精度のTIMESTAMP型のロウフィールドに対応する値です。More...
 
GSPreciseTimestamp asPreciseTimestamp
 高精度のTIMESTAMP型のロウフィールドに対応する値です。More...
 
-const GSCharasGeometry
 GEOMETRY型のロウフィールドに対応する値です。
 
-GSBlob asBlob
 BLOB型のロウフィールドに対応する値です。
 
-struct {
   size_t   length
 配列の要素数です。
 
   union {
      const void *   data
 配列の要素列へのアドレスです。
 
      const GSChar *const *   asString
 STRING型配列の要素列へのアドレスです。
 
      const GSBool *   asBool
 BOOL型配列の要素列へのアドレスです。
 
      const int8_t *   asByte
 BYTE型配列の要素列へのアドレスです。
 
      const int16_t *   asShort
 SHORT型配列の要素列へのアドレスです。
 
      const int32_t *   asInteger
 INTEGER型配列の要素列へのアドレスです。
 
      const int64_t *   asLong
 LONG型配列の要素列へのアドレスです。
 
      const float *   asFloat
 FLOAT型配列の要素列へのアドレスです。
 
      const double *   asDouble
 DOUBLE型配列の要素列へのアドレスです。
 
      const GSTimestamp *   asTimestamp
 TIMESTAMP型配列の要素列へのアドレスです。
 
   }   elements
 配列の要素です。
 
asArray
 配列型のロウフィールドに対応する値です。
 
-

Detailed Description

-

ロウフィールドに格納できるいずれかの型の値です。

-
Since
1.5
-

Member Data Documentation

- -
-
- - - - -
GSPreciseTimestamp GSValueTag::asPreciseTimestamp
-
- -

高精度のTIMESTAMP型のロウフィールドに対応する値です。

-
GSValueを用いてフィールド値を設定・取得する場合、値の型はGS_TYPE_PRECISE_TIMESTAMPと対応します。
-
Since
5.3
- -
-
- -
-
- - - - -
GSTimestamp GSValueTag::asTimestamp
-
- -

通常精度のTIMESTAMP型のロウフィールドに対応する値です。

-
GSValueを用いてフィールド値を設定・取得する場合、値の型はGS_TYPE_TIMESTAMPと対応します。
- -
-
- - -
-
- - -
- -
- -
-

1.2 APIサンプル

-
- - - -
- -
-

1.2.1 基本: コレクション操作のサンプル

-
#include "gridstore.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-typedef struct {
-	const GSChar *name;
-	GSBool status;
-	uint64_t count;
-	const int8_t *lob;
-	size_t lobSize;
-} Person;
-
-GS_STRUCT_BINDING(Person,
-	GS_STRUCT_BINDING_KEY(name, GS_TYPE_STRING)
-	GS_STRUCT_BINDING_ELEMENT(status, GS_TYPE_BOOL)
-	GS_STRUCT_BINDING_ELEMENT(count, GS_TYPE_LONG)
-	GS_STRUCT_BINDING_ARRAY(lob, lobSize, GS_TYPE_BYTE));
-
-// コレクションデータの操作
-int sample1(const char *args[5]) {
-	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
-	static const GSBool update = GS_TRUE;
-
-	GSGridStore *store;
-	GSCollection *col;
-	GSQuery *query;
-	GSRowSet *rs;
-	Person person;
-	GSResult ret;
-
-	const GSPropertyEntry props[] = {
-			{ "notificationAddress", args[0] },
-			{ "notificationPort", args[1] },
-			{ "clusterName", args[2] },
-			{ "user", args[3] },
-			{ "password", args[4] } };
-	const size_t propCount = sizeof(props) / sizeof(*props);
-
-	// GridStoreインスタンスの取得
-	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
-
-	// コレクションの作成
-	gsPutCollection(store, "col01",
-			GS_GET_STRUCT_BINDING(Person), NULL, GS_FALSE, &col);
-
-	// カラムに索引を設定
-	gsCreateIndex(col, "count", GS_INDEX_FLAG_DEFAULT);
-
-	// 自動コミットモードをオフ
-	gsSetAutoCommit(col, GS_FALSE);
-
-	// Rowのデータを用意
-	person.name = "name01";
-	person.status = GS_FALSE;
-	person.count = 1;
-	person.lob = personLob;
-	person.lobSize = sizeof(personLob);
-
-	// KV形式でRowを操作: RowKeyは"name01"
-	gsPutRow(col, NULL, &person, NULL);	// 登録
-	gsGetRowForUpdate(col, &person.name, &person, NULL);	// 取得(更新用にロック)
-	gsDeleteRow(col, &person.name, NULL);	// 削除
-
-	// KV形式でRowを操作: RowKeyは"name02"
-	gsPutRowByString(col, "name02", &person, NULL);	// 登録(RowKeyを指定)
-
-	// トランザクションの確定(ロック解除)
-	gsCommit(col);
-
-	// コレクション内のRowを検索(クエリ使用)
-	gsQuery(col, "select * where name = 'name02'", &query);
-
-	// 検索したRowの取得と更新
-	gsFetch(query, update, &rs);
-	while (gsHasNextRow(rs)) {
-		size_t i;
-
-		// 検索したRowの更新
-		gsGetNextRow(rs, &person);
-		person.count += 1;
-		ret = gsUpdateCurrentRow(rs, &person);
-		if (!GS_SUCCEEDED(ret)) break;
-
-		printf("Person:");
-		printf(" name=%s", person.name);
-		printf(" status=%s", person.status ? "true" : "false");
-		printf(" count=%d", (int) person.count);
-		printf(" lob=[");
-		for (i = 0; i < person.lobSize; i++) {
-			if (i > 0) printf(", ");
-			printf("%d", (int) person.lob[i]);
-		}
-		printf("]\n");
-	}
-
-	// トランザクションの確定
-	ret = gsCommit(col);
-
-	// リソースの解放
-	gsCloseGridStore(&store, GS_TRUE);
-
-	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-
- - -
- -
- -
-

1.2.2 基本: 時系列操作のサンプル ― 登録・範囲取得

-
#include "gridstore.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-typedef struct {
-	GSTimestamp timestamp;
-	GSBool active;
-	double voltage;
-} Point;
-
-GS_STRUCT_BINDING(Point,
-	GS_STRUCT_BINDING_KEY(timestamp, GS_TYPE_TIMESTAMP)
-	GS_STRUCT_BINDING_ELEMENT(active, GS_TYPE_BOOL)
-	GS_STRUCT_BINDING_ELEMENT(voltage, GS_TYPE_DOUBLE));
-
-// 時系列データの登録と範囲取得
-int sample2(const char *args[5]) {
-	GSGridStore *store;
-	GSTimeSeries *ts;
-	Point point;
-	GSTimestamp now;
-	GSTimestamp before;
-	GSQuery *query;
-	GSRowSet *rs;
-	GSResult ret = !GS_RESULT_OK;
-
-	const GSPropertyEntry props[] = {
-			{ "notificationAddress", args[0] },
-			{ "notificationPort", args[1] },
-			{ "clusterName", args[2] },
-			{ "user", args[3] },
-			{ "password", args[4] } };
-	const size_t propCount = sizeof(props) / sizeof(*props);
-
-	// GridStoreインスタンスの取得
-	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
-
-	// 時系列の作成 (既存の場合は取得のみ)
-	gsPutTimeSeries(store, "point01",
-			GS_GET_STRUCT_BINDING(Point), NULL, GS_FALSE, &ts);
-
-	// 時系列要素のデータを用意
-	point.active = GS_FALSE;
-	point.voltage = 100;
-
-	// 時系列要素の登録(グリッドストア側で時刻設定)
-	gsAppendTimeSeriesRow(ts, &point, NULL);
-
-	// 指定区間の時系列の取得: 6時間前から直近まで
-	now = gsCurrentTime();
-	before = gsAddTime(now, -6, GS_TIME_UNIT_HOUR);
-
-	gsQueryByTimeSeriesRange(ts, before, now, &query);
-	ret = gsFetch(query, GS_FALSE, &rs);
-	while (gsHasNextRow(rs)) {
-		GSChar timeStr[GS_TIME_STRING_SIZE_MAX];
-
-		ret = gsGetNextRow(rs, &point);
-		if (!GS_SUCCEEDED(ret)) break;
-
-		gsFormatTime(point.timestamp, timeStr, sizeof(timeStr));
-		printf("Time=%s", timeStr);
-		printf(" Active=%s", point.active ? "true" : "false");
-		printf(" Voltage=%.1lf\n", point.voltage);
-	}
-
-	// リソースの解放
-	gsCloseGridStore(&store, GS_TRUE);
-
-	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-
- - -
- -
- -
-

1.2.3 基本: 時系列操作のサンプル ― 検索・集計

-
#include "gridstore.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-typedef struct {
-	GSTimestamp timestamp;
-	GSBool active;
-	double voltage;
-} Point;
-
-GS_STRUCT_BINDING(Point,
-	GS_STRUCT_BINDING_KEY(timestamp, GS_TYPE_TIMESTAMP)
-	GS_STRUCT_BINDING_ELEMENT(active, GS_TYPE_BOOL)
-	GS_STRUCT_BINDING_ELEMENT(voltage, GS_TYPE_DOUBLE));
-
-// 時系列データの検索と集計
-int sample3(const char *args[5]) {
-	GSGridStore *store;
-	GSTimeSeries *ts;
-	GSQuery *query;
-	GSRowSet *rs;
-	GSResult ret = !GS_RESULT_OK;
-
-	// 読み取りのみなので、一貫性レベルを緩和(デフォルトはIMMEDIATE)
-	const GSPropertyEntry props[] = {
-			{ "notificationAddress", args[0] },
-			{ "notificationPort", args[1] },
-			{ "clusterName", args[2] },
-			{ "user", args[3] },
-			{ "password", args[4] },
-			{ "consistency", "EVENTUAL" } };
-	const size_t propCount = sizeof(props) / sizeof(*props);
-
-	// GridStoreインスタンスの取得
-	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
-
-	// 時系列の取得(既存の場合は取得のみ)
-	// ※sample2と同じPoint構造体を使用
-	gsGetTimeSeries(store, "point01", GS_GET_STRUCT_BINDING(Point), &ts);
-
-	// 停止中にもかかわらず電圧が基準値以上の箇所を検索
-	gsQuery(ts,
-			"select * from point01"
-			" where not active and voltage > 50", &query);
-	gsFetch(query, GS_FALSE, &rs);
-
-	while (gsHasNextRow(rs)) {
-		// 各異常ポイントについて調査
-
-		GSTimestamp hot;
-		Point hotPoint;
-		GSTimestamp start;
-		Point startPoint;
-		GSTimestamp end;
-		GSAggregationResult *avg;
-		double avgValue;
-		GSChar hotStr[GS_TIME_STRING_SIZE_MAX];
-
-		ret = gsGetNextRow(rs, &hotPoint);
-		if (!GS_SUCCEEDED(ret)) break;
-		hot = hotPoint.timestamp;
-
-		// 10分前付近のデータを取得
-		start = gsAddTime(hot, -10, GS_TIME_UNIT_MINUTE);
-		gsGetRowByBaseTime(
-				ts, start, GS_TIME_OPERATOR_NEXT, &startPoint, NULL);
-
-		// 前後10分間の平均値を計算
-		end = gsAddTime(hot, 10, GS_TIME_UNIT_MINUTE);
-		gsAggregateTimeSeries(
-				ts, start, end, "voltage", GS_AGGREGATION_AVERAGE, &avg);
-
-		ret = gsGetAggregationValueAsDouble(avg, &avgValue, NULL);
-		if (!GS_SUCCEEDED(ret)) break;
-
-		gsFormatTime(hot, hotStr, sizeof(hotStr));
-
-		printf("[Alert] %s", hotStr);
-		printf(" start=%.1lf", startPoint.voltage);
-		printf(" hot=%.1lf", hotPoint.voltage);
-		printf(" avg=%.1lf\n", avgValue);
-	}
-
-	// リソースの解放
-	gsCloseGridStore(&store, GS_TRUE);
-
-	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-
- - -
- -
- -
-

1.2.4 応用: コレクション操作のサンプル ― コンテナ情報を用いてスキーマ定義

-
#include "gridstore.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-// コンテナ情報を用いてスキーマ定義
-int sample4(const char *args[5]) {
-	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
-	static const GSBool update = GS_TRUE;
-
-	GSGridStore *store;
-	GSContainer *container;
-	GSContainerInfo info = GS_CONTAINER_INFO_INITIALIZER;
-	GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
-	GSColumnInfo columnInfoList[4];
-	GSRow *row;
-	GSQuery *query;
-	GSRowSet *rs;
-	GSResult ret;
-
-	const GSPropertyEntry props[] = {
-			{ "notificationAddress", args[0] },
-			{ "notificationPort", args[1] },
-			{ "clusterName", args[2] },
-			{ "user", args[3] },
-			{ "password", args[4] } };
-	const size_t propCount = sizeof(props) / sizeof(*props);
-
-	// GridStoreインスタンスの取得
-	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
-
-	// コンテナ情報を作成
-	columnInfo.name = "name";
-	columnInfo.type = GS_TYPE_STRING;
-	columnInfoList[0] = columnInfo;
-
-	columnInfo.name = "status";
-	columnInfo.type = GS_TYPE_BOOL;
-	columnInfoList[1] = columnInfo;
-
-	columnInfo.name = "count";
-	columnInfo.type = GS_TYPE_LONG;
-	columnInfoList[2] = columnInfo;
-
-	columnInfo.name = "lob";
-	columnInfo.type = GS_TYPE_BYTE_ARRAY;
-	columnInfoList[3] = columnInfo;
-
-	info.type = GS_CONTAINER_COLLECTION;
-	info.name = "col01";
-	info.columnCount = sizeof(columnInfoList) / sizeof(*columnInfoList);
-	info.columnInfoList = columnInfoList;
-	info.rowKeyAssigned = GS_TRUE;
-
-	// コレクションの作成
-	gsPutContainerGeneral(store, NULL, &info, GS_FALSE, &container);
-
-	// カラムに索引を設定
-	gsCreateIndex(container, "count", GS_INDEX_FLAG_DEFAULT);
-
-	// 自動コミットモードをオフ
-	gsSetAutoCommit(container, GS_FALSE);
-
-	// Rowのデータを用意
-	{
-		const GSChar *name = "name01";
-		GSBool status = GS_FALSE;
-		int64_t count = 1;
-		const int8_t *lobData = personLob;
-		size_t lobSize = sizeof(personLob);
-
-		gsCreateRowByStore(store, &info, &row);
-		gsSetRowFieldByString(row, 0, name);
-		gsSetRowFieldByBool(row, 1, status);
-		gsSetRowFieldByLong(row, 2, count);
-		gsSetRowFieldByByteArray(row, 3, lobData, lobSize);
-	}
-
-	// KV形式でRowを操作: RowKeyは"name01"
-	gsPutRow(container, NULL, row, NULL);	// 登録
-	gsGetRowByString(container, "name01", row, update, NULL);	// 取得(更新用にロック)
-	gsDeleteRowByString(container, "name01", NULL);	// 削除
-
-	// KV形式でRowを操作: RowKeyは"name02"
-	gsPutRowByString(container, "name02", row, NULL);	// 登録(RowKeyを指定)
-
-	// 不要ロウオブジェクトの解放
-	gsCloseRow(&row);
-
-	// トランザクションの確定(ロック解除)
-	gsCommit(container);
-
-	// コレクション内のRowを検索(クエリ使用)
-	gsQuery(container, "select * where name = 'name02'", &query);
-
-	// 検索したRowの取得と更新
-	gsFetch(query, update, &rs);
-	while (gsHasNextRow(rs)) {
-		const GSChar *name;
-		GSBool status;
-		int64_t count;
-		const int8_t *lobData;
-		size_t lobSize;
-		size_t i;
-
-		gsCreateRowByContainer(container, &row);
-
-		// 検索したRowの更新
-		gsGetNextRow(rs, row);
-		gsGetRowFieldAsString(row, 0, &name);
-		gsGetRowFieldAsBool(row, 1, &status);
-		gsGetRowFieldAsLong(row, 2, &count);
-		gsGetRowFieldAsByteArray(row, 3, &lobData, &lobSize);
-		count += 1;
-		ret = gsUpdateCurrentRow(rs, row);
-		if (!GS_SUCCEEDED(ret) || name == NULL) break;
-
-		printf("Person:");
-		printf(" name=%s", name);
-		printf(" status=%s", status ? "true" : "false");
-		printf(" count=%d", (int) count);
-		printf(" lob=[");
-		for (i = 0; i < lobSize; i++) {
-			if (i > 0) {
-				printf(", ");
-			}
-			printf("%d", (int) lobData[i]);
-		}
-		printf("]\n");
-	}
-
-	// トランザクションの確定
-	ret = gsCommit(container);
-
-	// コレクションの削除
-	gsDropContainer(store, info.name);
-
-	// リソースの解放
-	gsCloseGridStore(&store, GS_TRUE);
-
-	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-
- - -
- -
- -
-

1.2.5 応用: コレクション操作のサンプル ― 複数コンテナ一括操作

-
#include "gridstore.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#define SAMPLE5_CONTAINER_COUNT 5
-#define SAMPLE5_ROW_COUNT 2
-
-// 複数コンテナ一括操作
-int sample5(const char *args[5]) {
-	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
-
-	static const GSChar *const containerNameList[SAMPLE5_CONTAINER_COUNT] = {
-			"col01", "col02", "col03", "col04", "col05"
-	};
-	static const GSChar *const keyList[SAMPLE5_ROW_COUNT] = {
-			"name01", "name02"
-	};
-
-	static const size_t containerCount = SAMPLE5_CONTAINER_COUNT;
-	static const size_t rowCount = SAMPLE5_ROW_COUNT;
-
-	GSGridStore *store;
-	GSContainer *containerList[SAMPLE5_CONTAINER_COUNT];
-	GSContainerInfo info = GS_CONTAINER_INFO_INITIALIZER;
-	GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
-	GSColumnInfo columnInfoList[4];
-	GSResult ret;
-	int failed = 0;
-	size_t i, j;
-
-	const GSPropertyEntry props[] = {
-			{ "notificationAddress", args[0] },
-			{ "notificationPort", args[1] },
-			{ "clusterName", args[2] },
-			{ "user", args[3] },
-			{ "password", args[4] } };
-	const size_t propCount = sizeof(props) / sizeof(*props);
-
-	// GridStoreインスタンスの取得
-	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
-
-	//コンテナ定義情報を作成
-	columnInfo.name = "name";
-	columnInfo.type = GS_TYPE_STRING;
-	columnInfoList[0] = columnInfo;
-
-	columnInfo.name = "status";
-	columnInfo.type = GS_TYPE_BOOL;
-	columnInfoList[1] = columnInfo;
-
-	columnInfo.name = "count";
-	columnInfo.type = GS_TYPE_LONG;
-	columnInfoList[2] = columnInfo;
-
-	columnInfo.name = "lob";
-	columnInfo.type = GS_TYPE_BYTE_ARRAY;
-	columnInfoList[3] = columnInfo;
-
-	info.type = GS_CONTAINER_COLLECTION;
-	info.columnCount = sizeof(columnInfoList) / sizeof(*columnInfoList);
-	info.columnInfoList = columnInfoList;
-	info.rowKeyAssigned = GS_TRUE;
-
-	// コレクションの作成
-	for (i = 0; i < containerCount; i++) {
-		const GSChar *name = containerNameList[i];
-		gsPutContainerGeneral(store, name, &info, GS_FALSE, &containerList[i]);
-	}
-
-	// 複数コレクションのRowを一括登録
-	{
-		void *allRowList[SAMPLE5_CONTAINER_COUNT][SAMPLE5_ROW_COUNT];
-		GSContainerRowEntry inEntry = GS_CONTAINER_ROW_ENTRY_INITIALIZER;
-		GSContainerRowEntry inEntryList[SAMPLE5_CONTAINER_COUNT];
-
-		GSBool status = GS_FALSE;
-		int64_t count = 1;
-		const int8_t *lobData = personLob;
-		size_t lobSize = sizeof(personLob);
-
-		for (i = 0; i < containerCount; i++) {
-			for (j = 0; j < rowCount; j++) {
-				GSRow *row;
-				const GSChar *name = keyList[j];
-
-				gsCreateRowByStore(store, &info, &row);
-				gsSetRowFieldByString(row, 0, name);
-				gsSetRowFieldByBool(row, 1, status);
-				gsSetRowFieldByLong(row, 2, count);
-				gsSetRowFieldByByteArray(row, 3, lobData, lobSize);
-				count++;
-
-				allRowList[i][j] = row;
-			}
-			inEntry.containerName = containerNameList[i];
-			inEntry.rowList = allRowList[i];
-			inEntry.rowCount = rowCount;
-			inEntryList[i] = inEntry;
-		}
-
-		ret = gsPutMultipleContainerRows(store, inEntryList, containerCount);
-		failed |= !GS_SUCCEEDED(ret);
-
-		for (i = 0; i < containerCount; i++) {
-			for (j = 0; j < rowCount; j++) {
-				GSRow *row = allRowList[i][j];
-				gsCloseRow(&row);
-			}
-		}
-	}
-
-	// 複数コレクションのRowを一括取得
-	{
-		GSRowKeyPredicateEntry predEntry =
-				GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER;
-		GSRowKeyPredicateEntry predEntryValueList[SAMPLE5_CONTAINER_COUNT];
-		const GSRowKeyPredicateEntry *predEntryList[SAMPLE5_CONTAINER_COUNT];
-		const GSContainerRowEntry *outEntryList;
-		size_t outEntryCount;
-		GSRow *allRowList[SAMPLE5_CONTAINER_COUNT][SAMPLE5_ROW_COUNT];
-
-		// 取得条件を構築
-		for (i = 0; i < containerCount; i++) {
-			GSRowKeyPredicate *predicate;
-
-			gsCreateRowKeyPredicate(store, GS_TYPE_STRING, &predicate);
-			for (j = 0; j < rowCount; j++) {
-				gsAddPredicateKeyByString(predicate, keyList[j]);
-			}
-
-			predEntry.containerName = containerNameList[i];
-			predEntry.predicate = predicate;
-			predEntryValueList[i] = predEntry;
-			predEntryList[i] = &predEntryValueList[i];
-		}
-
-		ret = gsGetMultipleContainerRows(
-				store, predEntryList, containerCount,
-				&outEntryList, &outEntryCount);
-		failed |= !GS_SUCCEEDED(ret);
-
-		// 取得結果ロウ列をコピー
-		for (i = 0; i < containerCount || i < outEntryCount; i++) {
-			GSContainerRowEntry outEntry = GS_CONTAINER_ROW_ENTRY_INITIALIZER;
-			if (i < outEntryCount) {
-				outEntry = outEntryList[i];
-			}
-			for (j = 0; j < rowCount || j < outEntry.rowCount; j++) {
-				GSRow *row = NULL;
-				if (j < outEntry.rowCount) {
-					row = (GSRow*) outEntry.rowList[j];
-				}
-				if (i < containerCount && j < rowCount) {
-					allRowList[i][j] = row;
-				}
-				else {
-					gsCloseRow(&row);
-				}
-			}
-		}
-
-		// 取得結果を出力
-		for (i = 0; i < containerCount; i++) {
-			for (j = 0; j < rowCount; j++) {
-				GSRow *row = allRowList[i][j];
-				const GSChar *name;
-				int64_t count;
-
-				gsGetRowFieldAsString(row, 0, &name);
-				gsGetRowFieldAsLong(row, 2, &count);
-
-				failed |= (name == NULL);
-				if (failed) break;
-
-				printf("Person[%d]:", (int) i);
-				printf(" name=%s", name);
-				printf(" count=%d\n", (int) count);
-
-				gsCloseRow(&row);
-			}
-			gsCloseRowKeyPredicate(&predEntryValueList[i].predicate);
-		}
-	}
-
-	// 複数コレクションのRowを一括検索(クエリ使用)
-	{
-		GSQuery *queryList[SAMPLE5_CONTAINER_COUNT];
-
-		for (i = 0; i < containerCount; i++) {
-			const GSChar *tql = "select * where count >= 0";
-			gsQuery(containerList[i], tql, &queryList[i]);
-		}
-
-		ret = gsFetchAll(store, queryList, containerCount);
-		failed |= !GS_SUCCEEDED(ret);
-
-		for (i = 0; i < containerCount; i++) {
-			GSRowSet *rs;
-			GSRow *row;
-
-			gsCreateRowByContainer(containerList[i], &row);
-			gsGetRowSet(queryList[i], &rs);
-
-			while (gsHasNextRow(rs)) {
-				const GSChar *name;
-				GSBool status;
-				int64_t count;
-				const int8_t *lobData;
-				size_t lobSize;
-
-				ret = gsGetNextRow(rs, row);
-				failed |= !GS_SUCCEEDED(ret);
-				if (failed) break;
-
-				gsGetRowFieldAsString(row, 0, &name);
-				gsGetRowFieldAsBool(row, 1, &status);
-				gsGetRowFieldAsLong(row, 2, &count);
-				gsGetRowFieldAsByteArray(row, 3, &lobData, &lobSize);
-				count += 1;
-
-				failed |= (name == NULL);
-				if (failed) break;
-
-				printf("Person[%d]:", (int) i);
-				printf(" name=%s", name);
-				printf(" status=%s", status ? "true" : "false");
-				printf(" count=%d", (int) count);
-				printf(" lob=[");
-				for (j = 0; j < lobSize; j++) {
-					if (j > 0) {
-						printf(", ");
-					}
-					printf("%d", (int) lobData[j]);
-				}
-				printf("]\n");
-			}
-
-			gsCloseRow(&row);
-			gsCloseRowSet(&rs);
-			gsCloseQuery(&queryList[i]);
-		}
-	}
-
-	// コレクションの削除
-	for (i = 0; i < containerCount; i++) {
-		const GSChar *name = containerNameList[i];
-		gsDropContainer(store, name);
-	}
-
-	// リソースの解放
-	gsCloseGridStore(&store, GS_TRUE);
-
-	return (failed ? EXIT_FAILURE : EXIT_SUCCESS);
-}
-
- - -
-
-
- -
- -
-

2 付録

-
- - - -
- -
-

2.1 値の範囲

-
- - -

-値の上限などの値の範囲を説明します。 -システムの制限値については、GridDB機能リファレンスを参照してください。 -

- -
- -
-

2.1.1 基本型の取りうる値

-
- -

以下の基本型の取りうる値は、次の通りです。 -

- - -
- - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
取りうる値
ブール(BOOL)型真または偽
BYTE型-27から27-1
SHORT型-215から215-1
INTEGER型-231から231-1
LONG型-263から263-1
FLOAT型IEEE754準拠
DOUBLE型IEEE754準拠
時刻(TIMESTAMP)型西暦1970年1月1日のはじめから西暦9999年12月31日の終わりまで(UTC相当)。うるう秒は扱わない。ミリ秒、マイクロ秒、ナノ秒のいずれかの精度を設定可能。
- - - - -
- -

-空間(GEOMETRY)型でTQL演算に使用できる値はST_GeomFromText関数が返す任意の値です。このうちコンテナに格納できる値はQUADRATICSURFACE構造を除いたものです。 -

-

-APIを通じて基本型とマッピングされるオブジェクトの表現範囲は、上記の範囲と異なる場合があります。上記の範囲を超えた値を持つオブジェクトの内容をコンテナに格納することはできませんが、検索条件の構築など、その他操作の可否を規定するものではありません。たとえば、Java APIにて時刻型にマッピングされるjava.util.Dateオブジェクトでは、コンテナに格納できない西暦1970年より前の年の時刻も表現でき、その値をロウキーの条件としてRowKeyPredicateオブジェクトや時系列のサンプリングクエリに含めることができます。しかし、その条件でロウを取得しようとした時点でエラーが検出される可能性があります。マッピングされるオブジェクトの具体的な表現範囲は、個々のオブジェクトの型の定義を参照してください。 -

-
-
-
- -
- -
-

3 商標

-
- - -
    -
  • -GridDBは日本国内における東芝デジタルソリューションズ株式会社の登録商標です。 -
  • -
  • -OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。 -
  • -
  • -その他製品名は、それぞれの所有者の商標または登録商標です。 - -

    -Copyright (c) 2023 Toshiba Digital Solutions Corporation -

  • -
-
-
-
-
-
- - + + + + +GridDB C APIリファレンス + + + + + + + + +
+ +

GridDB C APIリファレンス

+ + + + + + +
+

1 API

+
+ +
※【注意点】 C APIの空間データはGridDB Community Editionではサポートしていません。Java APIを用いてください。 +
+ +
+ +
+

1.1 API一覧

+
+
+
C API
+
+
+

GridDBの公開C言語インタフェースを定義します

+ + + +
+
+
+
gridstore.h File Reference
+
+
+ +

GridDBのC言語向け公開API. +More...

+
#include <stdlib.h>
+#include <stdint.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  GSPreciseTimestampTag
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
struct  GSBlobTag
 ロウオブジェクトにおけるBLOB構造を表します。More...
 
struct  GSPropertyEntryTag
 プロパティの構成エントリです。More...
 
struct  GSColumnCompressionTag
 特定のカラムの圧縮設定を表します。More...
 
struct  GSCollectionPropertiesTag
 コレクションの構成オプションを表します。More...
 
struct  GSTimeSeriesPropertiesTag
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
struct  GSColumnInfoTag
 カラムのスキーマに関する情報を表します。More...
 
struct  GSTriggerInfoTag
 トリガに関する情報を表します。More...
 
struct  GSIndexInfoTag
 索引の設定内容を表します。More...
 
struct  GSContainerInfoTag
 特定のコンテナに関する情報を表します。More...
 
struct  GSBindingTag
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。More...
 
struct  GSQueryAnalysisEntryTag
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
struct  GSContainerRowEntryTag
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
struct  GSRowKeyPredicateEntryTag
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
union  GSValueTag
 ロウフィールドに格納できるいずれかの型の値です。More...
 
struct  GSTimeZoneTag
 タイムゾーン情報を表します。More...
 
struct  GSTimestampFormatOptionTag
 日時フォーマットに関するオプション情報を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

+#define GS_CLIENT_VERSION_MAJOR   5
 GridDBクライアントのメジャーバージョンを表す数値です。
 
+#define GS_CLIENT_VERSION_MINOR   3
 GridDBクライアントのマイナーバージョンを表す数値です。
 
+#define GS_TRUE   1
 真であることを示すブール型値です。
 
+#define GS_FALSE   0
 偽であることを示すブール型値です。
 
#define GS_RESULT_OK   0
 GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。More...
 
#define GS_SUCCEEDED(result)   ((result) == GS_RESULT_OK)
 実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。More...
 
#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
 GSPreciseTimestampの初期化子です。More...
 
+#define GS_COLUMN_COMPRESSION_INITIALIZER   { NULL, GS_FALSE, 0, 0, 0 }
 GSColumnCompressionの初期化子です。
 
+#define GS_COLLECTION_PROPERTIES_INITIALIZER   { 0 }
 GSCollectionPropertiesの初期化子です。
 
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
 GSTimeSeriesPropertiesの初期化子です。More...
 
+#define GS_COLUMN_INFO_INITIALIZER   { NULL, GS_TYPE_STRING, GS_INDEX_FLAG_DEFAULT, 0 }
 GSColumnInfoの初期化子です。
 
+#define GS_TRIGGER_INFO_INITIALIZER   { NULL, GS_TRIGGER_REST, NULL, 0, NULL, 0, NULL, NULL, NULL }
 GSTriggerInfoの初期化子です。
 
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
 GSIndexInfoの初期化子です。More...
 
+#define GS_CONTAINER_INFO_INITIALIZER
 GSContainerInfoの初期化子です。
 
+#define GS_QUERY_ANALYSIS_ENTRY_INITIALIZER   { 0, 0, NULL, NULL, NULL, NULL }
 GSQueryAnalysisEntryの初期化子です。
 
#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
 GSContainerRowEntryの初期化子です。More...
 
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
 GSRowKeyPredicateEntryの初期化子です。More...
 
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
 GSTimeZoneの初期化子です。More...
 
#define GS_TIMESTAMP_DEFAULT   0
 時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。More...
 
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
 GSTimestampFormatOptionの初期化子です。More...
 
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
 TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
 GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_GET_STRUCT_BINDING(type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
 ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。More...
 
#define GS_STRUCT_BINDING(type, entries)
 ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ELEMENT(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_KEY(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ARRAY(name, member, sizeMember, elementType)
 カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ELEMENT(member, memberType)
 ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_KEY(member, memberType)
 ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ARRAY(member, sizeMember, elementType)
 ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_COMPOSITE_KEY(member, bindingType)
 ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef char GSChar
 GridDB APIで使用される標準の文字の型です。More...
 
typedef char GSBool
 GridDB APIで使用されるブール型です。More...
 
+typedef int32_t GSEnum
 列挙型
 
typedef int64_t GSTimestamp
 GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。More...
 
typedef struct
+GSGridStoreFactoryTag 
GSGridStoreFactory
 GSGridStoreインスタンスを管理します。More...
 
typedef struct GSGridStoreTag GSGridStore
 1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。More...
 
typedef struct GSContainerTag GSContainer
 同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。More...
 
+typedef struct GSQueryTag GSQuery
 特定のGSContainerに対応付けられたクエリを保持し、結果取得方法の設定ならびに実行・結果取得を行う機能を持ちます。
 
typedef struct GSRowSetTag GSRowSet
 クエリ実行より求めたロウの集合を管理します。More...
 
typedef struct
+GSAggregationResultTag 
GSAggregationResult
 集計演算の結果を保持します。More...
 
typedef GSContainer GSCollection
 ロウ集合を汎用的に管理するためのコンテナです。More...
 
typedef GSContainer GSTimeSeries
 時刻をロウキーとする、時系列処理に特化したコンテナです。More...
 
typedef struct GSRowTag GSRow
 任意のスキーマについて汎用的にフィールド操作できるロウです。More...
 
typedef GSRow GSRowKey
 ロウキーに関するカラムのみから構成されるGSRowの一種です。More...
 
typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
 ロウキーの合致条件を表します。More...
 
typedef struct
+GSPartitionControllerTag 
GSPartitionController
 パーティション状態の取得や操作のためのコントローラです。More...
 
+typedef int32_t GSResult
 GridDBに対する命令の実行結果コードの型です。
 
typedef struct
+GSPreciseTimestampTag 
GSPreciseTimestamp
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
+typedef struct GSBlobTag GSBlob
 ロウオブジェクトにおけるBLOB構造を表します。
 
+typedef struct GSPropertyEntryTag GSPropertyEntry
 プロパティの構成エントリです。
 
typedef GSEnum GSFetchOption
 
typedef GSEnum GSQueryOrder
 
typedef int32_t GSIndexTypeFlags
 
typedef GSEnum GSAggregation
 
typedef GSEnum GSInterpolationMode
 
typedef GSEnum GSTimeOperator
 
typedef GSEnum GSGeometryOperator
 
typedef GSEnum GSCompressionMethod
 
typedef GSEnum GSTimeUnit
 
typedef GSEnum GSContainerType
 
typedef GSEnum GSType
 
typedef int32_t GSTypeOption
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
typedef GSEnum GSRowSetType
 
typedef struct
+GSColumnCompressionTag 
GSColumnCompression
 特定のカラムの圧縮設定を表します。More...
 
typedef struct
+GSCollectionPropertiesTag 
GSCollectionProperties
 コレクションの構成オプションを表します。More...
 
typedef struct
+GSTimeSeriesPropertiesTag 
GSTimeSeriesProperties
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
+typedef struct GSColumnInfoTag GSColumnInfo
 カラムのスキーマに関する情報を表します。
 
typedef GSEnum GSTriggerType
 
typedef int32_t GSTriggerEventTypeFlags
 
typedef struct GSTriggerInfoTag GSTriggerInfo
 トリガに関する情報を表します。More...
 
typedef struct GSIndexInfoTag GSIndexInfo
 索引の設定内容を表します。More...
 
+typedef struct GSContainerInfoTag GSContainerInfo
 特定のコンテナに関する情報を表します。
 
+typedef struct GSBindingTag GSBinding
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。
 
typedef struct
+GSQueryAnalysisEntryTag 
GSQueryAnalysisEntry
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
typedef struct
+GSContainerRowEntryTag 
GSContainerRowEntry
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
typedef struct
+GSRowKeyPredicateEntryTag 
GSRowKeyPredicateEntry
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
typedef union GSValueTag GSValue
 ロウフィールドに格納できるいずれかの型の値です。More...
 
typedef struct GSTimeZoneTag GSTimeZone
 タイムゾーン情報を表します。More...
 
typedef struct
+GSTimestampFormatOptionTag 
GSTimestampFormatOption
 日時フォーマットに関するオプション情報を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Enumerations

enum  GSFetchOptionTag { GS_FETCH_LIMIT, +GS_FETCH_PARTIAL_EXECUTION = (GS_FETCH_LIMIT + 2) + }
 クエリ実行結果を取得する際のオプション項目です。More...
 
enum  GSQueryOrderTag { GS_ORDER_ASCENDING, +GS_ORDER_DESCENDING + }
 クエリにおける要求ロウ順序を表します。More...
 
enum  GSIndexTypeFlagTag { GS_INDEX_FLAG_DEFAULT = -1, +GS_INDEX_FLAG_TREE = 1 << 0, +GS_INDEX_FLAG_HASH = 1 << 1, +GS_INDEX_FLAG_SPATIAL = 1 << 2 + }
 GSContainerに設定する索引の種別を示します。More...
 
enum  GSAggregationTag {
+  GS_AGGREGATION_MINIMUM, +GS_AGGREGATION_MAXIMUM, +GS_AGGREGATION_TOTAL, +GS_AGGREGATION_AVERAGE, +
+  GS_AGGREGATION_VARIANCE, +GS_AGGREGATION_STANDARD_DEVIATION, +GS_AGGREGATION_COUNT, +GS_AGGREGATION_WEIGHTED_AVERAGE +
+ }
 ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。More...
 
enum  GSInterpolationModeTag { GS_INTERPOLATION_LINEAR_OR_PREVIOUS, +GS_INTERPOLATION_EMPTY + }
 ロウの補間方法の種別を表します。More...
 
enum  GSTimeOperatorTag { GS_TIME_OPERATOR_PREVIOUS, +GS_TIME_OPERATOR_PREVIOUS_ONLY, +GS_TIME_OPERATOR_NEXT, +GS_TIME_OPERATOR_NEXT_ONLY + }
 GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。More...
 
enum  GSGeometryOperatorTag { GS_GEOMETRY_OPERATOR_INTERSECT + }
 空間範囲同士の関係性についての制約を定義します。More...
 
enum  GSCompressionMethodTag { GS_COMPRESSION_NO, +GS_COMPRESSION_SS, +GS_COMPRESSION_HI + }
 圧縮方式の種別を表します。More...
 
enum  GSTimeUnitTag {
+  GS_TIME_UNIT_YEAR, +GS_TIME_UNIT_MONTH, +GS_TIME_UNIT_DAY, +GS_TIME_UNIT_HOUR, +
+  GS_TIME_UNIT_MINUTE, +GS_TIME_UNIT_SECOND, +GS_TIME_UNIT_MILLISECOND +
+ }
 時系列処理で用いる時間の単位を示します。More...
 
enum  GSContainerTypeTag { GS_CONTAINER_COLLECTION, +GS_CONTAINER_TIME_SERIES + }
 コンテナの種別を表します。More...
 
enum  GSTypeTag {
+  GS_TYPE_STRING, +GS_TYPE_BOOL, +GS_TYPE_BYTE, +GS_TYPE_SHORT, +
+  GS_TYPE_INTEGER, +GS_TYPE_LONG, +GS_TYPE_FLOAT, +GS_TYPE_DOUBLE, +
+  GS_TYPE_TIMESTAMP, +GS_TYPE_GEOMETRY, +GS_TYPE_BLOB, +GS_TYPE_STRING_ARRAY, +
+  GS_TYPE_BOOL_ARRAY, +GS_TYPE_BYTE_ARRAY, +GS_TYPE_SHORT_ARRAY, +GS_TYPE_INTEGER_ARRAY, +
+  GS_TYPE_LONG_ARRAY, +GS_TYPE_FLOAT_ARRAY, +GS_TYPE_DOUBLE_ARRAY, +GS_TYPE_TIMESTAMP_ARRAY, +
+  GS_TYPE_NULL = -1, +GS_TYPE_PRECISE_TIMESTAMP = -2 +
+ }
 GridDB上のフィールド値の型を表します。More...
 
enum  GSTypeOptionTag {
+  GS_TYPE_OPTION_NULLABLE = 1 << 1, +GS_TYPE_OPTION_NOT_NULL = 1 << 2, +GS_TYPE_OPTION_DEFAULT_VALUE_NULL = 1 << 3, +GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL = 1 << 4, +
+  GS_TYPE_OPTION_TIME_MILLI = 1 << 5, +GS_TYPE_OPTION_TIME_MICRO = 1 << 6, +GS_TYPE_OPTION_TIME_NANO = 1 << 7 +
+ }
 カラムに関するオプション設定を示します。More...
 
enum  GSRowSetTypeTag { GS_ROW_SET_CONTAINER_ROWS, +GS_ROW_SET_AGGREGATION_RESULT, +GS_ROW_SET_QUERY_ANALYSIS + }
 GSRowSetから取り出すことのできる内容の種別です。More...
 
enum  GSTriggerTypeTag { GS_TRIGGER_REST, +GS_TRIGGER_JMS + }
 トリガの種別を表します。More...
 
enum  GSTriggerEventTypeFlagTag { GS_TRIGGER_EVENT_PUT = 1 << 0, +GS_TRIGGER_EVENT_DELETE = 1 << 1 + }
 トリガで監視対象とする更新操作種別を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory **factory, GSBool allRelated)
 必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。More...
 
GS_DLL_PUBLIC
+GSGridStoreFactory
+*GS_API_CALL 
gsGetDefaultFactory ()
 デフォルトのGSGridStoreFactoryインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount, GSGridStore **store)
 指定のプロパティを持つGSGridStoreを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount)
 指定のファクトリの設定を変更します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore **store, GSBool allRelated)
 指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStore *store, const GSChar *name)
 指定の名前を持つコレクションを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStore *store, const GSChar *name)
 指定の名前を持つ時系列を削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSCollection **collection)
 指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetContainerInfo (GSGridStore *store, const GSChar *name, GSContainerInfo *info, GSBool *exists)
 指定の名前のコンテナに関する情報を取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSTimeSeries **timeSeries)
 指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutContainer (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSCollectionProperties *properties, GSBool modifiable, GSCollection **collection)
 コレクションを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSTimeSeriesProperties *properties, GSBool modifiable, GSTimeSeries **timeSeries)
 時系列を新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutContainerGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 GSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStore *store, const GSChar *name, GSContainer **container)
 GSRowによりロウ操作できるGSContainerインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutCollectionGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSCollection **collection)
 GSContainerInfoを指定して、コレクションを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStore *store, const GSChar *name, GSCollection **collection)
 GSRowによりロウ操作できるGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutTimeSeriesGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSTimeSeries **timeSeries)
 GSContainerInfoを指定して、時系列を新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStore *store, const GSChar *name, GSTimeSeries **timeSeries)
 GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStore *store, const GSChar *name)
 指定の名前を持つコンテナを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsCreateRowByStore (GSGridStore *store, const GSContainerInfo *info, GSRow **row)
 GSContainerInfoを指定して、GSRowを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStore *store, const GSContainerInfo *info, GSRowKey **key)
 GSContainerInfoを指定して、GSRowKeyを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStore *store, GSQuery *const *queryList, size_t queryCount)
 指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStore *store, const GSContainerRowEntry *entryList, size_t entryCount)
 任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStore *store, const GSRowKeyPredicateEntry *const *predicateList, size_t predicateCount, const GSContainerRowEntry **entryList, size_t *entryCount)
 指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStore *store, GSPartitionController **partitionController)
 対応するGridDBクラスタについてのGSPartitionControllerを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStore *store, GSType keyType, GSRowKeyPredicate **predicate)
 指定のGSTypeをロウキーの型とする合致条件を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStore *store, const GSContainerInfo *info, GSRowKeyPredicate **predicate)
 指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer **container, GSBool allRelated)
 指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainer *container, const GSTriggerInfo *info)
 トリガを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsCreateIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に従い、索引を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainer *container, const GSChar *name)
 トリガを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムのうち、指定された種別の索引のみを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsDropIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainer *container)
 これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainer *container, const void *key, const void *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainer *container, const void *const *rowObjs, size_t rowCount, GSBool *exists)
 指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainer *container, const GSChar *queryString, GSQuery **query)
 指定のTQL文を実行するためのクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainer *container, const void *key, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainer *container, GSContainerType *type)
 指定のコンテナの種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainer *container, GSRow **row)
 指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainer *container, GSBool enabled)
 コミットモードの設定を変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainer *container, int32_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 INTEGER型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainer *container, int64_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 LONG型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainer *container, GSTimestamp key, void *rowObj, GSBool forUpdate, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainer *container, const GSChar *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 STRING型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainer *container, int32_t key, const void *rowObj, GSBool *exists)
 INTEGER型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainer *container, int64_t key, const void *rowObj, GSBool *exists)
 LONG型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainer *container, GSTimestamp key, const void *rowObj, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, const void *rowObj, GSBool *exists)
 高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainer *container, const GSChar *key, const void *rowObj, GSBool *exists)
 STRING型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainer *container, int32_t key, GSBool *exists)
 INTEGER型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainer *container, int64_t key, GSBool *exists)
 LONG型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainer *container, GSTimestamp key, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainer *container, const GSChar *key, GSBool *exists)
 STRING型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool forUpdate, GSBool *exists)
 指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainer *container, GSRowKey *keyObj, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollection *collection, const GSChar *column, const GSChar *geometry, GSGeometryOperator geometryOp, GSQuery **query)
 指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollection *collection, const GSChar *column, const GSChar *geometryIntersection, const GSChar *geometryDisjoint, GSQuery **query)
 除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *column, GSAggregation aggregation, GSAggregationResult **aggregationResult)
 開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeries *timeSeries, const void *rowObj, GSBool *exists)
 GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeries *timeSeries, GSTimestamp base, GSTimeOperator timeOp, void *rowObj, GSBool *exists)
 指定の時刻を基準として、関係する1つのロウを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeries *timeSeries, GSTimestamp base, const GSChar *column, void *rowObj, GSBool *exists)
 指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, GSQuery **query)
 開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeries *timeSeries, const GSTimestamp *start, const GSTimestamp *end, GSQueryOrder order, GSQuery **query)
 開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *const *columnSet, size_t columnCount, GSInterpolationMode mode, int32_t interval, GSTimeUnit intervalUnit, GSQuery **query)
 特定範囲のロウ集合をサンプリングするクエリを作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow **row)
 指定のGSRowインスタンスを解放します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetRowSchema (GSRow *row, GSContainerInfo *schemaInfo)
 指定のロウに対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRow *row, int32_t column, const GSValue *fieldValue, GSType type)
 指定のフィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRow *row, int32_t column, GSValue *fieldValue, GSType *type)
 指定のフィールドの値とその型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRow *row, int32_t column)
 指定のフィールドにNULLを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRow *row, int32_t column, GSBool *nullValue)
 指定のフィールドにNULLが設定されているかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のSTRING型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のSTRING型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRow *row, int32_t column, GSBool fieldValue)
 指定のBOOL型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRow *row, int32_t column, GSBool *fieldValue)
 指定のBOOL型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRow *row, int32_t column, int8_t fieldValue)
 指定のBYTE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRow *row, int32_t column, int8_t *fieldValue)
 指定のBYTE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRow *row, int32_t column, int16_t fieldValue)
 指定のSHORT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRow *row, int32_t column, int16_t *fieldValue)
 指定のSHORT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRow *row, int32_t column, int32_t fieldValue)
 指定のINTEGER型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRow *row, int32_t column, int32_t *fieldValue)
 指定のINTEGER型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRow *row, int32_t column, int64_t fieldValue)
 指定のLONG型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRow *row, int32_t column, int64_t *fieldValue)
 指定のLONG型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRow *row, int32_t column, float fieldValue)
 指定のFLOAT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRow *row, int32_t column, float *fieldValue)
 指定のFLOAT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRow *row, int32_t column, double fieldValue)
 指定のDOUBLE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRow *row, int32_t column, double *fieldValue)
 指定のDOUBLE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRow *row, int32_t column, GSTimestamp fieldValue)
 指定の通常精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRow *row, int32_t column, GSTimestamp *fieldValue)
 指定の通常精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRow *row, int32_t column, const GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRow *row, int32_t column, GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のGEOMETRY型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のGEOMETRY型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRow *row, int32_t column, const GSBlob *fieldValue)
 指定のBLOB型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRow *row, int32_t column, GSBlob *fieldValue)
 指定のBLOB型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRow *row, int32_t column, const GSChar *const *fieldValue, size_t size)
 指定のSTRING配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRow *row, int32_t column, const GSChar *const **fieldValue, size_t *size)
 指定のSTRING配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRow *row, int32_t column, const GSBool *fieldValue, size_t size)
 指定のBOOL配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRow *row, int32_t column, const GSBool **fieldValue, size_t *size)
 指定のBOOL配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRow *row, int32_t column, const int8_t *fieldValue, size_t size)
 指定のBYTE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRow *row, int32_t column, const int8_t **fieldValue, size_t *size)
 指定のBYTE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRow *row, int32_t column, const int16_t *fieldValue, size_t size)
 指定のSHORT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRow *row, int32_t column, const int16_t **fieldValue, size_t *size)
 指定のSHORT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRow *row, int32_t column, const int32_t *fieldValue, size_t size)
 指定のINTEGER配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRow *row, int32_t column, const int32_t **fieldValue, size_t *size)
 指定のINTEGER配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRow *row, int32_t column, const int64_t *fieldValue, size_t size)
 指定のLONG配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRow *row, int32_t column, const int64_t **fieldValue, size_t *size)
 指定のLONG配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRow *row, int32_t column, const float *fieldValue, size_t size)
 指定のFLOAT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRow *row, int32_t column, const float **fieldValue, size_t *size)
 指定のFLOAT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRow *row, int32_t column, const double *fieldValue, size_t size)
 指定のDOUBLE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRow *row, int32_t column, const double **fieldValue, size_t *size)
 指定のDOUBLE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRow *row, int32_t column, const GSTimestamp *fieldValue, size_t size)
 指定のTIMESTAMP配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRow *row, int32_t column, const GSTimestamp **fieldValue, size_t *size)
 指定のTIMESTAMP配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRow *row, GSRow **destRow)
 同一のフィールド値からなる新たなGSRowインスタンスを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRow *row, GSRowKey **key)
 ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery **query)
 指定のGSQueryインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQuery *query, GSBool forUpdate, GSRowSet **rowSet)
 オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQuery *query, GSFetchOption fetchOption, const void *value, GSType valueType)
 結果取得に関するオプションを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQuery *query, GSRowSet **rowSet)
 直近に実行した結果のGSRowSetを取得します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet **rowSet)
 指定のGSRowSetインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSet *rowSet)
 現在のカーソル位置のロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSet *rowSet, void *rowObj)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSet *rowSet, GSAggregationResult **aggregationResult)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSet *rowSet, GSQueryAnalysisEntry *queryAnalysis)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。More...
 
GS_DLL_PUBLIC GSRowSetType
+GS_API_CALL 
gsGetRowSetType (GSRowSet *rowSet)
 ロウ集合の種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSet *rowSet, GSContainerInfo *schemaInfo, GSBool *exists)
 このロウ集合に対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSet *rowSet)
 ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSet *rowSet)
 現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSet *rowSet, const void *rowObj)
 現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult **aggregationResult)
 指定のGSAggregationResultインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResult *aggregationResult, void *value, GSType valueType)
 集計結果を指定の型の値として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResult *aggregationResult, int64_t *value, GSBool *assigned)
 数値型の集計値をLONG型(int64_t)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResult *aggregationResult, double *value, GSBool *assigned)
 数値型の集計値をDOUBLE型(double)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResult *aggregationResult, GSTimestamp *value, GSBool *assigned)
 時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResult *aggregationResult, GSPreciseTimestamp *value, GSBool *assigned)
 時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate **predicate)
 指定のGSRowKeyPredicateインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicate *predicate, GSType *keyType)
 合致条件の評価対象とするロウキーの型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicate *predicate, GSContainerInfo *info)
 合致条件の評価対象とするロウキーのスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の開始位置とするロウキーを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **startKey)
 範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicate *predicate, const GSChar **startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の終了位置とするロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **finishKey)
 範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicate *predicate, const GSChar **finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicate *predicate, GSRowKey *const **keyObjList, size_t *size)
 個別条件を構成するロウキーの集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicate *predicate, const GSValue **keyList, size_t *size)
 個別条件を構成する、単一カラムのロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicate *predicate, const GSChar *const **keyList, size_t *size)
 個別条件を構成するSTRING型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicate *predicate, const int32_t **keyList, size_t *size)
 個別条件を構成するINTEGER型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicate *predicate, const int64_t **keyList, size_t *size)
 個別条件を構成するLONG型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **keyList, size_t *size)
 個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **keyList, size_t *size)
 個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の開始位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *startKey, GSType keyType)
 範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicate *predicate, const GSChar *startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicate *predicate, const int64_t *startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の終了位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *finishKey, GSType keyType)
 範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicate *predicate, const GSChar *finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicate *predicate, const int64_t *finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 個別条件の要素の一つとするロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *key, GSType keyType)
 個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicate *predicate, const GSChar *key)
 個別条件の要素の一つとするSTRING型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicate *predicate, int32_t key)
 個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicate *predicate, int64_t key)
 個別条件の要素の一つとするLONG型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicate *predicate, GSTimestamp key)
 個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *key)
 個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController **controller)
 指定のGSPartitionControllerインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionController *controller, int32_t *partitionCount)
 対象とするGridDBクラスタのパーティション数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionController *controller, int32_t partitionIndex, int64_t *containerCount)
 指定のパーティションに属するコンテナの総数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionController *controller, int32_t partitionIndex, int64_t start, const int64_t *limit, const GSChar *const **nameList, size_t *size)
 指定のパーティションに所属するコンテナの名前の一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar **address)
 指定のパーティションに対応するオーナノードのアドレスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar *host)
 優先的に選択されるホストのアドレスを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionController *controller, const GSChar *containerName, int32_t *partitionIndex)
 指定のコンテナ名に対応するパーティションインデックスを取得します。More...
 
GS_DLL_PUBLIC GSTimestamp
+GS_API_CALL 
gsCurrentTime ()
 現在時刻を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSTimestamp 
gsAddTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit)
 時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC GSTimestamp
+GS_API_CALL 
gsAddZonedTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit)
 二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamp *timestamp, GSChar *strBuf, size_t bufSize, const GSTimestampFormatOption *option)
 指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSChar *str, GSTimestamp *timestamp)
 TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSChar *str, GSPreciseTimestamp *timestamp, const GSTimestampFormatOption *option)
 通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZone *zone, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZone *zone, int64_t offset, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を設定します。More...
 
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZone *zone, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSChar *str, GSTimeZone *zone)
 TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void *gsResource)
 指定のリソースに関する直前のエラー情報のスタックサイズを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーのエラーコードを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
 要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのエラー名を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーの説明内容を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの値を取得します。More...
 
+

Detailed Description

+

GridDBのC言語向け公開API.

+
+
+
+
基本定義
+
+
+ + + + + + + + + + + +

+Classes

struct  GSBlobTag
 ロウオブジェクトにおけるBLOB構造を表します。More...
 
struct  GSPropertyEntryTag
 プロパティの構成エントリです。More...
 
union  GSValueTag
 ロウフィールドに格納できるいずれかの型の値です。More...
 
+ + + + + + + + + + + + + + + + + + + +

+Macros

+#define GS_CLIENT_VERSION_MAJOR   5
 GridDBクライアントのメジャーバージョンを表す数値です。
 
+#define GS_CLIENT_VERSION_MINOR   3
 GridDBクライアントのマイナーバージョンを表す数値です。
 
+#define GS_TRUE   1
 真であることを示すブール型値です。
 
+#define GS_FALSE   0
 偽であることを示すブール型値です。
 
#define GS_RESULT_OK   0
 GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。More...
 
#define GS_SUCCEEDED(result)   ((result) == GS_RESULT_OK)
 実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef char GSChar
 GridDB APIで使用される標準の文字の型です。More...
 
typedef char GSBool
 GridDB APIで使用されるブール型です。More...
 
+typedef int32_t GSEnum
 列挙型
 
+typedef int32_t GSResult
 GridDBに対する命令の実行結果コードの型です。
 
+typedef struct GSBlobTag GSBlob
 ロウオブジェクトにおけるBLOB構造を表します。
 
+typedef struct GSPropertyEntryTag GSPropertyEntry
 プロパティの構成エントリです。
 
typedef GSEnum GSType
 
typedef union GSValueTag GSValue
 ロウフィールドに格納できるいずれかの型の値です。More...
 
+ + + + +

+Enumerations

enum  GSTypeTag {
+  GS_TYPE_STRING, +GS_TYPE_BOOL, +GS_TYPE_BYTE, +GS_TYPE_SHORT, +
+  GS_TYPE_INTEGER, +GS_TYPE_LONG, +GS_TYPE_FLOAT, +GS_TYPE_DOUBLE, +
+  GS_TYPE_TIMESTAMP, +GS_TYPE_GEOMETRY, +GS_TYPE_BLOB, +GS_TYPE_STRING_ARRAY, +
+  GS_TYPE_BOOL_ARRAY, +GS_TYPE_BYTE_ARRAY, +GS_TYPE_SHORT_ARRAY, +GS_TYPE_INTEGER_ARRAY, +
+  GS_TYPE_LONG_ARRAY, +GS_TYPE_FLOAT_ARRAY, +GS_TYPE_DOUBLE_ARRAY, +GS_TYPE_TIMESTAMP_ARRAY, +
+  GS_TYPE_NULL = -1, +GS_TYPE_PRECISE_TIMESTAMP = -2 +
+ }
 GridDB上のフィールド値の型を表します。More...
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GS_RESULT_OK   0
+
+ +

GridDBに対する命令の実行に成功したことを示す、実行結果コードの値です。

+
See Also
GSResult
+ +
+
+ +
+
+ + + + + + + + +
#define GS_SUCCEEDED( result)   ((result) == GS_RESULT_OK)
+
+ +

実行結果コードに基づきGridDBに対する命令の実行に成功したかどうかのブール値を求めるマクロです。

+
See Also
GS_RESULT_OK
+
+GSResult
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef char GSBool
+
+ +

GridDB APIで使用されるブール型です。

+
GridDB上のBOOL型と対応します。
+ +
+
+ +
+
+ + + + +
typedef char GSChar
+
+ +

GridDB APIで使用される標準の文字の型です。

+
この型の文字列エンコーディングは常にUTF-8です。
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSType
+
+
See Also
GSTypeTag
+ +
+
+ +
+
+ + + + +
typedef union GSValueTag GSValue
+
+ +

ロウフィールドに格納できるいずれかの型の値です。

+
Since
1.5
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSTypeTag
+
+ +

GridDB上のフィールド値の型を表します。

+ + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
GS_TYPE_STRING  +

STRING型です。

+
GS_TYPE_BOOL  +

BOOL型です。

+
GS_TYPE_BYTE  +

BYTE型です。

+
GS_TYPE_SHORT  +

SHORT型です。

+
GS_TYPE_INTEGER  +

INTEGER型です。

+
GS_TYPE_LONG  +

LONG型です。

+
GS_TYPE_FLOAT  +

FLOAT型です。

+
GS_TYPE_DOUBLE  +

DOUBLE型です。

+
GS_TYPE_TIMESTAMP  +

TIMESTAMP型です。

+
カラム定義に用いる場合、精度の指定にはGSTypeOptionの日時精度に関するオプションを用います。
+
ロウオブジェクトのフィールド値の型を識別するために用いる場合は、通常精度のTIMESTAMP値であることを示します。
+
GS_TYPE_GEOMETRY  +

GEOMETRY型です。

+
GS_TYPE_BLOB  +

BLOB型です。

+
GS_TYPE_STRING_ARRAY  +

STRING型配列です。

+
GS_TYPE_BOOL_ARRAY  +

BOOL型配列です。

+
GS_TYPE_BYTE_ARRAY  +

BYTE型配列です。

+
GS_TYPE_SHORT_ARRAY  +

SHORT型配列です。

+
GS_TYPE_INTEGER_ARRAY  +

INTEGER型配列です。

+
GS_TYPE_LONG_ARRAY  +

LONG型配列です。

+
GS_TYPE_FLOAT_ARRAY  +

FLOAT型配列です。

+
GS_TYPE_DOUBLE_ARRAY  +

DOUBLE型配列です。

+
GS_TYPE_TIMESTAMP_ARRAY  +

TIMESTAMP型配列です。

+
GS_TYPE_NULL  +

ロウフィールドにNULLが設定されていることを示します。

+
カラムの型として用いることはできません。
+
Since
3.5
+
GS_TYPE_PRECISE_TIMESTAMP  +

高精度のTIMESTAMP値であることを示します。

+
カラムの型として用いることはできません。ロウオブジェクトのフィールド値の型を識別するために用います。
+
Since
5.3
+
+ +
+
+
+
+
+
バインディング
+
+
+ + + + + +

+Classes

struct  GSBindingTag
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define GS_GET_STRUCT_BINDING(type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
 ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。More...
 
#define GS_STRUCT_BINDING(type, entries)
 ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ELEMENT(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_KEY(name, member, memberType)
 カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_NAMED_ARRAY(name, member, sizeMember, elementType)
 カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ELEMENT(member, memberType)
 ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_KEY(member, memberType)
 ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_ARRAY(member, sizeMember, elementType)
 ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。More...
 
#define GS_STRUCT_BINDING_COMPOSITE_KEY(member, bindingType)
 ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。More...
 
+ + + + +

+Typedefs

+typedef struct GSBindingTag GSBinding
 ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define GS_GET_STRUCT_BINDING( type)   GS_STRUCT_BINDING_GETTER_NAME(type) ()
+
+ +

ユーザ定義構造体とコンテナスキーマとの対応関係の定義を取得します。

+
指定の定義名のGS_STRUCT_BINDINGの定義を参照できるようにする必要があります。
+
Parameters
+ + +
type対応関係の定義名。
+
+
+
Returns
対応関係を示すGSBinding*型の値
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING( type,
 entries 
)
+
+ +

ユーザ定義構造体とコンテナスキーマとの対応関係を定義します。

+
現バージョンでは、静的関数の定義に展開されます。
+
複合ロウキーの構成情報の定義にも使用できます。
+
Parameters
+ + + +
type対応関係の定義名。関数名の一部として使用されます。
entries構造体メンバとカラム定義との対応関係を示す以下の定義の列を、「,」で区切らず順に並べます。 +
+
+
+
See Also
GS_GET_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_ARRAY( member,
 sizeMember,
 elementType 
)
+
+ +

ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。

+
構造体メンバの名前がそのままカラム名として使用されます。
+
Parameters
+ + + + +
member配列ポインタ変数に対応する構造体メンバの名前
sizeMember配列サイズ変数に対応する構造体メンバの名前
elementType配列型の要素型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_COMPOSITE_KEY( member,
 bindingType 
)
+
+ +

ユーザ定義構造体メンバと複合ロウキー付きカラムスキーマとの対応関係を定義します。

+
Parameters
+ + + +
member構造体メンバの名前
bindingType複合ロウキーを構成するユーザ定義構造体の名前。対応する複合ロウキーの構成については、別途GS_STRUCT_BINDINGを通じて定義されていなければならない
+
+
+
See Also
GS_STRUCT_BINDING
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_ELEMENT( member,
 memberType 
)
+
+ +

ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。

+
構造体メンバの名前がそのままカラム名として使用されます。
+
Parameters
+ + + +
member構造体メンバの名前
memberType基本型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_KEY( member,
 memberType 
)
+
+ +

ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。

+
構造体メンバの名前がそのままカラム名として使用されます。
+
Parameters
+ + + +
member構造体メンバの名前
memberType基本型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_NAMED_ARRAY( name,
 member,
 sizeMember,
 elementType 
)
+
+ +

カラム名を指定して、ユーザ定義構造体メンバと配列型カラムスキーマとの対応関係を定義します。

+
Parameters
+ + + + + +
nameカラム名
member配列ポインタ変数に対応する構造体メンバの名前
sizeMember配列サイズ変数に対応する構造体メンバの名前
elementType配列型の要素型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_NAMED_ELEMENT( name,
 member,
 memberType 
)
+
+ +

カラム名を指定して、ユーザ定義構造体メンバと基本型カラムスキーマとの対応関係を定義します。

+
Parameters
+ + + + +
nameカラム名
member構造体メンバの名前
memberType基本型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define GS_STRUCT_BINDING_NAMED_KEY( name,
 member,
 memberType 
)
+
+ +

カラム名を指定して、ユーザ定義構造体メンバとロウキー付き基本型カラムスキーマとの対応関係を定義します。

+
Parameters
+ + + + +
nameカラム名
member構造体メンバの名前
memberType基本型の名前
+
+
+
See Also
GS_STRUCT_BINDING
+ +
+
+
+
+
+
エラー処理
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void *gsResource)
 指定のリソースに関する直前のエラー情報のスタックサイズを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーのエラーコードを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージを取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
 要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーのエラー名を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void *gsResource, size_t stackIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーの説明内容を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void *gsResource, size_t stackIndex)
 指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void *gsResource, size_t stackIndex, size_t parameterIndex, GSChar *strBuf, size_t bufSize)
 指定のリソースに関する直前のエラーに関するパラメータの値を取得します。More...
 
+

Detailed Description

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorDescription (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーの説明内容を取得します。

+
説明内容は、エラーメッセージのうち、エラー番号・エラー名を除いた部分に相当します。
+
Parameters
+ + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラーの説明内容を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラーの説明内容を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+
Since
4.2
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorLocation (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーのメッセージの内部モジュールのエラー位置情報を取得します。

+
設定によっては常に空文字列しか求まらない場合があります。
+
Parameters
+ + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラー位置情報を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラー位置情報を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorMessage (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーのメッセージを取得します。

+
Parameters
+ + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラーメッセージを格納する文字列バッファ。NULLの場合、有効な結果を取得できません。NULLではなく、別の原因で有効な結果が取得できなかった場合、bufSizeが正の値であれば空文字列を格納します。
[in]bufSizeエラーメッセージを格納する文字列バッファの終端文字を含む文字数。格納する文字列の終端文字を含む文字数の方が大きい場合、終端文字を除く後方の文字列を切り詰めて格納します。0の場合、文字列バッファにアクセスしません。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorName (void * gsResource,
size_t stackIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーのエラー名を取得します。

+
Parameters
+ + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[out]strBufエラー名を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeエラー名を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+
Since
4.2
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterName (void * gsResource,
size_t stackIndex,
size_t parameterIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーに関するパラメータの名前を取得します。

+
Parameters
+ + + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[in]parameterIndexエラーに関するパラメータ集合のインデックス。0以上、かつ、パラメータの個数未満の値を指定した場合のみ、有効な結果を取得できます。
[out]strBufパラメータ名を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeパラメータ名を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+
See Also
gsGetErrorParameterCount
+
Since
4.2
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatErrorParameterValue (void * gsResource,
size_t stackIndex,
size_t parameterIndex,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

指定のリソースに関する直前のエラーに関するパラメータの値を取得します。

+
Parameters
+ + + + + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
[in]parameterIndexエラーに関するパラメータ集合のインデックス。gsFormatErrorParameterNameの同名の引数と同様です。
[out]strBufパラメータ値を格納する文字列バッファ。gsFormatErrorMessageの同名の引数と同様です。
[in]bufSizeパラメータ値を格納する文字列バッファの終端文字を含む文字数。gsFormatErrorMessageの同名の引数と同様です。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。該当する情報を取得できなかった場合、0
+
See Also
gsGetErrorParameterCount
+
Since
4.2
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetErrorCode (void * gsResource,
size_t stackIndex 
)
+
+ +

指定のリソースに関する直前のエラーのエラーコードを取得します。

+
Parameters
+ + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。0以上スタックサイズ未満の値を指定した場合のみ、有効な結果を取得できます。
+
+
+
Returns
エラーコード。該当する情報を取得できなかった場合、GS_RESULT_OK以外の値
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorParameterCount (void * gsResource,
size_t stackIndex 
)
+
+ +

指定のリソースに関する直前のエラーに関するパラメータの個数を取得します。

+
エラーに関する内容のうち、特定の情報についてはパラメータとして取り出すことができます。各パラメータは、名前と値を持ちます。パラメータの個数に基づく各インデックス値を通じ、順不同にパラメータを列挙することができます。取得できるパラメータについては、エラーを引き起こした操作に関する、個々のインタフェースまたは関連するインタフェースの定義を参照してください。
+
取得できるパラメータの内容は、gsFormatErrorMessageもしくはgsFormatErrorDescriptionより求まる文字列にも原則として含まれます。一方、この文字列から特定の情報だけを一定の文字列解析規則で取り出せるとは限りません。特定のバージョンのある状況下では取り出せたとしても、別の条件では意図しない情報が求まるなどして取り出せない可能性があります。エラーに関するパラメータを個々に取得することで、インタフェースの定義で明記された一部の情報については、文字列解析を行わずに取り出せます。
+
エラーに関するパラメータだけを記録し、メッセージ文字列などその他のエラー内容を記録しなかった場合、記録された内容からエラーの原因を特定することが困難となる可能性があります。
+
Parameters
+ + + +
[in]gsResourceリソースのアドレス。gsGetErrorStackSizeの同名の引数と同様です。
[in]stackIndexエラースタックのインデックス。gsGetErrorCodeの同名の引数と同様です。
+
+
+
Returns
エラーに関するパラメータの個数。該当する情報を取得できなかった場合、0
+
Since
4.2
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsGetErrorStackSize (void * gsResource)
+
+ +

指定のリソースに関する直前のエラー情報のスタックサイズを取得します。

+
エラー情報はスタック構造になっており、スタック番号の大きいものほどより直接的なエラー原因と対応します。
+
Parameters
+ + +
[in]gsResourceリソースのアドレス。ここでのリソースとは、GSGridStoreFactoryインスタンス、または、GSGridStoreFactoryを介して生成された、クローズ関数により破棄可能なリソースのことです。NULLが指定された場合、有効な結果を取得できません。
+
+
+
Returns
スタックサイズ。該当する情報を取得できなかった場合、0
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsIsTimeoutError (GSResult result)
+
+ +

要求した処理が既定の時間内に終了しなかった場合に発生したエラーに該当するエラーコードかどうかを判定します。

+
Returns
該当するエラーコードかどうか
+
Since
1.5
+ +
+
+
+
+
+
GSAggregationResult
+
+
+ + + + + +

+Typedefs

typedef struct
+GSAggregationResultTag 
GSAggregationResult
 集計演算の結果を保持します。More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult **aggregationResult)
 指定のGSAggregationResultインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResult *aggregationResult, void *value, GSType valueType)
 集計結果を指定の型の値として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResult *aggregationResult, int64_t *value, GSBool *assigned)
 数値型の集計値をLONG型(int64_t)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResult *aggregationResult, double *value, GSBool *assigned)
 数値型の集計値をDOUBLE型(double)として取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResult *aggregationResult, GSTimestamp *value, GSBool *assigned)
 時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResult *aggregationResult, GSPreciseTimestamp *value, GSBool *assigned)
 時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSAggregationResultTag GSAggregationResult
+
+ +

集計演算の結果を保持します。

+
gsGetNextAggregationもしくはgsAggregateTimeSeriesにより取得できる、集計演算の結果を保持します。整数型カラムに対する演算結果を浮動小数点型として、また、有効桁数の少ない数値型のカラムに対する演算結果をより桁数の多い数値型として受け取ることができます。
+
保持する型は、集計演算の種別や集計対象のカラムの型によって決定されます。具体的な規則はGSAggregationまたはTQLの仕様を参照してください。
+
取り出しできる型は、保持する型によって決まります。保持する型が数値型の場合はDOUBLE型またはLONG型、TIMESTAMP型の場合はTIMESTAMP型の値としてのみ取り出しできます。
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseAggregationResult (GSAggregationResult ** aggregationResult)
+
+ +

指定のGSAggregationResultインスタンスを解放します。

+
Parameters
+ + +
[in,out]aggregationResultクローズ対象のGSAggregationResultインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSAggregationResultインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsGetAggregationValue (GSAggregationResultaggregationResult,
void * value,
GSType valueType 
)
+
+ +

集計結果を指定の型の値として取得します。

+
取り出しできる型は、指定のaggregationResultが保持している値の型によって、次のように決まります。 + + + + + + + + +
取り出しできる値の型保持している値の型
LONG型(GS_TYPE_LONG) 数値型
DOUBLE型(GS_TYPE_DOUBLE) 数値型
TIMESTAMP型(GS_TYPE_TIMESTAMP) TIMESTAMP型
+
+
また、valueとして指定できる型は、valueTypeによって次のように決まります。 + + + + + + + + +
valueType valueの型
LONG型(GS_TYPE_LONG) int64_t*
DOUBLE型(GS_TYPE_DOUBLE) double*
TIMESTAMP型(GS_TYPE_TIMESTAMP) GSTimestamp*
+
+
Attention
valueTypevalueの型との対応が正しくない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]aggregationResult処理対象のGSAggregationResult
[out]value取り出す値を格納するための変数へのポインタ値。aggregationResultNULLの場合、また、valueTypevalueとして指定できる型のいずれとも対応しない場合は、何も格納しません。aggregationResultが保持している値の型と照らし合わせて、valueTypeが取り出しできない型であった場合、初期値として0を格納します。
[in]valueType取り出す値の型
+
+
+
Returns
指定のaggregationResultが保持している値を取り出しできたかどうか。次の場合、GS_FALSEを返します。
    +
  • valueTypeとして取り出しできない型が指定された場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsDouble (GSAggregationResultaggregationResult,
double * value,
GSBoolassigned 
)
+
+ +

数値型の集計値をDOUBLE型(double)として取得します。

+
数値型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。DOUBLE型以外の数値を保持している場合、DOUBLE型に変換したものが格納されます。
+
Parameters
+ + + + +
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • assigned以外の引数にNULLが指定された場合
  • +
+
+
Since
3.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsLong (GSAggregationResultaggregationResult,
int64_t * value,
GSBoolassigned 
)
+
+ +

数値型の集計値をLONG型(int64_t)として取得します。

+
数値型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。LONG型以外の数値を保持している場合、LONG型に変換したものが格納されます。
+
Parameters
+ + + + +
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • assigned以外の引数にNULLが指定された場合
  • +
+
+
Since
3.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsPreciseTimestamp (GSAggregationResultaggregationResult,
GSPreciseTimestampvalue,
GSBoolassigned 
)
+
+ +

時刻型の集計値を高精度のTIMESTAMP型(GSPreciseTimestamp)で取得します。

+
TIMESTAMP型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。
+
高精度のTIMESTAMP値を保持している場合、通常精度の値に変換したものが求まります。
+
Parameters
+ + + + +
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • assigned以外の引数にNULLが指定された場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetAggregationValueAsTimestamp (GSAggregationResultaggregationResult,
GSTimestampvalue,
GSBoolassigned 
)
+
+ +

時刻型の集計値を通常精度のTIMESTAMP型(GSTimestamp)で取得します。

+
TIMESTAMP型以外の値を保持している場合、assigned引数にはGS_FALSEが格納されます。
+
通常精度のTIMESTAMP値を保持している場合、高精度の値に変換したものが求まります。
+
Parameters
+ + + + +
[in]aggregationResult取得対象のGSAggregationResult
[out]value集計値を格納するための変数へのポインタ値
[out]assigned期待の型の値を取得できたかどうかを格納するための変数へのポインタ値。NULLが指定された場合、取得できたかどうかの情報は格納されません
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • assigned以外の引数にNULLが指定された場合
  • +
+
+
Since
3.5
+ +
+
+
+
+
+
GSCollection
+
+
+ + + + + +

+Classes

struct  GSCollectionPropertiesTag
 コレクションの構成オプションを表します。More...
 
+ + + + +

+Macros

+#define GS_COLLECTION_PROPERTIES_INITIALIZER   { 0 }
 GSCollectionPropertiesの初期化子です。
 
+ + + + + + + + + +

+Typedefs

typedef GSContainer GSCollection
 ロウ集合を汎用的に管理するためのコンテナです。More...
 
typedef GSEnum GSGeometryOperator
 
typedef struct
+GSCollectionPropertiesTag 
GSCollectionProperties
 コレクションの構成オプションを表します。More...
 
+ + + + +

+Enumerations

enum  GSGeometryOperatorTag { GS_GEOMETRY_OPERATOR_INTERSECT + }
 空間範囲同士の関係性についての制約を定義します。More...
 
+ + + + + + + +

+Functions

GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollection *collection, const GSChar *column, const GSChar *geometry, GSGeometryOperator geometryOp, GSQuery **query)
 指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollection *collection, const GSChar *column, const GSChar *geometryIntersection, const GSChar *geometryDisjoint, GSQuery **query)
 除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef GSContainer GSCollection
+
+ +

ロウ集合を汎用的に管理するためのコンテナです。

+
ロウキーには次の型が使用できます。
    +
  • STRING型(GSChar*)
  • +
  • INTEGER型(int32_t)
  • +
  • LONG型(int64_t)
  • +
  • TIMESTAMP型(GSTimestamp)
  • +
+
+
ロウキーの設定は必須ではありません。
+
ロウ操作について、コンテナ固有の制限は設けられていません。
+
gsQueryもしくはgsGetMultipleContainerRowsなどより複数のロウの内容を一度に取得する場合、特に指定がなければ、返却されるロウの順序は不定となります。
+
ロック粒度はロウ単位です。
+ +
+
+ +
+
+ +

コレクションの構成オプションを表します。

+
Note
現バージョンでは使用されておりません。
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSGeometryOperator
+
+
See Also
GSGeometryOperatorTag
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSGeometryOperatorTag
+
+ +

空間範囲同士の関係性についての制約を定義します。

+
空間範囲検索の条件指定のために使用します。
+ + +
Enumerator
GS_GEOMETRY_OPERATOR_INTERSECT  +

双方の空間範囲またはその外接構造が交差する関係にあることを示します。

+
双方の外接直方体(Minimum Bounding Box)、もしくは外接直方体と2次曲面が交差する関係にあることを示します。交差判定の条件は、TQLのST_MBRIntersects関数、もしくはST_QSFMBRIntersects関数と同一です。
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometry (GSCollectioncollection,
const GSCharcolumn,
const GSChargeometry,
GSGeometryOperator geometryOp,
GSQuery ** query 
)
+
+ +

指定した空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。

+
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
+
Parameters
+ + + + + + +
[in]collection処理対象のGSCollection
[in]column比較対象の空間型カラムの名前
[in]geometry比較対象として与える空間構造
[in]geometryOp比較方法
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別がコレクションではない場合
  • +
  • 対応する名前のカラムが存在しない場合
  • +
  • geometryOp以外の引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByGeometryWithDisjointCondition (GSCollectioncollection,
const GSCharcolumn,
const GSChargeometryIntersection,
const GSChargeometryDisjoint,
GSQuery ** query 
)
+
+ +

除外範囲付きの空間範囲条件に合致するロウ集合を求めるための、クエリを作成します。

+
geometryIntersectionと交差し、かつ、geometryDisjointと交差しないカラム値を持つロウ集合を取得します。交差判定の条件は、GS_GEOMETRY_OPERATOR_INTERSECTと同一です。
+
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
+
Parameters
+ + + + + + +
[in]collection処理対象のGSCollection
[in]column比較対象の空間型カラムの名前
[in]geometryIntersectionカラム上の値と交差する範囲を示す空間構造
[in]geometryDisjoint上の値と交差しない範囲を示す空間構造
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別がコレクションではない場合
  • +
  • 対応する名前のカラムが存在しない場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+
+
+
+
GSContainer
+
+
+ + + + + + + + + + + + + + +

+Classes

struct  GSColumnInfoTag
 カラムのスキーマに関する情報を表します。More...
 
struct  GSTriggerInfoTag
 トリガに関する情報を表します。More...
 
struct  GSIndexInfoTag
 索引の設定内容を表します。More...
 
struct  GSContainerInfoTag
 特定のコンテナに関する情報を表します。More...
 
+ + + + + + + + + + + + + +

+Macros

+#define GS_COLUMN_INFO_INITIALIZER   { NULL, GS_TYPE_STRING, GS_INDEX_FLAG_DEFAULT, 0 }
 GSColumnInfoの初期化子です。
 
+#define GS_TRIGGER_INFO_INITIALIZER   { NULL, GS_TRIGGER_REST, NULL, 0, NULL, 0, NULL, NULL, NULL }
 GSTriggerInfoの初期化子です。
 
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
 GSIndexInfoの初期化子です。More...
 
+#define GS_CONTAINER_INFO_INITIALIZER
 GSContainerInfoの初期化子です。
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct GSContainerTag GSContainer
 同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。More...
 
typedef int32_t GSIndexTypeFlags
 
typedef GSEnum GSContainerType
 
typedef int32_t GSTypeOption
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
+typedef struct GSColumnInfoTag GSColumnInfo
 カラムのスキーマに関する情報を表します。
 
typedef GSEnum GSTriggerType
 
typedef int32_t GSTriggerEventTypeFlags
 
typedef struct GSTriggerInfoTag GSTriggerInfo
 トリガに関する情報を表します。More...
 
typedef struct GSIndexInfoTag GSIndexInfo
 索引の設定内容を表します。More...
 
+typedef struct GSContainerInfoTag GSContainerInfo
 特定のコンテナに関する情報を表します。
 
+ + + + + + + + + + + + + + + + +

+Enumerations

enum  GSIndexTypeFlagTag { GS_INDEX_FLAG_DEFAULT = -1, +GS_INDEX_FLAG_TREE = 1 << 0, +GS_INDEX_FLAG_HASH = 1 << 1, +GS_INDEX_FLAG_SPATIAL = 1 << 2 + }
 GSContainerに設定する索引の種別を示します。More...
 
enum  GSContainerTypeTag { GS_CONTAINER_COLLECTION, +GS_CONTAINER_TIME_SERIES + }
 コンテナの種別を表します。More...
 
enum  GSTypeOptionTag {
+  GS_TYPE_OPTION_NULLABLE = 1 << 1, +GS_TYPE_OPTION_NOT_NULL = 1 << 2, +GS_TYPE_OPTION_DEFAULT_VALUE_NULL = 1 << 3, +GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL = 1 << 4, +
+  GS_TYPE_OPTION_TIME_MILLI = 1 << 5, +GS_TYPE_OPTION_TIME_MICRO = 1 << 6, +GS_TYPE_OPTION_TIME_NANO = 1 << 7 +
+ }
 カラムに関するオプション設定を示します。More...
 
enum  GSTriggerTypeTag { GS_TRIGGER_REST, +GS_TRIGGER_JMS + }
 トリガの種別を表します。More...
 
enum  GSTriggerEventTypeFlagTag { GS_TRIGGER_EVENT_PUT = 1 << 0, +GS_TRIGGER_EVENT_DELETE = 1 << 1 + }
 トリガで監視対象とする更新操作種別を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer **container, GSBool allRelated)
 指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainer *container, const GSTriggerInfo *info)
 トリガを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsCreateIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に従い、索引を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainer *container, const GSChar *name)
 トリガを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainer *container, const GSChar *columnName, GSIndexTypeFlags flags)
 指定された名前のカラムのうち、指定された種別の索引のみを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsDropIndexDetail (GSContainer *container, const GSIndexInfo *info)
 GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainer *container)
 これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainer *container, const void *key, const void *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainer *container, const void *const *rowObjs, size_t rowCount, GSBool *exists)
 指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainer *container, const GSChar *queryString, GSQuery **query)
 指定のTQL文を実行するためのクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainer *container, const void *key, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainer *container, GSContainerType *type)
 指定のコンテナの種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainer *container, GSRow **row)
 指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainer *container)
 手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainer *container, const void *key, void *rowObj, GSBool *exists)
 ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainer *container, GSBool enabled)
 コミットモードの設定を変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainer *container, int32_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 INTEGER型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainer *container, int64_t key, void *rowObj, GSBool forUpdate, GSBool *exists)
 LONG型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainer *container, GSTimestamp key, void *rowObj, GSBool forUpdate, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainer *container, const GSChar *key, void *rowObj, GSBool forUpdate, GSBool *exists)
 STRING型のロウキーに対応するロウの内容を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainer *container, int32_t key, const void *rowObj, GSBool *exists)
 INTEGER型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainer *container, int64_t key, const void *rowObj, GSBool *exists)
 LONG型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainer *container, GSTimestamp key, const void *rowObj, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, const void *rowObj, GSBool *exists)
 高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainer *container, const GSChar *key, const void *rowObj, GSBool *exists)
 STRING型のロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainer *container, int32_t key, GSBool *exists)
 INTEGER型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainer *container, int64_t key, GSBool *exists)
 LONG型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainer *container, GSTimestamp key, GSBool *exists)
 通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainer *container, const GSPreciseTimestamp *key, GSBool *exists)
 高精度のTIMESTAMP型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainer *container, const GSChar *key, GSBool *exists)
 STRING型のロウキーに対応するロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool forUpdate, GSBool *exists)
 指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainer *container, GSRowKey *keyObj, GSRow *rowObj, GSBool *exists)
 必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainer *container, GSRowKey *keyObj, GSBool *exists)
 指定のロウキーに対応するロウを削除します。More...
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GS_INDEX_INFO_INITIALIZER   { NULL, GS_INDEX_FLAG_DEFAULT, -1, NULL, 0, NULL, 0, NULL }
+
+ +

GSIndexInfoの初期化子です。

+
Since
3.5
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSContainerTag GSContainer
+
+ +

同一タイプのロウ集合からなるGridDBの構成要素に対しての、管理機能を提供します。

+
ロウオブジェクトを入出力の基本単位として、各種管理機能を提供します。ロウオブジェクトとGridDB上のロウは、指定のロウオブジェクト型とGridDB上のスキーマとの対応関係に基づいて、相互にマッピングされます。
+
GridDB上のスキーマを構成する各カラムは、対応するGS_STRUCT_BINDINGの内容に基づき決定されます。1つのコンテナは1つ以上のカラムにより構成されます。
+
1つのコンテナのカラム間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。その他、コンテナ定義におけるカラム名の文字種や長さ、カラム数には制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、カラム名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
+
カラムの型と、ロウオブジェクト内の各値の型との対応は、それぞれ次の通りです。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム型ロウオブジェクト内の各値の型
STRING GSChar*
BOOL GSBool
BYTE int8_t
SHORT int16_t
INTEGER int32_t
LONG int64_t
FLOAT float
DOUBLE double
TIMESTAMP(通常精度:ミリ秒) GSTimestamp
TIMESTAMP(高精度:マイクロ・ナノ秒) GSPreciseTimestamp
GEOMETRY GSChar*
BLOB GSBlob
STRING配列GSChar**
BOOL配列GSBool*
BYTE配列int8_t*
SHORT配列int16_t*
INTEGER配列int32_t*
LONG配列int64_t*
FLOAT配列float*
DOUBLE配列double*
TIMESTAMP配列GSTimestamp*
+
+
フィールドの値の表現範囲やサイズには制限があります。具体的には、付録の章の値の範囲の説明、ならびに、GridDB機能リファレンスを参照してください。制限に反する値をコンテナに格納することはできません。
+
ロウキーとして許可されている型や、ロウキーに対応するカラムの有無、ロウ更新の可否といった制約は、このコンテナ型から派生した個別の型の定義によって異なります。
+
GridDB上のロウにおけるNULLは、NOT NULL制約が設定されていない限り保持することができます。NULLは、GSRowを通じて格納や取り出しを行うことができます。一方、GS_STRUCT_BINDINGと対応付くロウオブジェクトにおいては、常に後述の空の値にマッピングされます。
+
ロウオブジェクト型におけるNOT NULL制約は、GS_TYPE_OPTION_NULLABLEならびにGS_TYPE_OPTION_NOT_NULLにより明示的に指定できます。NOT NULL制約がいずれの指定対象にも指定されていない場合、ロウキー以外のカラムはNOT NULL制約なしであるとみなされます。ロウキーは暗黙的にNOT NULL制約が設定された状態となっており、この制約を外すような指定はできません。また、同一指定対象での矛盾したNOT NULL制約は指定できません。NOT NULL制約は、GSColumnInfoTag::optionsを通じて指定することができます。
+
空の値は、GSRowの作成など各種操作の初期値などとして用いられることのある、フィールド値の一種です。以下のように、カラム型ごとに値が定義されています。 + + + + + + + + + + + + + + + + +
カラム型空の値
STRING "" (長さ0の文字列)
BOOL 偽(GS_FALSE)
数値型0
TIMESTAMP 1970-01-01T00:00:00Z
GEOMETRY POINT(EMPTY)
BLOB 長さ0のBLOBデータ
配列型要素数0の配列
+
+
日時精度は、GSTypeOptionの日時精度に関するオプションにより明示的に指定できます。
+
トランザクション処理では、デフォルトで自動コミットモードが有効になっています。自動コミットモードでは、変更操作は逐次確定し、明示的に取り消すことができません。手動コミットモードにおいて、GSContainerインスタンスを介した操作によりクラスタノード上でエラーが検出された場合、コミット前の更新操作はすべて取り消されます。トランザクション分離レベルはREAD COMMITTEDのみをサポートします。ロック粒度は、コンテナの種別によって異なります。
+
ロウの更新・追加・削除、ならびに更新用ロック獲得を行った場合、内部でトランザクションが生成されます。このトランザクションには、有効期限が存在します。これらの操作をあるGSContainerインスタンスに対してはじめて行った時刻を起点として、GridDB上で定められている期間だけ経過した後に、さらに同様の操作やトランザクション操作を行おうとすると、該当するGSContainerインスタンスを介した以降の操作は常に失敗するようになります。
+
あるコンテナへの操作要求に対するクラスタノード上での処理が開始され、終了するまでの間、同一のコンテナに対する操作が待機させられる場合があります。ここでの操作には、コンテナのスキーマや索引などの定義変更、コンテナ情報の参照、ロウ操作などが含まれます。一貫性レベルがIMMEDIATEGSGridStoreインスタンスを通じてコンテナを操作する場合、同一のコンテナに対するIMMEDIATE設定での他の操作処理の途中、原則としては待機させられます。また、コンテナに対する他の操作処理の途中の状態に基づいて処理が行われることは、原則としてはありません。例外事項については、個別の操作ごとの説明を参照してください。
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSContainerType
+
+
See Also
GSContainerTypeTag
+ +
+
+ +
+
+ + + + +
typedef struct GSIndexInfoTag GSIndexInfo
+
+ +

索引の設定内容を表します。

+
Since
3.5
+ +
+
+ +
+
+ + + + +
typedef int32_t GSIndexTypeFlags
+
+
See Also
GSIndexTypeFlagTag
+ +
+
+ +
+
+ + + + +
typedef int32_t GSTriggerEventTypeFlags
+
+
+ +
+
+ + + + +
typedef struct GSTriggerInfoTag GSTriggerInfo
+
+ +

トリガに関する情報を表します。

+
Since
1.5
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSTriggerType
+
+
See Also
GSTriggerTypeTag
+ +
+
+ +
+
+ + + + +
typedef int32_t GSTypeOption
+
+ +

カラムに関するオプション設定を示すフラグ値のビット和です。

+
ある設定項目について、対応するフラグ値が複数含まれていた場合に、オプション設定が矛盾しているとみなされるものが存在します。それらの設定項目のうち、対応するフラグ値が一つも含まれていないものは、未設定状態であるとみなされます。この制約に該当する設定項目とフラグ値との対応は次の通りです。 + + + + + + +
設定項目フラグ値
NOT NULL制約 +
初期値でのNULL使用有無 +
+
+
See Also
GSTypeOptionTag
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSContainerTypeTag
+
+ +

コンテナの種別を表します。

+ + + +
Enumerator
GS_CONTAINER_COLLECTION  +

対象のコンテナがコレクションであることを示します。

+
GS_CONTAINER_TIME_SERIES  +

対象のコンテナが時系列であることを示します。

+
+ +
+
+ +
+
+ + + + +
enum GSIndexTypeFlagTag
+
+ +

GSContainerに設定する索引の種別を示します。

+ + + + + +
Enumerator
GS_INDEX_FLAG_DEFAULT  +

デフォルトの索引を示します。

+
この索引種別は、特定の種別を明示せずに索引の操作を行う必要がある場合に用いられるものであり、実在する索引はこの種別以外の種別に分類されます。
+
GS_INDEX_FLAG_TREE  +

ツリー索引を示します。

+
この索引種別は、時系列におけるロウキーと対応するカラムを除く任意の種別のコンテナにおける、次の型のカラムに対して使用できます。
    +
  • STRING
  • +
  • BOOL
  • +
  • BYTE
  • +
  • SHORT
  • +
  • INTEGER
  • +
  • LONG
  • +
  • FLOAT
  • +
  • DOUBLE
  • +
  • TIMESTAMP
  • +
+
+
GS_INDEX_FLAG_HASH  +

ハッシュ索引を示します。

+
この索引は、GSCollectionにおける次の型のカラムに対して設定できます。
    +
  • STRING
  • +
  • BOOL
  • +
  • BYTE
  • +
  • SHORT
  • +
  • INTEGER
  • +
  • LONG
  • +
  • FLOAT
  • +
  • DOUBLE
  • +
  • TIMESTAMP
  • +
+
+
GSTimeSeriesに対して設定することはできません。
+
GS_INDEX_FLAG_SPATIAL  +

空間索引を示します。

+
この索引種別は、GSCollectionにおけるGEOMETRY型のカラムに対してのみ使用できます。GSTimeSeriesに対して設定することはできません。
+
+ +
+
+ +
+
+ + + + +
enum GSTriggerEventTypeFlagTag
+
+ +

トリガで監視対象とする更新操作種別を表します。

+ + + +
Enumerator
GS_TRIGGER_EVENT_PUT  +

コンテナに対するロウ新規作成または更新を示します。

+
GS_TRIGGER_EVENT_DELETE  +

コンテナに対するロウ削除を示します。

+
+ +
+
+ +
+
+ + + + +
enum GSTriggerTypeTag
+
+ +

トリガの種別を表します。

+ + + +
Enumerator
GS_TRIGGER_REST  +

コンテナの更新時にRESTで通知するトリガ種別を示します。

+
GS_TRIGGER_JMS  +

コンテナの更新時にJava Message Service(JMS)で通知するトリガ種別を示します。

+
+ +
+
+ +
+
+ + + + +
enum GSTypeOptionTag
+
+ +

カラムに関するオプション設定を示します。

+
See Also
GSTypeOption
+ + + + + + + + +
Enumerator
GS_TYPE_OPTION_NULLABLE  +

NOT NULL制約を持たないカラムであることを示します。

+
Since
3.5
+
GS_TYPE_OPTION_NOT_NULL  +

NOT NULL制約を持つカラムであることを示します。

+
Since
3.5
+
GS_TYPE_OPTION_DEFAULT_VALUE_NULL  +

初期値としてNULLを使用するカラムであることを示します。

+
Since
4.1
+
GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL  +

初期値としてNULLを使用しないカラムであることを示します。

+
Since
4.1
+
GS_TYPE_OPTION_TIME_MILLI  +

ミリ秒単位で保持する通常精度の日時型カラムであることを示します。

+
日時型カラムの定義において、精度のオプションが指定されなかった場合、この通常精度のオプションが選択されたものとみなされます。
+
Since
5.3
+
GS_TYPE_OPTION_TIME_MICRO  +

マイクロ秒単位で保持する高精度の日時型カラムであることを示します。

+
Since
5.3
+
GS_TYPE_OPTION_TIME_NANO  +

ナノ秒単位で保持する高精度の日時型カラムであることを示します。

+
Since
5.3
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAbort (GSContainercontainer)
+
+ +

手動コミットモードにおいて、現在のトランザクションの操作結果を元に戻し、新たなトランザクションを開始します。

+
Parameters
+ + +
[in]container処理対象のGSContainer
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 自動コミットモードであるにもかかわらず呼び出した場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseContainer (GSContainer ** container,
GSBool allRelated 
)
+
+ +

指定のGSContainerインスタンスについて、必要に応じこのインスタンスならびに関連するリソースを解放します。

+
トランザクションを保持している場合、未コミットの更新内容はすべて元に戻されます。
+
この処理を行うために接続障害が発生したとしても、ローカルリソースの解放処理は適宜実施されます。ただし、GridDB上のトランザクション状態などは状態などは残る可能性があります。
+
Parameters
+ + + +
[in,out]containerクローズ対象のGSContainerインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSContainerインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
[in]allRelated指定のGSContainerと関連する下位のリソースのうち、未クローズのものすべてをクローズするかどうか。関連する下位のリソースとは、指定のGSContainerを介して取得したGSQueryGSAggregationResult、ならびに、これらのリソースと関連する下位のリソースのことを指します。GS_FALSEを指定した場合、指定のGSContainerを介して取得したリソースを個別にクローズする必要があり、すべてクローズした時点で指定のGSContainer自体のリソースが解放されます。
+
+
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCommit (GSContainercontainer)
+
+ +

手動コミットモードにおいて、現在のトランザクションにおける操作結果を確定させ、新たなトランザクションを開始します。

+
Parameters
+ + +
[in]container処理対象のGSContainer
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 自動コミットモードであるにもかかわらず呼び出した場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateIndex (GSContainercontainer,
const GSCharcolumnName,
GSIndexTypeFlags flags 
)
+
+ +

指定された名前のカラムに対し、指定された種別で名前のない索引を作成します。

+
カラム名と種別のみが設定されたGSIndexInfoを指定してgsCreateIndexDetailを呼び出した場合と同様に振る舞います。ただし、flagsにデフォルト種別を含め一つも種別が指定されていない場合、索引は作成されません。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]columnName処理対象のカラムの名前
[in]flags作成する索引種別のフラグ値のビット和。指定できる値はgsCreateIndexDetailの場合と同様です
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のカラム名と種別がgsCreateIndexDetailの規則に合致しない場合
  • +
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • flags以外の引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsCreateIndexDetail (GSContainercontainer,
const GSIndexInfoinfo 
)
+
+ +

GSIndexInfoで設定されている内容に従い、索引を作成します。

+
作成対象の索引のカラムについては、カラム名列またはカラム番号列の少なくとも一方が設定されており、かつ、対応するコンテナにおいて実在するものが設定されている必要があります。カラム名列とカラム番号列が共に設定されている場合、対応するカラム列が順序を含め一致している必要があります。
+
索引種別が一つも設定されていないかGS_INDEX_FLAG_DEFAULTが設定されていた場合、後述の基準に従い、デフォルト種別の索引が選択されます。それ以外の場合、対象のカラムにおいて許されている索引種別である限り、一つ以上の種別を指定できます。複数個の種別が設定されていた場合、作成途中に一部の索引のみが作成された状態のコンテナ情報を参照できることや、エラーが生じるとその状態まま作成操作が終了することがあります。
+
1つのコンテナの索引間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。その他、索引の定義において使用できる索引名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、索引名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
+
既存の同名の索引が存在した場合、後述の条件を満たす同一設定のGSIndexInfoを指定しなければならず、その場合新たな索引は作成されません。一方、既存の異なる名前の索引または名前のない索引と同一設定のGSIndexInfoを指定することはできません。
+
索引名が設定されていない場合は、名前のない索引の作成が要求されたものとみなされます。名前を除いて同一設定の索引がすでに存在していた場合、名前のない索引でなければならず、その場合新たな索引は作成されません。
+
現バージョンでは、少なくともGSContainerを通じて作成された索引において、次の条件を満たす場合に索引名を除いて同一設定の索引であるとみなされます。
    +
  • 索引対象のカラム列が順序を含め一致すること。カラム名列、カラム番号列、単一カラム指定、といった、カラム列の指定方法の違いは無視される
  • +
  • 索引種別が一致すること。デフォルト指定の有無といった索引種別の指定方法の違いは無視される
  • +
+
+
現バージョンにおける、gsGetDefaultFactoryを基に生成されたGSContainerインスタンスでは、コンテナの種別、対応するカラムの型などに基づき、次の索引種別がデフォルトとして選択されます。 + + + + + + + + + + + + + + + + +
カラムの型コレクション時系列
STRING GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
BOOL GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
数値型GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE
TIMESTAMP GS_INDEX_FLAG_TREE GS_INDEX_FLAG_TREE※制限あり
GEOMETRY GS_INDEX_FLAG_SPATIAL (なし)
BLOB (なし) (なし)
配列型(なし) (なし)
+
+
時系列のロウキー(TIMESTAMP型)には索引を設定できません。また、カラム列を構成するカラム型によってデフォルト種別が異なる場合には、選択できません。
+
このGSContainerインスタンスが未コミットのトランザクションを保持していた場合、コミットしてから作成を行います。処理対象のコンテナにおいて実行中の他のトランザクションが存在する場合、それらの終了を待機してから作成を行います。すでに索引が存在しており新たな索引が作成されなかった場合、他のトランザクションによって待機するかどうかは未定義です。またこの場合、このGSContainerインスタンスが保持している未コミットのトランザクションが常にコミットされるかどうかは未定義です。
+
現バージョンでは、コンテナの規模など諸条件を満たした場合、索引の作成開始から終了までの間に、処理対象のコンテナに対してコンテナ情報の参照、一部の索引操作、トリガ操作、ロウ操作(更新含む)を行える場合があります。それ以外の操作は、GSContainerでの説明通り待機させる場合があります。索引の作成途中に別の操作が行われる場合は、作成途中の索引に関する情報はコンテナ情報には含まれません。
+
Parameters
+ + + +
[in]container処理対象のGSContainer
[in]info処理対象の索引の情報
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 作成対象のカラム、索引名が上記の規則に合致しない場合
  • +
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • 指定のカラムにおいてサポートされていない索引種別が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
3.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByContainer (GSContainercontainer,
GSRow ** row 
)
+
+ +

指定のコンテナのカラムレイアウトに基づき、ロウオブジェクトを新規作成します。

+
作成されるGSRowの各フィールドにはgsCreateRowByStoreにより作成した場合と同様に既定の初期値が設定されます。
+
Parameters
+ + + +
[in]container処理対象のGSContainer
[out]rowGSRowインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateTrigger (GSContainercontainer,
const GSTriggerInfoinfo 
)
+
+ +

トリガを設定します。

+
指定のコンテナに対して特定の種別の更新操作が行われた場合に、指定のURIに通知が送信されるようになります。指定されたトリガと同名のトリガが存在した場合、設定内容が上書きされます。
+
トリガ設定内容の詳細は、GSTriggerInfoの定義を参照してください。トリガ名、トリガ種別、通知条件、通知先URI、通知内容の詳細は以下の通りです。
+
トリガ名
トリガ種別や通知条件などの違いによらず、1つのコンテナのトリガ間で、ASCIIの大文字・小文字表記を含め同一の名前のものを複数定義することはできません。その他、トリガの定義において使用できるトリガ名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、トリガ名を指定する操作では、ASCIIの大文字・小文字表記の違いが区別されます。
+
トリガ種別
次のトリガ種別をサポートします。 + + + + + + +
名称説明
REST コンテナに指定された種別の更新操作が行われた際に、指定されたURIにREST(HTTP POSTメソッド)で通知するトリガです。
Java Message Service(JMS) コンテナに指定された種別の更新操作が行われた際に、指定されたURIのJMSサーバへJMSメッセージを通知するトリガです。JMSプロバイダとしてApache ActiveMQを使用します。
+
+
通知条件
指定のコンテナに対するロウ新規作成/更新(gsPutRowgsPutMultipleRowsgsPutMultipleContainerRowsgsUpdateCurrentRow)・削除(gsDeleteRowgsDeleteCurrentRow)操作命令の実行直後に通知を行います。監視対象として複数の操作が指定された場合は、そのうちのいずれかが実行された際に通知を行います。
+
通知を行った時点でのレプリケーションの完了は保証されません。自動コミットモード無効で実行されたロウ新規作成/更新・削除命令に対応する通知については、通知を行った時点でトランザクションが未コミットであったり、通知後にトランザクションがアボートされたりした場合、通知を受けた時点で通知に含まれるデータが取得できないことがあります。
+
複数ロウ一括操作の場合、1件のロウ操作ごとに通知を行います。指定されたURIに通知を行っても一定時間以内に応答がない場合、タイムアウトし再送は行いません。GridDBクラスタに障害が発生した場合、ある更新操作に対応する通知が行われないことのほか、複数回通知されることがあります。
+
通知先URI
通知先URIは次の書式で記述します。
(メソッド名)://(ホスト名):(ポート番号)/(パス)
+
ただし、トリガ種別がRESTの場合、メソッド名にはhttpのみ指定できます。
+
通知内容
更新が行われたコンテナ名、更新操作名、更新されたロウデータの指定したカラムの値を通知します。更新操作名は、ロウ新規作成/更新では"put"、削除では"delete"となります。
+
通知する値は、ロウ新規作成では新規作成直後、更新では更新後、削除では削除前のロウデータについての、指定カラムの値となります。カラムの型がTIMESTAMPの場合、1970-01-01T00:00:00Zからの経過ミリ秒を示す整数が値として設定されます。カラムの型が、BLOB型、GEOMETRY型、配列型の場合、空文字列が値として設定されます。
+
通知方法―RESTの場合
以下のようなJSON文字列を、MIMEタイプapplication/jsonで送信します。
{
+
"container" : "(コンテナ名)",
+
"event" : "(更新操作名)",
+
"row" : {
+
"(カラム名)" : (カラムデータ),
+
"(カラム名)" : (カラムデータ),
+
...
+
}
+
}
+
+
通知方法―JMSの場合
javax.jms.TextMessageを、指定されたデスティネーション種別・デスティネーション名で送信します。
+
コンテナ名は、javax.jms.Message::setStringProperty("@container", "(コンテナ名)")で設定されます。更新操作名は、javax.jms.Message::setStringProperty("@event", "(更新操作名)")で設定されます。
+
カラムの値は、カラムの型に応じたjavax.jms.Message::setXXXProperty("(カラム名)", (カラムデータ))で設定されます。
+
トリガが設定されているコンテナに対してgsPutCollectiongsPutTimeSeriesなどによりカラムレイアウトが変更された際に、トリガの通知対象となっているカラムの削除または名称変更があった場合、該当するカラムはトリガの通知対象から削除されます。
+
GridDBからの通知の際に、設定されている通知先URIへのリクエストに対応するサーバが応答しなかった場合、タイムアウト時刻までの待機処理が発生します。この待機処理は、このコンテナならびに他の一部のコンテナの更新に対する通知が遅れる要因となります。したがって、無効となった通知先URIを持つトリガはgsDropTriggerにより削除することが推奨されます。
+
一つのコンテナに対して設定できるトリガの最大数、ならびに、トリガの各種設定値の上限については、GridDB機能リファレンスを参照してください。
+
Parameters
+ + + +
[in]container設定対象のGSContainer
[in]info設定対象のトリガ情報
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • トリガ名がNULL空、またはその他の規則に合致しない場合
  • +
  • 監視対象更新操作の指定がない場合
  • +
  • 通知先のURIが規定の構文に合致しない場合
  • +
  • トリガ種別でJMSが指定され、かつJMSデスティネーション種別がNULL、または空、または指定の書式に合致しない場合
  • +
  • トリガ種別でJMSが指定され、かつJMSデスティネーション名がNULL、または空の場合
  • +
  • この処理のタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRow (GSContainercontainer,
const void * key,
GSBoolexists 
)
+
+ +

指定のロウキーに対応するロウを削除します。

+
ロウキーに対応するカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトのロウキーの型と指定のロウキーの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして指定された場合
  • +
  • exists以外の引数にNULLが指定された場合。また、keyに対応する文字列キーのポインタ値がNULLの場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByInteger (GSContainercontainer,
int32_t key,
GSBoolexists 
)
+
+ +

INTEGER型のロウキーに対応するロウを削除します。

+
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
+
+
See Also
gsDeleteRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByLong (GSContainercontainer,
int64_t key,
GSBoolexists 
)
+
+ +

LONG型のロウキーに対応するロウを削除します。

+
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
+
+
See Also
gsDeleteRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
GSBoolexists 
)
+
+ +

高精度のTIMESTAMP型のロウキーに対応するロウを削除します。

+
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして指定された場合
  • +
+
+
See Also
gsDeleteRow
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByString (GSContainercontainer,
const GSCharkey,
GSBoolexists 
)
+
+ +

STRING型のロウキーに対応するロウを削除します。

+
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして指定された場合
  • +
+
+
See Also
gsDeleteRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowByTimestamp (GSContainercontainer,
GSTimestamp key,
GSBoolexists 
)
+
+ +

通常精度のTIMESTAMP型のロウキーに対応するロウを削除します。

+
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。対応するロウが存在しない場合は何も変更しません。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして指定された場合
  • +
+
+
See Also
gsDeleteRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSBoolexists 
)
+
+ +

指定のロウキーに対応するロウを削除します。

+
ロウキーを持つコンテナであれば、ロウキーを構成するカラム数やカラム型によらず使用できます。対応するロウが存在しない場合は何も変更しません。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。圧縮オプションが設定された状態の時系列に対しては使用できません。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして指定された場合
  • +
  • exists以外の引数にNULLが指定された場合。また、keyに対応する文字列キーのポインタ値がNULLの場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropIndex (GSContainercontainer,
const GSCharcolumnName,
GSIndexTypeFlags flags 
)
+
+ +

指定された名前のカラムのうち、指定された種別の索引のみを削除します。

+
カラム名と種別のみが設定されたGSIndexInfoを指定してgsDropIndexDetailを呼び出した場合と同様に振る舞います。ただし、flagsにデフォルト種別を含め一つも種別が指定されていない場合、いずれの索引も削除対象にはなりません。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]columnName処理対象のカラムの名前
[in]flags削除する索引種別のフラグ値のビット和。指定できる値はgsDropIndexDetailの場合と同様です
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のカラム名と種別がgsDropIndexDetailの規則に合致しない場合
  • +
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • flags以外の引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsDropIndexDetail (GSContainercontainer,
const GSIndexInfoinfo 
)
+
+ +

GSIndexInfoで設定されている内容に一致する、すべての索引を削除します。

+
GSIndexInfoの設定内容は、削除対象の索引を絞り込む条件として使用されます。絞り込み条件は、カラム列、索引種別、索引名の3つに分類されます。それぞれ設定するかどうかは任意です。いずれも設定されていない場合は、作成済みのすべての索引が削除されます。
+
カラム名列またはカラム番号列が設定されている場合、対応するコンテナにおいて実在するものである必要があります。カラム名列とカラム番号列が共に設定されている場合、対応するカラムが互いに一致している必要があります。カラム名列ならびにカラム番号列が共に設定されていない場合、他の絞り込み条件(索引種別、索引名)を満たす任意のカラム列に対する索引が削除対象となります。
+
索引種別が設定されている場合、指定の種別の索引のみが削除対象となります。GS_INDEX_FLAG_DEFAULTが設定されている場合、gsCreateIndexDetailの基準に従い、デフォルト種別の索引が選択されます。それ以外の場合、対象のカラムにおいて許されている索引種別である限り、任意個数の種別を指定できます。複数個の種別が設定されていた場合、削除途中に一部の索引のみが削除された状態のコンテナ情報を参照できることや、エラーが生じるとその状態まま削除操作が終了することがあります。索引をサポートしていないカラムや指定の種別の索引をサポートしていないカラムについては、削除対象にはなりません。索引種別が設定されていない場合、他の絞り込み条件(カラム列、索引名)を満たす任意の種別の索引が削除対象となります。
+
索引名が設定されている場合、指定の名前の索引のみが削除対象となります。索引名の同一性は、gsCreateIndexDetailの基準に従います。索引名が設定されていない場合、他の絞り込み条件(カラム列、索引種別)を満たす、任意の名前の索引ならびに名前のない索引が削除対象となります。
+
削除対象となる索引が一つも存在しない場合、索引の削除は行われません。
+
トランザクションの扱いは、gsCreateIndexDetailと同様です。また、索引種別としてデフォルト種別または単一の種別が設定されており、かつ、複数の索引が削除対象となった場合に、一部の索引のみが削除された状態で他のトランザクションが実行されることがありうるかどうかは未定義です。
+
索引の削除要求の完了直後の状態に関しては、gsDropContainerと同様です。
+
Parameters
+ + + +
[in]container処理対象のGSContainer
[in]info処理対象の索引の情報
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 削除対象のカラム、索引名が上記の規則に合致しない場合
  • +
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
3.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTrigger (GSContainercontainer,
const GSCharname 
)
+
+ +

トリガを削除します。

+
指定された名前のトリガが存在しない場合は何も削除しません。
+
Parameters
+ + + +
[in]container削除対象のGSContainer
[in]name削除対象のトリガ名
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理のタイムアウト、指定のコンテナの削除、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsFlush (GSContainercontainer)
+
+ +

これまでの更新結果をSSDなどの不揮発性記憶媒体に書き出し、すべてのクラスタノードが突然停止したとしても内容が失われないようにします。

+
通常より信頼性が要求される処理のために使用します。ただし、頻繁に実行すると性能低下を引き起こす可能性が高まります。
+
書き出し対象のクラスタノードの範囲など、挙動の詳細はGridDB上の設定によって変化します。
+
Parameters
+ + +
[in]container処理対象のGSContainer
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理のタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerType (GSContainercontainer,
GSContainerTypetype 
)
+
+ +

指定のコンテナの種別を取得します。

+
現バージョンでは、インスタンス生成時点で常に種別が確定するため、この操作によりGridDBクラスタに問い合わせを行うことはありません。
+
Parameters
+ + + +
[in]container処理対象のGSContainer
[out]type指定のコンテナの種別を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_COLLECTIONが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRow (GSContainercontainer,
const void * key,
void * rowObj,
GSBoolexists 
)
+
+ +

ロウキーに対応するロウの内容を取得します。

+
ロウキーに対応するカラムが存在する場合のみ使用できます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は次のようになります。 + + + + + + + + + + + + +
コンテナ上の型引数の型
STRING GSChar** ※GSChar*との取り違えに注意
INTEGER int32_t*
LONG int64_t*
TIMESTAMP GSTimeStamp*
複合ロウキーGSRowKey*
+
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByInteger (GSContainercontainer,
int32_t key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

INTEGER型のロウキーに対応するロウの内容を取得します。

+
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByLong (GSContainercontainer,
int64_t key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

LONG型のロウキーに対応するロウの内容を取得します。

+
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

高精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。

+
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByString (GSContainercontainer,
const GSCharkey,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

STRING型のロウキーに対応するロウの内容を取得します。

+
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByTimestamp (GSContainercontainer,
GSTimestamp key,
void * rowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

通常精度のTIMESTAMP型のロウキーに対応するロウの内容を取得します。

+
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowForUpdate (GSContainercontainer,
const void * key,
void * rowObj,
GSBoolexists 
)
+
+ +

ロウキーに対応するロウについて、更新用ロックを獲得し内容を取得します。

+
ロウキーに対応するカラムが存在する場合、かつ、手動コミットモードの場合のみ使用できます。
+
トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
取得結果のロウオブジェクトに含まれる文字列や配列などの可変長サイズのデータのリソースは、指定のGSContainerを直接介した次回のロウオブジェクト取得処理を実行するまで維持されます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSContainerと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しない場合
  • +
  • 自動コミットモードの場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSRowrowObj,
GSBool forUpdate,
GSBoolexists 
)
+
+ +

指定のGSRowKeyに対応するロウの内容をGSRowとして取得します。

+
ロウキーを持つコンテナであれば、ロウキーを構成するカラム数やカラム型によらず使用できます。gsGetRowとは異なり、指定のGSRowがクローズされるまで各フィールド値にアクセスすることができます。
+
手動コミットモードにおいて更新用ロックを要求した場合、トランザクションが終了するかタイムアウトするまで対象ロウのロックを維持します。ロックされたロウに対する他のトランザクションからの更新・削除操作は、このトランザクションが終了するかタイムアウトするまで待機するようになります。対象ロウが削除されたとしても、ロックは維持されます。
+
自動コミットモードの場合、更新用ロックを要求できません。
+
Parameters
+ + + + + + +
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[in]forUpdate更新用ロックを要求するかどうか
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーが存在しない場合
  • +
  • 自動コミットモードであるにもかかわらず、更新用ロックを要求しようとした場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーとして設定されていた場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+
See Also
gsGetRow
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleRows (GSContainercontainer,
const void *const * rowObjs,
size_t rowCount,
GSBoolexists 
)
+
+ +

指定のロウオブジェクト集合に基づき、任意個数のロウをまとめて新規作成または更新します。

+
指定のロウオブジェクト集合の各ロウについて、配列要素の順序にしたがってgsPutRowを呼び出した場合と同様に新規作成または更新操作を行います。
+
指定のロウオブジェクト集合内に同一のロウキーを持つ複数のロウが存在する場合、ロウオブジェクト集合を構成する配列要素の順序を基準として、同一のロウキーを持つ最も後方にあるロウオブジェクトの内容が反映されます。
+
コンテナの種別ならびに設定によっては、操作できるロウの内容についてgsPutRowと同様の制限が設けられています。具体的な制限事項は、個別のコンテナ種別の定義を参照してください。
+
手動コミットモードの場合、対象のロウがロックされます。
+
自動コミットモードのときに、コンテナならびにロウに対する処理の途中でエラーが発生した場合、コンテナの一部のロウに対する操作結果のみが反映されたままとなることがあります。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]rowObjs新規作成するロウ集合の内容と対応するロウオブジェクト列。このロウオブジェクト列は、個々のロウオブジェクトへのポインタ値の配列により構成されます。rowCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]rowCount新規作成するロウの個数。0の場合、ロウを新規作成せず正常に処理を終えます。
[out]exists現バージョンでは、ポインタ値がNULLではない限り常にGS_FALSEが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • +
  • containerNULLの場合
  • +
  • exists以外のポインタ型引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
  • rowCountが正の値であるにもかかわらず、rowObjsNULLが指定された場合
  • +
  • ロウオブジェクト列を構成する配列要素にNULLが含まれていた場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRow (GSContainercontainer,
const void * key,
const void * rowObj,
GSBoolexists 
)
+
+ +

必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応するカラムが存在する場合、ロウキーとコンテナの状態を基に、ロウを新規作成するか、更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクトとは別にロウキーを指定した場合、ロウオブジェクト内のロウキーより優先して使用されます。
+
ロウキーに対応するカラムを持たない場合、常に新規のロウを作成します。別途指定するロウキーには、常にNULLを指定します。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    +
  • 新規作成
      +
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • +
    +
  • +
  • 既存ロウの内容の保持
      +
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • +
    +
  • +
+
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。同様に、ロウキーの型が一致しない場合の動作も未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキーが格納された変数へのポインタ値。GSContainerにおいて定義されているコンテナ上のロウキーの型とこの引数の型との関係は、gsGetRowの場合と同様です。ロウキーに対応するカラムが存在しない場合、もしくは指定のロウオブジェクト内のキーを用いる場合はNULLを指定します。
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しないにもかかわらず、キーが指定された場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByInteger (GSContainercontainer,
int32_t key,
const void * rowObj,
GSBoolexists 
)
+
+ +

INTEGER型のロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応するINTEGER型のカラムが存在する場合のみ使用できます。
+
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するINTEGER型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByLong (GSContainercontainer,
int64_t key,
const void * rowObj,
GSBoolexists 
)
+
+ +

LONG型のロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応するLONG型のカラムが存在する場合のみ使用できます。
+
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するLONG型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByPreciseTimestamp (GSContainercontainer,
const GSPreciseTimestampkey,
const void * rowObj,
GSBoolexists 
)
+
+ +

高精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応する高精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
+
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    +
  • 新規作成
      +
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • +
    +
  • +
  • 既存ロウの内容の保持
      +
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • +
    +
  • +
+
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する高精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByString (GSContainercontainer,
const GSCharkey,
const void * rowObj,
GSBoolexists 
)
+
+ +

STRING型のロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応するSTRING型のカラムが存在する場合のみ使用できます。
+
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するSTRING型のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowByTimestamp (GSContainercontainer,
GSTimestamp key,
const void * rowObj,
GSBoolexists 
)
+
+ +

通常精度のTIMESTAMP型のロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在する場合のみ使用できます。
+
ロウキーとコンテナの状態を基に、ロウを新規作成するか更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクト内のロウキーは無視されます。
+
ただし、コンテナの種別ならびに設定によっては、制限が設けられています。指定のコンテナが時系列であり、圧縮オプションが設定されている場合、以下の操作のみを条件付きで行うことができます。
    +
  • 新規作成
      +
    • 最も新しい時刻を持つ既存ロウより新しい時刻のロウを指定した場合のみ
    • +
    +
  • +
  • 既存ロウの内容の保持
      +
    • 最も新しい時刻を持つ既存ロウの時刻が指定の時刻と一致する場合のみ
    • +
    +
  • +
+
+
手動コミットモードの場合、対象のロウはロックされます。
+
Attention
指定のGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]key処理対象のロウキー
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応する通常精度のTIMESTAMP型のカラムが存在しない場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutRowGeneral (GSContainercontainer,
GSRowKeykeyObj,
GSRowrowObj,
GSBoolexists 
)
+
+ +

必要に応じ別途ロウキーを指定して、ロウを新規作成または更新します。

+
ロウキーを構成するカラム数やカラム型によらず使用できます。
+
ロウキーに対応するカラムが存在する場合、ロウキーとコンテナの状態を基に、ロウを新規作成するか、更新するかを決定します。この際、対応するロウがコンテナ内に存在しない場合は新規作成、存在する場合は更新します。ロウオブジェクトとは別にロウキーを指定した場合、ロウオブジェクト内のロウキーより優先して使用されます。
+
ロウキーに対応するカラムを持たない場合、常に新規のロウを作成します。この場合、別途指定するロウキーには、常にNULLを指定します。
+
ただし、コンテナの種別ならびに設定によっては、gsPutRowと同様の制限が設けられています。
+
手動コミットモードの場合、対象のロウはロックされます。
+
Parameters
+ + + + + +
[in]container処理対象のGSContainer
[in]keyObj処理対象のロウキー。ロウキーに対応するカラムが存在しない場合、もしくは指定のロウオブジェクト内のキーを用いる場合はNULLを指定します。
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]exists処理対象のロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーに対応するカラムが存在しないにもかかわらず、キーが指定された場合
  • +
  • 特定コンテナ固有の制限に反する操作を行った場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がキーまたはロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合。もしくは、ロウキーに対応するカラムが存在しkeyNULLであるにもかかわらず、ロウキーのフィールドに同様にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQuery (GSContainercontainer,
const GSCharqueryString,
GSQuery ** query 
)
+
+ +

指定のTQL文を実行するためのクエリを作成します。

+
gsFetchを通じてロウ集合を求める際に更新用ロックのオプションを有効できるのは、指定のコンテナ上に実在しないロウが選択されることのないクエリのみです。たとえば、補間演算を含むクエリに対しては有効にできません。
+
Parameters
+ + + + +
[in]container処理対象のGSContainer
[in]queryStringTQL文
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetAutoCommit (GSContainercontainer,
GSBool enabled 
)
+
+ +

コミットモードの設定を変更します。

+
自動コミットモードでは、直接トランザクション状態を制御できず、変更操作が逐次コミットされます。自動コミットモードが有効でない場合、すなわち手動コミットモードの場合は、直接gsCommitを呼び出すかトランザクションがタイムアウトしない限り、指定のコンテナ内で同一のトランザクションが使用され続け、変更操作はコミットされません。
+
自動コミットモードが無効から有効に切り替わる際、未コミットの変更内容は暗黙的にコミットされます。コミットモードに変更がない場合、トランザクション状態は変更されません。
+
Parameters
+ + + +
[in]container処理対象のGSContainer
[in]enabled自動コミットモードを有効にするかどうか。GS_TRUEの場合は自動コミットモード、GS_FALSEの場合は手動コミットモードが有効になります。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • モード変更に伴いコミット処理を要求した際に、この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+
+
+
+
GSGridStore
+
+
+ + + + + + + + +

+Classes

struct  GSContainerRowEntryTag
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
struct  GSRowKeyPredicateEntryTag
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
+ + + + + + + +

+Macros

#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
 GSContainerRowEntryの初期化子です。More...
 
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
 GSRowKeyPredicateEntryの初期化子です。More...
 
+ + + + + + + + + + +

+Typedefs

typedef struct GSGridStoreTag GSGridStore
 1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。More...
 
typedef struct
+GSContainerRowEntryTag 
GSContainerRowEntry
 複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。More...
 
typedef struct
+GSRowKeyPredicateEntryTag 
GSRowKeyPredicateEntry
 複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore **store, GSBool allRelated)
 指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStore *store, const GSChar *name)
 指定の名前を持つコレクションを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStore *store, const GSChar *name)
 指定の名前を持つ時系列を削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSCollection **collection)
 指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetContainerInfo (GSGridStore *store, const GSChar *name, GSContainerInfo *info, GSBool *exists)
 指定の名前のコンテナに関する情報を取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, GSTimeSeries **timeSeries)
 指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutContainer (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutCollection (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSCollectionProperties *properties, GSBool modifiable, GSCollection **collection)
 コレクションを新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutTimeSeries (GSGridStore *store, const GSChar *name, const GSBinding *binding, const GSTimeSeriesProperties *properties, GSBool modifiable, GSTimeSeries **timeSeries)
 時系列を新規作成または変更します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutContainerGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSContainer **container)
 GSContainerInfoを指定して、コンテナを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStore *store, const GSChar *name, GSContainer **container)
 GSRowによりロウ操作できるGSContainerインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutCollectionGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSCollection **collection)
 GSContainerInfoを指定して、コレクションを新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStore *store, const GSChar *name, GSCollection **collection)
 GSRowによりロウ操作できるGSCollectionインスタンスを取得します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsPutTimeSeriesGeneral (GSGridStore *store, const GSChar *name, const GSContainerInfo *info, GSBool modifiable, GSTimeSeries **timeSeries)
 GSContainerInfoを指定して、時系列を新規作成または変更します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStore *store, const GSChar *name, GSTimeSeries **timeSeries)
 GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStore *store, const GSChar *name)
 指定の名前を持つコンテナを削除します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsCreateRowByStore (GSGridStore *store, const GSContainerInfo *info, GSRow **row)
 GSContainerInfoを指定して、GSRowを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStore *store, const GSContainerInfo *info, GSRowKey **key)
 GSContainerInfoを指定して、GSRowKeyを新規作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStore *store, GSQuery *const *queryList, size_t queryCount)
 指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStore *store, const GSContainerRowEntry *entryList, size_t entryCount)
 任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStore *store, const GSRowKeyPredicateEntry *const *predicateList, size_t predicateCount, const GSContainerRowEntry **entryList, size_t *entryCount)
 指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStore *store, GSPartitionController **partitionController)
 対応するGridDBクラスタについてのGSPartitionControllerを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStore *store, GSType keyType, GSRowKeyPredicate **predicate)
 指定のGSTypeをロウキーの型とする合致条件を作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStore *store, const GSContainerInfo *info, GSRowKeyPredicate **predicate)
 指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。More...
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GS_CONTAINER_ROW_ENTRY_INITIALIZER   { NULL, NULL, 0 }
+
+ +

GSContainerRowEntryの初期化子です。

+
Since
1.5
+ +
+
+ +
+
+ + + + +
#define GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER   { NULL, NULL }
+
+ +

GSRowKeyPredicateEntryの初期化子です。

+
Since
1.5
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSContainerRowEntryTag GSContainerRowEntry
+
+ +

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。

+
Since
1.5
+ +
+
+ +
+
+ + + + +
typedef struct GSGridStoreTag GSGridStore
+
+ +

1つのGridDBシステムが管理するデータ全体を操作するための機能を提供します。

+
コレクションや時系列といったコンテナの追加・削除・構成変更、ならびに、コンテナを構成するロウの操作機能を提供します。
+
コンテナ種別などの違いによらず、1つのデータベースのコンテナ間で、ASCIIの大文字・小文字表記だけが異なる名前のものを複数定義することはできません。コンテナ名は、ベースコンテナ名単独、もしくは、ベースコンテナ名の後ろにノードアフィニティ名をアットマーク「@」で連結した形式で表記します。その他、コンテナの定義において使用できるコンテナ名の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。特に記載のない限り、コンテナ名を指定する操作では、ASCIIの大文字・小文字表記の違いは区別されません。
+
このインタフェースまたはこのインタフェースを通じて得られたインスタンスのインタフェースに対する操作を通じてエラーが発生した場合、エラーに関する次のパラメータを取得できることがあります。 + + + + + + +
パラメータ名説明
address接続先クラスタノードのアドレス・ポート。ホスト名またはIPアドレスとポート番号とをコロン「:」で連結した文字列により構成されます。このインタフェースまたはこのインタフェースを通じて得られたインスタンスのインタフェースにおいて、クラスタへのアクセスを伴う操作を呼び出した際にエラーを検知すると、このパラメータを含むことがあります。このパラメータを含む場合、パラメータが示すクラスタノードにおいてエラーの詳細が記録されていることがあります。
containerエラーに関係しうるコンテナの名前。任意個数のコンテナを一括して扱う操作において、そのうち少なくとも一つのコンテナについての操作を行えないことが判明した場合に、このパラメータを含むことがあります。任意個数のコンテナを扱う具体的な操作については、個々のインタフェースの定義を参照してください。クラスタノードへのリクエスト準備段階でのリソース不足など、どのコンテナの問題か特定し切れないことがあるため、どのようなエラーでもこのパラメータを含むとは限りません。また、複数のコンテナについて操作できない可能性があったとしても、パラメータに含まれるのは高々一つのコンテナの名前のみです。
+
+
この型のポインタを第一引数とする関数のスレッド安全性は保証されません。
+
See Also
GSCollection
+
+GSTimeSeries
+
+GSContainer
+
+gsGetErrorParameterCount
+ +
+
+ +
+
+ +

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。

+
Since
1.5
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseGridStore (GSGridStore ** store,
GSBool allRelated 
)
+
+ +

指定のGSGridStoreインスタンスについて、対応するGridDBクラスタとの接続状態を解除し、必要に応じて指定のインスタンスならびに関連するリソースを解放します。

+
Parameters
+ + + +
[in,out]storeクローズ対象のGSGridStoreインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSGridStoreインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
[in]allRelated指定のGSGridStoreと関連する下位のリソースのうち、未クローズのものすべてをクローズするかどうか。関連する下位のリソースとは、指定のGSGridStoreを介して取得したGSCollectionGSTimeSeries、ならびに、これらのリソースと関連する下位のリソースのことを指します。GS_FALSEを指定した場合、指定のGSGridStoreを介して取得したリソースを個別にクローズする必要があり、すべてクローズした時点で指定のGSGridStore自体のリソースが解放されます。
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsCreateRowByStore (GSGridStorestore,
const GSContainerInfoinfo,
GSRow ** row 
)
+
+ +

GSContainerInfoを指定して、GSRowを新規作成します。

+
GSContainerにて規定された制約に合致するよう、GSColumnInfoのリストならびにロウキーの構成を含むカラムレイアウトをGSContainerInfoに指定します。
+
また、コンテナ種別をGSContainerInfoに含めることで、特定のコンテナ種別固有の制約に合致するかどうかを検証できます。ただし、作成されたGSRowに対してgsGetRowSchemaを呼び出したとしても、常に固定の値であるGS_CONTAINER_COLLECTIONがコンテナ種別として設定されたGSContainerInfoが求まります。
+
作成されたGSRowの各フィールドには、GSContainerInfoに含まれる各カラムのGSColumnInfoに基づいた初期値が設定されます。初期値として、GSColumnInfo::optionsに含まれるオプションに応じた次の値が使用されます。 + + + + + + + + + + +
オプション初期値
GS_TYPE_OPTION_DEFAULT_VALUE_NULL NULL。ただし制約に反するロウは作成できない。
GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULL 空の値。GSContainerの定義を参照。
(上記いずれも指定なし) 現バージョンでは、GS_TYPE_OPTION_DEFAULT_VALUE_NOT_NULLが指定された場合と同様。
(上記オプションを両方指定) GSTypeOptionの定義に基づき矛盾する設定と見なされ、ロウを作成できない。
+
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]infoカラムレイアウトを含むコンテナ情報。その他の内容は無視される
[out]rowGSRowインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • コンテナ種別もしくはカラムレイアウトの制約に合致しない場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
GSContainer
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByStore (GSGridStorestore,
const GSContainerInfoinfo,
GSRowKey ** key 
)
+
+ +

GSContainerInfoを指定して、GSRowKeyを新規作成します。

+
ロウキー以外のカラムに関する情報は無視されます。それ以外はgsCreateRowByStoreと同様に振る舞います。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]infoカラムレイアウトを含むコンテナ情報。その他の内容は無視される
[out]keyGSRowKeyインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ロウキーを持たないコンテナ情報が指定された場合
  • +
  • コンテナ種別もしくはカラムレイアウトの制約に合致しない場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicate (GSGridStorestore,
GSType keyType,
GSRowKeyPredicate ** predicate 
)
+
+ +

指定のGSTypeをロウキーの型とする合致条件を作成します。

+
合致条件の評価対象とするコンテナは、単一カラムからなるロウキーを持ち、かつ、そのロウキーの型は指定のGSTypeと同一の型でなければなりません。
+
設定可能なロウキーの型は、GSContainerから派生した個別のコンテナ型にて許容されている型のみです。
+
複合ロウキーなどロウキーを構成するカラムの個数によらずに合致条件を作成するには、gsCreateRowKeyPredicateGeneralを使用します。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]keyType合致条件の評価対象とするロウキーの型
[out]predicateGSRowKeyPredicateインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定された型がロウキーとして常にサポート外となる場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+
See Also
GSContainer
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyPredicateGeneral (GSGridStorestore,
const GSContainerInfoinfo,
GSRowKeyPredicate ** predicate 
)
+
+ +

指定のGSContainerInfoのロウキーに関するカラム定義に基づく、合致条件を作成します。

+
合致条件の評価対象とするコンテナは、ロウキーを持ち、かつ、指定のGSContainerInfoのロウキーに関するカラム定義と対応づく必要があります。ロウキー以外のカラム定義については対応関係の判定に用いられません。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]info合致条件の判定対象とするロウキーのカラムレイアウトを含む、コンテナ情報。その他の内容は無視される
[out]predicateGSRowKeyPredicateインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定の情報がロウキーを含まないか、ロウキーとして常にサポート外となる場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropCollection (GSGridStorestore,
const GSCharname 
)
+
+ +

指定の名前を持つコレクションを削除します。

+
削除済みの場合の扱い、トランザクションの扱い、削除要求完了直後の状態に関しては、gsDropContainerと同様です。
+
Parameters
+ + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 種別の異なるコンテナを削除しようとした場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropContainer (GSGridStorestore,
const GSCharname 
)
+
+ +

指定の名前を持つコンテナを削除します。

+
削除済みの場合は何も変更しません。
+
処理対象のコンテナにおいて実行中のトランザクションが存在する場合、それらの終了を待ってから削除を行います。
+
コンテナの削除要求が完了した直後は、削除したコンテナの索引やロウなどのために使用されていたメモリやストレージ領域を他の用途にただちに再利用できない場合があります。また、削除処理に関連した処理がクラスタ上で動作することにより、削除前と比べて負荷が高まる期間が一定程度継続する場合があります。
+
Parameters
+ + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
gsDropCollection
+
+gsTimeSeries
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDropTimeSeries (GSGridStorestore,
const GSCharname 
)
+
+ +

指定の名前を持つ時系列を削除します。

+
削除済みの場合は何も変更しません。
+
削除済みの場合の扱い、トランザクションの扱い、削除要求完了直後の状態に関しては、gsDropContainerと同様です。
+
Parameters
+ + + +
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 種別の異なるコンテナを削除しようとした場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetchAll (GSGridStorestore,
GSQuery *const * queryList,
size_t queryCount 
)
+
+ +

指定された任意個数のGSQueryについて、可能な限りリクエスト単位を大きくしてクエリ実行とフェッチを行います。

+
指定のクエリ列に含まれる各GSQueryについて、個別にgsFetchを行った場合と同様にクエリ実行とフェッチを行い、結果のGSRowSetを設定します。GSQueryの実行結果を取り出すには、gsGetRowSetを使用します。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、リストの要素数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。リスト内のGSQueryの実行順序は不定です。
+
指定のクエリ列には、指定のGSGridStoreインスタンスを介して得られた、対応するGSContainerがクローズされていないGSQueryのみを含めることができます。gsFetchと同様、各GSQueryが持つ最後に生成されたGSRowSetを介するロウ操作ができなくなります。同一のインスタンスが配列に複数含まれていた場合、それぞれ異なるインスタンスであった場合と同様に振る舞います。
+
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
+
指定のGSQueryに対応する各GSContainerのコミットモードが自動コミットモード、手動コミットモードのいずれであったとしても、使用できます。トランザクション状態はクエリの実行結果に反映されます。正常に操作が完了した場合、トランザクションタイムアウト時間に到達しない限り、対応する各GSContainerのトランザクションをアボートすることはありません。
+
GSQueryに対する処理の途中でエラーが発生した場合、一部のGSQueryについてのみ新たなGSRowSetが設定されることがあります。また、指定のGSQueryに対応する各GSContainerの未コミットのトランザクションについては、アボートされることがあります。
+
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
+
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]queryList対象とするクエリ列。GSQueryへのポインタ値の配列により構成されます。queryCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]queryCount対象とするクエリ列の要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のGSGridStoreインスタンスを介して得られたGSQuery以外のGSQueryが含まれていた場合
  • +
  • 正しくないパラメータ・構文・命令を含むクエリを実行しようとした場合。たとえば、TQLでは、関数の引数に対応しない型のカラムを指定した場合。具体的な制約は、指定のクエリを作成する機能の各種定義を参照してください
  • +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合
  • +
  • queryCountが正の値であるにもかかわらず、queryListNULLが指定された場合
  • +
  • クエリ列を構成する配列要素にNULLが含まれていた場合
  • +
+
+
See Also
gsFetch
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetCollection (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
GSCollection ** collection 
)
+
+ +

指定の名前のコレクションを操作するためのGSCollectionインスタンスを取得します。

+
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
+
Parameters
+ + + + + +
[in]store処理対象のコレクションが格納されているGSGridStore
[in]name処理対象のコレクションの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコレクションが存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名の時系列が存在する場合
  • +
  • 指定の型と既存のカラムレイアウトが一致しない場合
  • +
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetCollectionGeneral (GSGridStorestore,
const GSCharname,
GSCollection ** collection 
)
+
+ +

GSRowによりロウ操作できるGSCollectionインスタンスを取得します。

+
期待するコンテナ種別がGS_CONTAINER_COLLECTIONに限定され、常にGSContainerインスタンスが格納される点を除き、gsGetContainerGeneralと同様に振る舞います。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコレクションが存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名の時系列が存在する場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
gsGetContainerGeneral
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetContainerGeneral (GSGridStorestore,
const GSCharname,
GSContainer ** container 
)
+
+ +

GSRowによりロウ操作できるGSContainerインスタンスを取得します。

+
次の点を除き、gsGetCollectionもしくはgsGetTimeSeriesと同様に振る舞います。
    +
  • 既存のコンテナの種別ならびにカラムレイアウトに基づきGSContainerインスタンスを返却する
  • +
  • コンテナの種別ならびにカラムレイアウトを指定しないため、これらの不一致に伴うエラーが発生しない
  • +
  • 返却されるGSContainerのロウオブジェクトの型が常にGSRowとなるそれぞれの同名の引数nameの用法についても同様です。
  • +
+
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前のコンテナが存在しない場合、NULLが設定されます。指定の名前のコンテナが存在し、種別がGS_CONTAINER_COLLECTIONであった場合はGSCollectionGS_CONTAINER_TIME_SERIESであった場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
gsGetCollection
+
+gsGetTimeSeries
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetContainerInfo (GSGridStorestore,
const GSCharname,
GSContainerInfoinfo,
GSBoolexists 
)
+
+ +

指定の名前のコンテナに関する情報を取得します。

+
返却されるGSContainerInfoに含まれるコンテナ名は、GridDB上に格納されているものが設定されます。したがって、指定したコンテナ名と比較すると、ASCIIの大文字・小文字表記が異なる場合があります。
+
カラム順序を無視するかどうかについては、無視しない状態に設定されます。この設定は、GSContainerInfo::columnOrderIgnorableを通じて確認できます。
+
現バージョンでは、初期値でのNULL使用有無は未設定状態で求まります。この設定は、GSColumnInfo::optionsを通じて確認できます。
+
Attention
カラム情報の列などの可変長データを格納するために、指定のGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用します。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]store処理対象のコンテナが格納されているGSGridStore
[in]name処理対象のコンテナの名前
[out]info指定の名前のコンテナに関する情報を格納するためのGSContainerInfoへのポインタ値。指定の名前のコンテナが存在しない場合、もしくは、実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
[out]exists処理対象のコンテナが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • exists以外の引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetMultipleContainerRows (GSGridStorestore,
const GSRowKeyPredicateEntry *const * predicateList,
size_t predicateCount,
const GSContainerRowEntry ** entryList,
size_t * entryCount 
)
+
+ +

指定の条件に基づき、任意のコンテナの任意個数・範囲のロウについて、可能な限りリクエスト単位を大きくして取得します。

+
指定のエントリ列に含まれる条件に従い、個別にgsGetRowもしくはgsFetchを呼び出した場合と同様に、ロウの内容を取得します。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、対象コンテナの総数や条件に合致するロウの総数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。
+
指定の条件エントリ列は、コンテナ名と、GSRowKeyPredicateで表現される取得条件との組からなる任意個数の条件エントリから構成されます。同一のGSRowKeyPredicateインスタンスを複数含めることもできます。また、対象とするコンテナとして、コンテナ種別やカラムレイアウトが異なるものを混在させることができます。ただし、コンテナの構成によっては評価できない取得条件が存在します。具体的な制限については、GSRowKeyPredicateに対する各種設定機能の定義を参照してください。コンテナ名または取得条件としてNULLを設定することはできません。
+
取得するエントリ列は、コンテナ名とロウオブジェクト列との組からなるエントリにより構成されます。また、取得するエントリ列には、取得条件として指定したエントリ列のうち、リクエスト時点で実在するコンテナに関するエントリのみが含まれます。同一のコンテナを指す複数のエントリが指定の条件エントリ列に含まれていた場合、取得するエントリ列にはこれらを1つにまとめたエントリが格納されます。同一のリストに複数のロウオブジェクトが含まれる場合、格納される順序はコンテナ種別と対応するGSContainerから派生した個別のコンテナ型の定義に従います。指定のコンテナに対応するロウが1つも存在しない場合、対応するロウオブジェクト列の要素数は0となります。
+
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
+
gsGetRowForUpdateもしくはgsFetchのように、トランザクションを維持し、更新用ロックを要求することはできません。
+
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
+
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
+
Attention
取得するエントリ列ならびにその中に含まれるコンテナ名やロウオブジェクト列の可変長のデータを格納するために、指定のGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]store処理対象のGSGridStore
[in]predicateList対象とするコンテナの名前と取得条件との組からなる条件エントリの列。GSContainerRowEntryの配列により構成されます。predicateCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]predicateCount条件エントリ列の要素数
[out]entryList取得結果エントリ列のアドレスを格納するためのポインタ変数へのポインタ値。取得結果エントリ列はGSContainerRowEntryの配列により構成されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
[out]entryCount取得結果エントリ列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナに関して評価できない取得条件が指定された場合
  • +
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • +
  • この処理または関連するトランザクションのタイムアウト、接続障害が発生した場合
  • +
  • predicateList以外のポインタ型引数にNULLが指定された場合
  • +
  • predicateCountが正の値であるにもかかわらず、predicateListNULLが指定された場合
  • +
  • エントリ列を構成するエントリのコンテナ名もしくは取得条件としてNULLが含まれていた場合
  • +
+
+
See Also
gsGetRow
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionController (GSGridStorestore,
GSPartitionController ** partitionController 
)
+
+ +

対応するGridDBクラスタについてのGSPartitionControllerを取得します。

+
指定のGSGridStoreをクローズした時点で使用できなくなります。
+
Parameters
+ + + +
[in]store処理対象のGSGridStore
[out]partitionControllerGSPartitionControllerインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
GSPartitionController
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetTimeSeries (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
GSTimeSeries ** timeSeries 
)
+
+ +

指定の名前の時系列を操作するためのGSTimeSeriesインスタンスを取得します。

+
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
+
Parameters
+ + + + + +
[in]store処理対象の時系列が格納されているGSGridStore
[in]name処理対象の時系列の名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前の時系列が存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名のコレクションが存在する場合
  • +
  • 指定の型と既存のカラムレイアウトが一致しない場合
  • +
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetTimeSeriesGeneral (GSGridStorestore,
const GSCharname,
GSTimeSeries ** timeSeries 
)
+
+ +

GSRowによりロウ操作できるGSTimeSeriesインスタンスを取得します。

+
期待するコンテナ種別がGS_CONTAINER_TIME_SERIESに限定され、常にGSTimeSeriesインスタンスが格納される点を除き、gsGetContainerGeneralと同様に振る舞います。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[out]timeSeriesGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。指定の名前の時系列が存在しない場合、NULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名のコレクションが存在する場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
See Also
gsGetContainerGeneral
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutCollection (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSCollectionPropertiesproperties,
GSBool modifiable,
GSCollection ** collection 
)
+
+ +

コレクションを新規作成または変更します。

+
同名のコンテナが存在しない場合、指定のバインディング情報により定義されたカラムレイアウトに従い、新規にコレクションを作成します。すでに同名のコレクションが存在し、既存のカラムレイアウトの内容がすべて一致する場合、実行中のトランザクションを待機する点を除きgsGetCollectionと同様に振る舞います。
+
modifiableGS_TRUEであり、すでに同名のコレクションが存在する場合、必要に応じカラムレイアウトを変更します。変更する際、要求したカラムと同一の名前・型の既存のカラムは保持されます。一致しないカラムのうち、既存のコレクションにない名前のカラムは追加し、要求側にないカラムはデータも含め削除します。型が異なる同名のカラムが存在する場合は失敗します。また、ロウキーに対応するカラムの追加と削除はできません。
+
コンテナにトリガが設定されており、カラムレイアウト変更によってトリガが通知対象としているカラムが削除された場合、そのカラムはトリガの通知対象から削除されます。
+
新たに追加されるカラムの値は、GSContainerにて定義されている空の値を初期値として初期化されます。
+
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
+
すでに同名のコレクションが存在し、かつ、該当するコレクションにおいて実行中のトランザクションが存在する場合、それらの終了を待機してから処理を行います。
+
ロウキーを持つコレクションを新規に作成する場合、ロウキーに対し、gsCreateIndexにて定義されているデフォルト種別の索引が作成されます。この索引は、削除することができます。
+
現バージョンでは、コンテナの規模など諸条件を満たした場合、カラムレイアウトの変更開始から終了までの間に、処理対象のコンテナに対してコンテナ情報の参照、更新ロックなしでのロウの参照操作を行える場合があります。それ以外の操作は、GSContainerでの定義通り待機させる場合があります。カラムレイアウトの変更途中に別の操作が行われる場合は、変更前のカラムレイアウトが使用されます。
+
Parameters
+ + + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]propertiesコレクションの構成オプション。NULLを指定できます。現バージョンでは使用されておらず、内容はチェックされません。
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名の時系列が存在する場合。
  • +
  • modifiableGS_FALSEであり、既存の同名のコレクションに関してカラムレイアウトの内容が一致しない場合
  • +
  • modifiableGS_TRUEであり、既存の同名のコレクションに関して変更できない項目を変更しようとした場合
  • +
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • properties以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutCollectionGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSCollection ** collection 
)
+
+ +

GSContainerInfoを指定して、コレクションを新規作成または変更します。

+
コンテナ種別がGS_CONTAINER_COLLECTIONに限定され、GSContainerインスタンスが格納される点を除き、gsPutContainerGeneralと同様に振る舞います。
+
Parameters
+ + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコレクションの名前
[in]info処理対象のコレクションの情報。コンテナ種別には常にGS_CONTAINER_COLLECTIONを指定
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]collectionGSCollectionインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • コンテナ種別以外の指定内容に関して、gsPutContainerGeneralの規則に合致しない場合。また、コンテナ種別に関する制限に合致しない場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • name以外のポインタ型引数にNULLが指定された場合
  • +
+
+
See Also
gsPutContainerGeneral
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutContainer (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSContainerInfoinfo,
GSBool modifiable,
GSContainer ** container 
)
+
+ +

バインディング情報とGSContainerInfoを指定して、コンテナを新規作成または変更します。

+
主に、バインディング情報を指定して、追加設定を持つコンテナを新規作成する場合に使用します。
+
カラムレイアウトならびにカラム順序の無視設定をGSContainerInfoに指定できない点を除けば、gsPutContainerGeneralと同様です。
+
Parameters
+ + + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]info処理対象のコンテナの情報。NULLの場合は無視される
[in]modifiable既存コレクションのカラムレイアウト変更を許可するかどうか
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。GS_CONTAINER_COLLECTIONを指定した場合はGSCollectionGS_CONTAINER_TIME_SERIESを指定した場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • nameならびにinfo引数の内容が規則に合致しない場合。また、指定のコンテナ種別に対応するコンテナ新規作成・変更関数の規則に合致しない場合
  • +
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • name以外のポインタ型引数にNULLが指定された場合
  • +
+
+
See Also
gsPutCollection
+
+gsPutTimeSeries
+
+gsPutContainerGeneral
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutContainerGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSContainer ** container 
)
+
+ +

GSContainerInfoを指定して、コンテナを新規作成または変更します。

+
次の点を除き、gsPutCollectionもしくはgsPutTimeSeriesと同様に振る舞います。
    +
  • GSContainerInfoを用いてコンテナ種別、カラムレイアウト、ならびに、必要に応じ時系列構成オプションを指定する
  • +
  • 返却されるGSContainerのロウオブジェクトの型が常にGSRowとなるそれぞれの同名の引数modifiableの用法についても同様です。
  • +
+
+
コンテナに関する情報の指定方法の一覧は次の通りです。 + + + + + + + + + + + + + + + + + + +
項目引数説明
コンテナ名nameまたはinfo 少なくともいずれかの引数にNULLではない値を指定する。両方に指定する場合、異なる値を指定してはならない。
コンテナ種別info GS_CONTAINER_COLLECTIONを指定した場合、gsPutCollectionと同様の振る舞いとなる。GS_CONTAINER_TIME_SERIESを指定した場合、gsPutTimeSeriesと同様の振る舞いとなる。
カラムレイアウトinfo GSContainerにて規定された制約に合致するようGSColumnInfoのリストならびにロウキーの構成を設定する。ただし現バージョンでは、初期値でのNULL使用有無が設定されたGSColumnInfo::optionsを持つGSColumnInfoを含めることはできない。
カラム順序の無視info 無視する場合、同名の既存のコンテナのカラム順序と一致するかどうかを検証しない。
時系列構成オプションinfo コンテナ種別がGS_CONTAINER_TIME_SERIESの場合のみ、NULLではない値を指定できる。
索引設定info 現バージョンでは無視される。今後のバージョンでは、gsCreateIndexの規則に合致しない設定が含まれていた場合、エラーとなる可能性がある。
トリガ設定info 現バージョンでは無視される。今後のバージョンでは、gsCreateTriggerの規則に合致しない設定が含まれていた場合、エラーとなる可能性がある。
コンテナ類似性info NULL以外を指定し新規作成する場合、指定の内容が反映される。既存コンテナの設定を変更することはできない。NULLを指定した場合は無視される。
+
+
Parameters
+ + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象のコンテナの名前
[in]info処理対象のコンテナの情報
[in]modifiable既存コンテナのカラムレイアウト変更を許可するかどうか
[out]containerGSContainerインスタンスを格納するためのポインタ変数へのポインタ値。GS_CONTAINER_COLLECTIONを指定した場合はGSCollectionGS_CONTAINER_TIME_SERIESを指定した場合はGSTimeSeries固有の機能が使用できます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • nameならびにinfo引数の内容が規則に合致しない場合。また、指定のコンテナ種別に対応するコンテナ新規作成・変更関数の規則に合致しない場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • name以外のポインタ型引数にNULLが指定された場合
  • +
+
+
See Also
gsPutCollection
+
+gsPutTimeSeries
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsPutMultipleContainerRows (GSGridStorestore,
const GSContainerRowEntryentryList,
size_t entryCount 
)
+
+ +

任意のコンテナの任意個数のロウについて、可能な限りリクエスト単位を大きくして新規作成または更新操作を行います。

+
指定のエントリ列に含まれる各ロウオブジェクトについて、個別にgsPutRowを呼び出した場合と同様に新規作成または更新操作を行います。ただし、個別に行う場合と違い、同一の格納先などの可能な限り大きな単位で対象ノードに対しリクエストしようとします。これにより、対象コンテナの総数や指定のロウオブジェクトの総数が多くなるほど、対象ノードとやりとりする回数が削減される可能性が高くなります。
+
指定のエントリ列は、コンテナ名とロウオブジェクト列との組からなる任意個数のエントリから構成されます。対象とするコンテナとして、コンテナ種別やカラムレイアウトが異なるものを混在させることができます。ただし、すでに存在するコンテナでなければなりません。エントリ列のコンテナ名としてNULLを設定することはできません。また、ロウオブジェクト列の要素数が正ならば、ロウオブジェクト列の配列アドレスとしてNULLを設定することはできません。
+
各ロウオブジェクト列には、対象のコンテナと同一のカラムレイアウトのGSRowのみを任意個数含めることができます。現バージョンでは、カラム順序についてもすべて同一でなければなりません。ロウオブジェクト列の要素としてNULLを含めることはできません。
+
コンテナの種別ならびに設定によっては、操作できるロウの内容についてgsPutRowと同様の制限が設けられています。具体的な制限事項は、gsPutRowの定義を参照してください。
+
指定のエントリ列内に同一コンテナを対象とした同一ロウキーを持つ複数のロウオブジェクト列が存在する場合、異なるリスト間であればエントリ列の要素順、同一ロウオブジェクト列内であればその要素順を基準として、同値のロウキーを持つ最も後方にあるロウオブジェクトの内容が反映されます。
+
トランザクションを維持し、ロックを保持し続けることはできません。ただし、既存のトランザクションが対象ロウに影響するロックを確保している場合、すべてのロックが解放されるまで待機し続けます。
+
他のコンテナ・ロウ操作と同様、異なるコンテナ間での整合性は保証されません。したがって、あるコンテナに対する処理の結果は、その処理の開始前に完了した他の操作命令の影響を受けることがあります。
+
各コンテナならびにロウに対する処理の途中でエラーが発生した場合、一部のコンテナの一部のロウに対する操作結果のみが反映されたままとなることがあります。
+
この操作によりエラーが発生した場合、エラー情報にはcontainerパラメータが含まれることがあります。エラーに関するパラメータの詳細は、GSGridStoreの定義を参照してください。
+
Attention
エントリ列に含まれるロウオブジェクトへのアドレスとしてGSRow以外のものが含まれており、異常を検知できなかった場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]store処理対象のGSGridStore
[in]entryList対象とするコンテナの名前とロウオブジェクト列からなるエントリの列。GSContainerRowEntryの配列により構成されます。entryCount0の場合、この配列を参照することはなく、NULLを指定することもできます。
[in]entryCountエントリ列の要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 対象とするコンテナが存在しない場合、また、対象とするコンテナとロウオブジェクトとのカラムレイアウトが一致しない場合
  • +
  • 特定コンテナ種別固有の制限に反する操作を行った場合
  • +
  • この処理または関連するトランザクションのタイムアウト、接続障害が発生した場合、またはサポート範囲外の値がロウオブジェクトに含まれていた場合
  • +
  • storeNULLの場合
  • +
  • queryCountが正の値であるにもかかわらず、queryListNULLが指定された場合
  • +
  • エントリ列に含まれるロウオブジェクトへのアドレスとしてGSRow以外のものが含まれており、異常検知に成功した場合
  • +
  • エントリ列を構成するエントリのコンテナ名としてNULLが含まれていた場合、ロウオブジェクト列の要素数が正であるにも関わらずロウオブジェクト列の配列アドレスとしてNULLが含まれていた場合、また、ロウオブジェクト列の要素としてNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutTimeSeries (GSGridStorestore,
const GSCharname,
const GSBindingbinding,
const GSTimeSeriesPropertiesproperties,
GSBool modifiable,
GSTimeSeries ** timeSeries 
)
+
+ +

時系列を新規作成または変更します。

+
同名のコンテナが存在しない場合、指定のバインディング情報により定義されたカラムレイアウトに従い、新規に時系列を作成します。すでに同名の時系列が存在し、既存のカラムレイアウトの内容がすべて一致する場合、実行中のトランザクションを待機する点を除きgsGetTimeSeriesと同様に振る舞います。
+
modifiableGS_TRUEであり、すでに同名の時系列が存在する場合、必要に応じカラムレイアウトを変更します。変更する際、要求したカラムと同一の名前・型の既存のカラムは保持されます。一致しないカラムのうち、既存の時系列にない名前のカラムは追加し、要求側にないカラムはデータも含め削除します。型が異なる同名のカラムが存在する場合は失敗します。また、ロウキーに対応するカラムの追加と削除、時系列構成オプションの変更はできません。時系列構成オプションを指定する場合は、既存の設定内容とすべて同値にする必要があります。
+
コンテナにトリガが設定されており、カラムレイアウト変更によってトリガが通知対象としているカラムが削除された場合、そのカラムはトリガの通知対象から削除されます。
+
新たに追加されるカラムの値は、gsPutCollectionの定義を参照してください。
+
指定の型とカラムレイアウトとの対応関係については、GSContainerの定義を参照してください。
+
すでに同名の時系列が存在し、かつ、該当する時系列において実行中のトランザクションが存在する場合、それらの終了を待機してから処理を行います。
+
Parameters
+ + + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[in]bindingユーザ定義構造体とカラムレイアウトとのバインディング情報
[in]properties時系列の構成オプション。NULLを指定すると、同名の時系列が存在する場合は既存の設定が継承され、存在しない場合は初期設定を指定したものとみなされます。初期設定とは、GS_TIME_SERIES_PROPERTIES_INITIALIZERにより初期化した時系列構成オプションと同値の設定のことです。
[in]modifiable既存時系列のカラムレイアウト変更を許可するかどうか
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 同名の時系列が存在する場合。
  • +
  • modifiableGS_FALSEであり、既存の同名の時系列に関してカラムレイアウトの内容が一致しない場合
  • +
  • modifiableGS_TRUEであり、既存の同名の時系列に関して変更できない項目を変更しようとした場合
  • +
  • 指定の型がロウオブジェクトの型として適切でない場合。詳しくはGSContainerの定義を参照してください。
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • properties以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsPutTimeSeriesGeneral (GSGridStorestore,
const GSCharname,
const GSContainerInfoinfo,
GSBool modifiable,
GSTimeSeries ** timeSeries 
)
+
+ +

GSContainerInfoを指定して、時系列を新規作成または変更します。

+
コンテナ種別がGS_CONTAINER_TIME_SERIESに限定され、GSTimeSeriesインスタンスが格納される点を除き、gsPutTimeSeriesGeneralと同様に振る舞います。
+
Parameters
+ + + + + + +
[in]store処理対象のGSGridStore
[in]name処理対象の時系列の名前
[in]info処理対象の時系列の情報。コンテナ種別には常にGS_CONTAINER_TIME_SERIESを指定
[in]modifiable既存時系列のカラムレイアウト変更を許可するかどうか
[out]timeSeriesGSTimeSeriesインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • コンテナ種別以外の指定内容に関して、gsPutContainerGeneralの規則に合致しない場合。また、コンテナ種別に関する制限に合致しない場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • name以外のポインタ型引数にNULLが指定された場合
  • +
+
+
See Also
gsPutContainerGeneral
+
Since
1.5
+ +
+
+
+
+
+
GSGridStoreFactory
+
+
+ + + + + +

+Typedefs

typedef struct
+GSGridStoreFactoryTag 
GSGridStoreFactory
 GSGridStoreインスタンスを管理します。More...
 
+ + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory **factory, GSBool allRelated)
 必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。More...
 
GS_DLL_PUBLIC
+GSGridStoreFactory
+*GS_API_CALL 
gsGetDefaultFactory ()
 デフォルトのGSGridStoreFactoryインスタンスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount, GSGridStore **store)
 指定のプロパティを持つGSGridStoreを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactory *factory, const GSPropertyEntry *properties, size_t propertyCount)
 指定のファクトリの設定を変更します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSGridStoreFactoryTag GSGridStoreFactory
+
+ +

GSGridStoreインスタンスを管理します。

+
GSGridStoreインスタンス共通のクライアント設定や使用済みのコネクションを管理します。
+
GridDBにアクセスするためには、このファクトリを介してGSGridStoreインスタンスを取得する必要があります。
+
この型のポインタを第一引数とする関数は、すべてスレッド安全です。
+
追加の環境設定を行うことで、次の機能を使用できるようになります。
+
SSL接続
アドバンスド機能用ライブラリを使用できるよう設定することで、クラスタもしくはアドレスプロバイダへのTCP接続においてSSL接続を選択できるようになります。アドバンスド機能用ライブラリの設定方法については、GridDB機能リファレンスを参照してください。
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseFactory (GSGridStoreFactory ** factory,
GSBool allRelated 
)
+
+ +

必要に応じ、指定のGSGridStoreFactoryに関連するリソースをクローズします。

+
Note
現バージョンでは、何もクローズ処理を行いません。
+
Parameters
+ + + +
[in,out]factory対象とするGSGridStoreFactoryインスタンスのポインタ変数へのポインタ値
[in]allRelated現バージョンでは、結果に影響しません。
+
+
+ +
+
+ +
+
+ + + + + + + +
GS_DLL_PUBLIC GSGridStoreFactory* GS_API_CALL gsGetDefaultFactory ()
+
+ +

デフォルトのGSGridStoreFactoryインスタンスを取得します。

+
Returns
GSGridStoreFactoryインスタンスへのポインタ値
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetGridStore (GSGridStoreFactoryfactory,
const GSPropertyEntryproperties,
size_t propertyCount,
GSGridStore ** store 
)
+
+ +

指定のプロパティを持つGSGridStoreを取得します。

+
GSGridStoreを取得した時点では、各GSContainerを管理するマスタノード(以下、マスタ)のアドレス探索を必要に応じて行うだけであり、認証処理は行われません。実際に各GSContainerに対応するノードに接続する必要が生じたタイミングで、認証処理が行われます。
+
以下のプロパティを指定できます。サポート外の名称のプロパティは無視されます。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名称説明
host 接続先ホスト名。IPアドレス(IPV4のみ)も可。マスタを手動指定する場合は必須。マスタを自動検出する場合は設定しない。notificationMemberおよびnotificationProviderプロパティと同時に指定することはできない
port 接続先ポート番号。0から65535までの数値の文字列表現。マスタを手動指定する場合は必須。マスタを自動検出する場合は設定しない
notificationAddress マスタ自動検出に用いられる通知情報を受信するためのIPアドレス(IPv4のみ)。省略時はデフォルトのアドレスを使用。notificationMemberおよびnotificationProviderプロパティと同時に指定することはできない
notificationPort マスタ自動検出に用いられる通知情報を受信するためのポート番号。0から65535までの数値の文字列表現。省略時はデフォルトのポートを使用
clusterName クラスタ名。接続先のクラスタに設定されているクラスタ名と一致するかどうかを確認するために使用される。省略時もしくは空文字列を指定した場合、クラスタ名の確認は行われない。
database 接続先のデータベース名。省略時は全てのユーザがアクセス可能な「public」データベースに自動接続される。接続ユーザは接続データベースに属するコンテナを操作できる。
user ユーザ名
password ユーザ認証用のパスワード
consistency 一貫性レベル。次のいずれかの文字列を指定できる。
+
"IMMEDIATE"
+
他のクライアントからの更新結果は、該当トランザクションの完了後即座に反映される
+
"EVENTUAL"
+
他のクライアントからの更新結果は、該当トランザクションが完了した後でも反映されない場合がある。GSContainerに対する更新操作は実行できない
+
+省略時は"IMMEDIATE"が指定されたものとみなされる
transactionTimeout トランザクションタイムアウト時間の最低値。関係するGSContainerにおける各トランザクションの開始時点から適用。0からINTEGER型の最大値までの値の文字列表現であり、単位は秒。ただし、タイムアウト時間として有効に機能する範囲に上限があり、上限を超える指定は上限値が指定されたものとみなされる。0の場合、後続のトランザクション処理がタイムアウトエラーになるかどうかは常に不定となる。省略時は接続先GridDB上のデフォルト値を使用
failoverTimeout フェイルオーバ処理にて新たな接続先が見つかるまで待機する時間の最低値。0からINTEGER型の最大値までの数値の文字列表現であり、単位は秒。0の場合、フェイルオーバ処理を行わない。省略時は指定のファクトリの設定値を使用
containerCacheSize コンテナキャッシュに格納するコンテナ情報の最大個数。0からINTEGER型の最大値までの数値の文字列表現。値が0の場合、コンテナキャッシュを使用しないことを意味する。GSContainerを取得する際にキャッシュにヒットした場合は、GridDBへのコンテナ情報の問い合わせを行わない。省略時は既存の設定値を使用。バージョン1.5よりサポート
notificationMember 固定リスト方式を使用して構成されたクラスタに接続する場合に、クラスタノードのアドレス・ポートのリストを次のように指定する。
(アドレス1):(ポート1),(アドレス2):(ポート2),...
notificationAddressおよびnotificationProviderプロパティと同時に指定することはできない。バージョン2.9よりサポート
notificationProvider プロバイダ方式を使用して構成されたクラスタに接続する場合に、アドレスプロバイダのURLを指定する。notificationAddressおよびnotificationMemberプロパティと同時に指定することはできない。バージョン2.9よりサポート
applicationName アプリケーションの名前。アプリケーションの識別を補助するための情報として、接続先のクラスタ上での各種管理情報の出力の際に含められる場合がある。ただし、アプリケーションの同一性をどのように定義するかについては関与しない。省略時はアプリケーション名の指定がなかったものとみなされる。空文字列は指定できない。バージョン4.2よりサポート
timeZone タイムゾーン情報。TQLでのTIMESTAMP値演算などに使用される。「±hh:mm」または「±hhmm」形式によるオフセット値(±+または-hhは時、mmは分)、「Z」(+00:00に相当)、「auto」(実行環境に応じ自動設定)のいずれかを指定する。autoが使用できるのは夏時間を持たないタイムゾーンに限定される。バージョン4.3よりサポート
authentication 認証種別。次のいずれかの文字列を指定できる。
+
"INTERNAL"
+
クラスタ上で管理されているアカウント情報に基づいた、内部認証
+
"LDAP"
+
クラスタ外にあるLDAPサーバで管理されているアカウント情報に基づいた、外部認証。LDAP接続設定のないクラスタに接続する場合、もしくは、管理ユーザを使用する場合は指定できない
+
+省略時は自動的に認証種別が選択される。原則として指定は不要。非管理ユーザについて内部認証と外部認証を併用するクラスタへの接続の際に、内部認証を用いる場合などに指定する。バージョン4.5よりサポート
sslMode クラスタへの接続においてSSLの使用有無の判断に用いられるモード。次のいずれかの文字列を指定できる。
+
"DISABLED"
+
SSLを常に使用しない
+
"PREFERRED"
+
可能な限りSSLを使用する。SSL接続・非SSL接続共に使用できる場合はSSL接続を使用する
+
"VERIFY"
+
SSLを常に使用する。サーバ検証あり
+
+SSL接続を選択できる環境設定(詳細: GSGridStoreFactory)の場合のみ指定できる。それ以外の場合は、プロパティの値によらず指定できない。SSL接続を選択できる場合、省略時は"PREFERRED"が指定されたものとみなされる。バージョン4.5よりサポート。"VERIFY"はバージョン4.6よりサポート。
connectionRoute クラスタ接続時における通信経路。次の文字列を指定できる。
+
"PUBLIC"
+
クラスタの外部通信経路が設定されている場合に、外部通信経路を経由した接続を行う
+
+省略時は通常のクラスタ通信経路を用いた接続が行われる。外部接続が必要な場合のみ指定する。バージョン5.1.1よりサポート
+
+
クラスタ名、データベース名、ユーザ名、パスワードについては、ASCIIの大文字・小文字表記の違いがいずれも区別されます。その他、これらの定義に使用できる文字種や長さの上限などの制限については、GridDB機能リファレンスを参照してください。ただし、制限に反する文字列をプロパティ値として指定した場合、各ノードへの接続のタイミングまでエラーが検知されないことや、認証情報の不一致など別のエラーになることがあります。
+
取得のたびに、新たなGSGridStoreインスタンスが生成されます。異なるGSGridStoreインスタンスならびに関連するリソースに対する操作は、スレッド安全です。すなわち、ある2つのリソースがそれぞれGSGridStoreインスタンスを基にして生成されたものまたはGSGridStoreインスタンスそのものであり、かつ、該当する関連GSGridStoreインスタンスが異なる場合、一方のリソースに対してどのスレッドからどのタイミングで関連する関数が呼び出されていたとしても、他方のリソースの関連する関数を呼び出すことができます。ただし、GSGridStore自体のスレッド安全性は保証されていないため、同一GSGridStoreインスタンスに対して複数スレッドから任意のタイミングで関連する関数を呼び出すことはできません。
+
Parameters
+ + + + + +
[in]factory取得元のGSGridStoreFactoryインスタンス。NULLの場合、gsGetDefaultFactoryにより得られるインスタンスと同一のものが使用されます。
[in]properties取得設定を指示するためのプロパティ。GSPropertyEntryの配列により構成されます。エントリ数が0の場合、この配列を参照することはなく、NULLを指定することもできます。エントリを構成する名前もしくは値にNULLを含めることはできません。
[in]propertyCountpropertiesとして引数に指定するプロパティのエントリ数。
[out]storeGSGridStoreインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のホストについて名前解決できなかった場合
  • +
  • 指定のプロパティが上で説明した形式・制限に合致しないことを検知できた場合
  • +
  • storeNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFactoryProperties (GSGridStoreFactoryfactory,
const GSPropertyEntryproperties,
size_t propertyCount 
)
+
+ +

指定のファクトリの設定を変更します。

+
設定の変更は、指定のファクトリより生成されたGSGridStore、ならびに、今後指定のファクトリで生成されるGSGridStoreに反映されます。
+
以下のプロパティを指定できます。サポート外の名称のプロパティは無視されます。 + + + + + + +
名称説明
maxConnectionPoolSize 内部で使用されるコネクションプールの最大コネクション数。0からINTEGER型の最大値までの数値の文字列表現。値が0の場合、コネクションプールを使用しないことを意味する。省略時は既存の設定値を使用
failoverTimeout フェイルオーバ処理にて新たな接続先が見つかるまで待機する時間の最低値。0からINTEGER型の最大値までの数値の文字列表現であり、単位は秒。0の場合、フェイルオーバ処理を行わない。省略時は既存の設定値を使用
+
+
Parameters
+ + + + +
[in]factory取得元のGSGridStoreFactoryインスタンス。NULLの場合、gsGetDefaultFactoryにより得られるインスタンスと同一のものが使用されます。
[in]properties取得設定を指示するためのプロパティ。GSPropertyEntryの配列により構成されます。エントリ数が0の場合、NULLを指定することもできます。エントリを構成する名前もしくは値にNULLを含めることはできません。
[in]propertyCountpropertiesとして引数に指定するプロパティのエントリ数。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のプロパティが上で説明した形式に合致しない場合
  • +
  • propertiesNULLが指定された場合
  • +
+
+ +
+
+
+
+
+
GSPartitionController
+
+
+ + + + + +

+Typedefs

typedef struct
+GSPartitionControllerTag 
GSPartitionController
 パーティション状態の取得や操作のためのコントローラです。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController **controller)
 指定のGSPartitionControllerインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionController *controller, int32_t *partitionCount)
 対象とするGridDBクラスタのパーティション数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionController *controller, int32_t partitionIndex, int64_t *containerCount)
 指定のパーティションに属するコンテナの総数を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionController *controller, int32_t partitionIndex, int64_t start, const int64_t *limit, const GSChar *const **nameList, size_t *size)
 指定のパーティションに所属するコンテナの名前の一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar **address)
 指定のパーティションに対応するオーナノードのアドレスを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionController *controller, int32_t partitionIndex, const GSChar *const **addressList, size_t *size)
 指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionController *controller, int32_t partitionIndex, const GSChar *host)
 優先的に選択されるホストのアドレスを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionController *controller, const GSChar *containerName, int32_t *partitionIndex)
 指定のコンテナ名に対応するパーティションインデックスを取得します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSPartitionControllerTag GSPartitionController
+
+ +

パーティション状態の取得や操作のためのコントローラです。

+
パーティションとは、データを格納する論理的な領域です。GridDBクラスタ内のデータ配置に基づいた操作を行うために使用します。
+
Since
1.5
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAssignPartitionPreferableHost (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSCharhost 
)
+
+ +

優先的に選択されるホストのアドレスを設定します。

+
バックアップノードへの接続など、可能な接続先が複数存在する場合に、設定されたアドレスが候補に含まれていれば常に選択されるようになります。それ以外の場合は設定が無視されます。
+
Parameters
+ + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[in]host優先的に選択されるホストのアドレス。IPアドレス(IPv4のみ)も可。NULLの場合、設定が解除される
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • controller引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • アドレスの名前解決に失敗した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsClosePartitionController (GSPartitionController ** controller)
+
+ +

指定のGSPartitionControllerインスタンスを解放します。

+
Parameters
+ + +
[in,out]controllerクローズ対象のGSPartitionControllerインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSPartitionControllerインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionBackupHosts (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar *const ** addressList,
size_t * size 
)
+
+ +

指定のパーティションに対応するバックアップノードのアドレス一覧を取得します。

+
オーナノードとは、gsGetGridStoreおける一貫性レベルとして"EVENTUAL"を指定した場合に、優先的に選択されるノードのことです。
+
一覧の順序に関しては不定です。重複するアドレスが含まれることはありません。
+
Attention
アドレス一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressListアドレスの文字列表現一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerCount (GSPartitionControllercontroller,
int32_t partitionIndex,
int64_t * containerCount 
)
+
+ +

指定のパーティションに属するコンテナの総数を取得します。

+
コンテナ数を求める際の計算量は、コンテナ数にはおおむね依存しません。
+
Parameters
+ + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値
[out]containerCountコンテナ数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionContainerNames (GSPartitionControllercontroller,
int32_t partitionIndex,
int64_t start,
const int64_t * limit,
const GSChar *const ** nameList,
size_t * size 
)
+
+ +

指定のパーティションに所属するコンテナの名前の一覧を取得します。

+
指定のパーティションについてコンテナの新規作成・構成変更・削除が行われたとしても、該当コンテナを除くとその前後で一覧の取得結果の順序が変わることはありません。それ以外の一覧の順序に関しては不定です。重複する名前が含まれることはありません。
+
取得件数の上限が指定された場合、上限を超える場合、後方のものから切り捨てられます。指定条件に該当するものが存在しない場合、空のリストが求まります。
+
Attention
コンテナ名一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[in]start取得範囲の開始位置。0以上の値
[in]limit取得件数の上限。NULLの場合、上限なしとみなされる
[out]nameListコンテナ名一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • limit以外のポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionCount (GSPartitionControllercontroller,
int32_t * partitionCount 
)
+
+ +

対象とするGridDBクラスタのパーティション数を取得します。

+
対象とするGridDBクラスタにおけるパーティション数設定の値を取得します。一度取得した結果はキャッシュされ、次にクラスタ障害・クラスタノード障害を検知するまで再びGridDBクラスタに問い合わせることはありません。
+
Parameters
+ + + +
[in]controller処理対象のGSPartitionController
[out]partitionCountパーティション数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、-1が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionHosts (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar *const ** addressList,
size_t * size 
)
+
+ +

指定のパーティションに対応するノードのアドレス一覧を取得します。

+
一覧の順序に関しては不定です。重複するアドレスが含まれることはありません。
+
Attention
アドレス一覧を格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressListアドレスの文字列表現一覧の配列を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]sizeコンテナ名一覧の配列の要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionIndexOfContainer (GSPartitionControllercontroller,
const GSCharcontainerName,
int32_t * partitionIndex 
)
+
+ +

指定のコンテナ名に対応するパーティションインデックスを取得します。

+
一度GridDBクラスタが構築されると、コンテナの所属先のパーティションが変化することはなく、パーティションインデックスも一定となります。指定の名前に対応するコンテナが存在するかどうかは、結果に依存しません。
+
パーティションインデックスの算出に必要とする情報はキャッシュされ、次にクラスタ障害・クラスタノード障害を検知するまで再びGridDBクラスタに問い合わせることはありません。
+
Parameters
+ + + + +
[in]controller処理対象のGSPartitionController
[in]containerNameコンテナ名
[out]partitionIndexパーティションインデックスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、-1が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • コンテナ名として許可されない文字列が指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPartitionOwnerHost (GSPartitionControllercontroller,
int32_t partitionIndex,
const GSChar ** address 
)
+
+ +

指定のパーティションに対応するオーナノードのアドレスを取得します。

+
オーナノードとは、gsGetGridStoreおける一貫性レベルとして"IMMEDIATE"を指定した場合に、常に選択されるノードのことです。
+
Attention
アドレスを格納する領域を確保するために、指定のGSPartitionControllerと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]controller処理対象のGSPartitionController
[in]partitionIndexパーティションインデックス。0以上パーティション数未満の値。
[out]addressアドレスの文字列表現を格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のパーティションインデックスが指定された場合
  • +
  • この処理のタイムアウト、接続障害が発生した場合
  • +
  • 対応するGSGridStoreのクローズ後に呼び出された場合
  • +
+
+
Since
1.5
+ +
+
+
+
+
+
GSQuery
+
+
+ + + + + + + + + +

+Typedefs

+typedef struct GSQueryTag GSQuery
 特定のGSContainerに対応付けられたクエリを保持し、結果取得方法の設定ならびに実行・結果取得を行う機能を持ちます。
 
typedef GSEnum GSFetchOption
 
typedef GSEnum GSQueryOrder
 
+ + + + + + + +

+Enumerations

enum  GSFetchOptionTag { GS_FETCH_LIMIT, +GS_FETCH_PARTIAL_EXECUTION = (GS_FETCH_LIMIT + 2) + }
 クエリ実行結果を取得する際のオプション項目です。More...
 
enum  GSQueryOrderTag { GS_ORDER_ASCENDING, +GS_ORDER_DESCENDING + }
 クエリにおける要求ロウ順序を表します。More...
 
+ + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery **query)
 指定のGSQueryインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQuery *query, GSBool forUpdate, GSRowSet **rowSet)
 オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQuery *query, GSFetchOption fetchOption, const void *value, GSType valueType)
 結果取得に関するオプションを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQuery *query, GSRowSet **rowSet)
 直近に実行した結果のGSRowSetを取得します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef GSEnum GSFetchOption
+
+
See Also
GSFetchOptionTag
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSQueryOrder
+
+
See Also
GSQueryOrderTag
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSFetchOptionTag
+
+ +

クエリ実行結果を取得する際のオプション項目です。

+ + + +
Enumerator
GS_FETCH_LIMIT  +

取得するロウの数の最大値を設定するために使用します。

+
実行結果のロウ数が最大値を超えた場合、GSRowSetで得られる順番で先頭から最大値の分だけが取得できます。それ以降のロウは取得できません。
+
サポートされる設定値の型は、INTEGERまたはLONGです。負の値は指定できません。設定が省略された場合、上限は設定されません。
+
GS_FETCH_PARTIAL_EXECUTION  +

部分実行モードを設定するために使用します。

+
部分実行モードでは、クエリの中間処理や結果送受信に用いるバッファのサイズなどがなるべく一定の範囲に収まるよう、必要に応じて実行対象のデータ範囲を分割し、この部分範囲ごとに実行とフェッチをリクエストすることがあります。そのため、GSRowSetを取得した時点で一部の範囲の結果が求まっていないことや、結果ロウを順に参照していく段階で、残りの範囲を部分的に実行していくことがあります。
+
部分実行モードは、現バージョンでは次の条件すべてを満たすクエリに使用できます。また、GS_FETCH_LIMITオプションと併用することができます。条件を満たさない場合でも、各種フェッチオプションの設定時点ではエラーを検知しない場合があります。
    +
  • TQL文からなるクエリであること
  • +
  • TQL文において、選択式が「*」のみからなり、ORDER BY節を含まないこと
  • +
  • 対応するGSContainerが個々の部分的なクエリ実行時点において常に自動コミットモードに設定されていること
  • +
+
+
部分実行モードでは、対応するGSContainerのトランザクション分離レベルや状態に基づき、個々の部分的なクエリ実行時点において参照可能なロウが使用されます。ただし、クエリ全体の実行開始時点で存在しないロウは、実行対象から外れる場合があります。
+
部分実行モードを有効にした場合にGSRowSetに対して使用できない操作や特有の挙動については、個別の定義を参照してください。
+
サポートされる設定値の型は、BOOLのみです。部分実行モードを有効にするには、GS_TRUEと一致する値を指定します。現バージョンでは、未設定の場合には部分実行モードを有効にしません。
+
Since
4.0
+
+ +
+
+ +
+
+ + + + +
enum GSQueryOrderTag
+
+ +

クエリにおける要求ロウ順序を表します。

+
各種クエリ機能別に定義される判定対象を基準として、順序指定を行うために使用します。具体的な判定対象は、個別の機能によって異なります。
+ + + +
Enumerator
GS_ORDER_ASCENDING  +

要求ロウ順序が昇順であることを表します。

+
GS_ORDER_DESCENDING  +

要求ロウ順序が降順であることを表します。

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseQuery (GSQuery ** query)
+
+ +

指定のGSQueryインスタンスを解放します。

+
Parameters
+ + +
[in,out]queryクローズ対象のGSQueryインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSQueryインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsFetch (GSQueryquery,
GSBool forUpdate,
GSRowSet ** rowSet 
)
+
+ +

オプションを指定して指定のクエリを実行し、実行結果に対応するロウ集合を取得します。

+
forUpdateGS_TRUEが指定された場合、取得対象のロウすべてをロックします。ロックすると、対応するトランザクションが有効である間、他のトランザクションからの対象ロウに対する変更操作が阻止されます。対応するコンテナの自動コミットモードが無効の場合のみ、指定できます。
+
新たなロウ集合を取得すると、指定のクエリについて直近に実行した結果のGSRowSetを介するロウ操作はできなくなります。
+
一度に大量のロウを取得しようとした場合、GridDBノードが管理する通信バッファのサイズの上限に到達し、失敗することがあります。上限サイズについては、GridDB機能リファレンスを参照してください。
+
Parameters
+ + + + +
[in]query処理対象のGSQuery
[in]forUpdate更新用ロックを要求するかどうか
[out]rowSetGSRowSetインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 対応するコレクションの自動コミットモード有効であるにもかかわらず、forUpdateGS_TRUEが指定された場合
  • +
  • ロックできないクエリであるにもかかわらず、forUpdateGS_TRUEが指定された場合。具体的なロックの可否は、指定のクエリを作成する機能の各種定義を参照してください。
  • +
  • 正しくないパラメータ・構文・命令を含むクエリを実行しようとした場合。具体的な制約は、指定のクエリを作成する機能の各種定義を参照してください。
  • +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するGSContainerのクローズ後に呼び出された場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSet (GSQueryquery,
GSRowSet ** rowSet 
)
+
+ +

直近に実行した結果のGSRowSetを取得します。

+
一度取得すると、以降新たに指定のクエリを実行するまでGSRowSetが取得できなくなります。
+
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の続きを行う場合があります。
+
Parameters
+ + + +
[in]query処理対象のGSQuery
[out]rowSet直近に実行した結果のGSRowSetインスタンスを格納するためのポインタ変数へのポインタ値。取得済みの場合、もしくは、一度もクエリを実行したことのない場合はNULLが設定されます。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、またはGSContainerのクローズ後に呼び出された場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetFetchOption (GSQueryquery,
GSFetchOption fetchOption,
const void * value,
GSType valueType 
)
+
+ +

結果取得に関するオプションを設定します。

+
設定可能なオプション項目と値の定義については、GSFetchOptionTagを参照してください。
+
Attention
valueTypevalueの型との対応が正しくない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]query処理対象のGSQuery
[in]fetchOptionオプション項目
[in]valueオプションの値。指定可能な型は、valueTypeによって次のように異なります。 + + + + + + + + +
valueType valueの型
INTEGER int32_t*
LONG int64_t*
BOOL GSBool*
+
[in]valueTypeオプションの値の型
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • オプション項目固有の制約に違反した場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 対応するGSContainerのクローズ後に呼び出された場合
  • +
+
+ +
+
+
+
+
+
GSRow
+
+
+ + + + + + + + +

+Typedefs

typedef struct GSRowTag GSRow
 任意のスキーマについて汎用的にフィールド操作できるロウです。More...
 
typedef GSRow GSRowKey
 ロウキーに関するカラムのみから構成されるGSRowの一種です。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow **row)
 指定のGSRowインスタンスを解放します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSResult 
gsGetRowSchema (GSRow *row, GSContainerInfo *schemaInfo)
 指定のロウに対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRow *row, int32_t column, const GSValue *fieldValue, GSType type)
 指定のフィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRow *row, int32_t column, GSValue *fieldValue, GSType *type)
 指定のフィールドの値とその型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRow *row, int32_t column)
 指定のフィールドにNULLを設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRow *row, int32_t column, GSBool *nullValue)
 指定のフィールドにNULLが設定されているかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のSTRING型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のSTRING型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRow *row, int32_t column, GSBool fieldValue)
 指定のBOOL型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRow *row, int32_t column, GSBool *fieldValue)
 指定のBOOL型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRow *row, int32_t column, int8_t fieldValue)
 指定のBYTE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRow *row, int32_t column, int8_t *fieldValue)
 指定のBYTE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRow *row, int32_t column, int16_t fieldValue)
 指定のSHORT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRow *row, int32_t column, int16_t *fieldValue)
 指定のSHORT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRow *row, int32_t column, int32_t fieldValue)
 指定のINTEGER型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRow *row, int32_t column, int32_t *fieldValue)
 指定のINTEGER型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRow *row, int32_t column, int64_t fieldValue)
 指定のLONG型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRow *row, int32_t column, int64_t *fieldValue)
 指定のLONG型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRow *row, int32_t column, float fieldValue)
 指定のFLOAT型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRow *row, int32_t column, float *fieldValue)
 指定のFLOAT型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRow *row, int32_t column, double fieldValue)
 指定のDOUBLE型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRow *row, int32_t column, double *fieldValue)
 指定のDOUBLE型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRow *row, int32_t column, GSTimestamp fieldValue)
 指定の通常精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRow *row, int32_t column, GSTimestamp *fieldValue)
 指定の通常精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRow *row, int32_t column, const GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRow *row, int32_t column, GSPreciseTimestamp *fieldValue)
 指定の高精度のTIMESTAMP型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRow *row, int32_t column, const GSChar *fieldValue)
 指定のGEOMETRY型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRow *row, int32_t column, const GSChar **fieldValue)
 指定のGEOMETRY型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRow *row, int32_t column, const GSBlob *fieldValue)
 指定のBLOB型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRow *row, int32_t column, GSBlob *fieldValue)
 指定のBLOB型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRow *row, int32_t column, const GSChar *const *fieldValue, size_t size)
 指定のSTRING配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRow *row, int32_t column, const GSChar *const **fieldValue, size_t *size)
 指定のSTRING配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRow *row, int32_t column, const GSBool *fieldValue, size_t size)
 指定のBOOL配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRow *row, int32_t column, const GSBool **fieldValue, size_t *size)
 指定のBOOL配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRow *row, int32_t column, const int8_t *fieldValue, size_t size)
 指定のBYTE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRow *row, int32_t column, const int8_t **fieldValue, size_t *size)
 指定のBYTE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRow *row, int32_t column, const int16_t *fieldValue, size_t size)
 指定のSHORT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRow *row, int32_t column, const int16_t **fieldValue, size_t *size)
 指定のSHORT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRow *row, int32_t column, const int32_t *fieldValue, size_t size)
 指定のINTEGER配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRow *row, int32_t column, const int32_t **fieldValue, size_t *size)
 指定のINTEGER配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRow *row, int32_t column, const int64_t *fieldValue, size_t size)
 指定のLONG配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRow *row, int32_t column, const int64_t **fieldValue, size_t *size)
 指定のLONG配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRow *row, int32_t column, const float *fieldValue, size_t size)
 指定のFLOAT配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRow *row, int32_t column, const float **fieldValue, size_t *size)
 指定のFLOAT配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRow *row, int32_t column, const double *fieldValue, size_t size)
 指定のDOUBLE配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRow *row, int32_t column, const double **fieldValue, size_t *size)
 指定のDOUBLE配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRow *row, int32_t column, const GSTimestamp *fieldValue, size_t size)
 指定のTIMESTAMP配列型フィールドに値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRow *row, int32_t column, const GSTimestamp **fieldValue, size_t *size)
 指定のTIMESTAMP配列型フィールドの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRow *row, GSRow **destRow)
 同一のフィールド値からなる新たなGSRowインスタンスを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRow *row, GSRowKey **key)
 ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSRowTag GSRow
+
+ +

任意のスキーマについて汎用的にフィールド操作できるロウです。

+
NULLが設定されたフィールドに対して型指定のフィールド値取得機能を用いた場合、NULLの代わりにGSContainerにて定義されている空の値が求まります。たとえば文字列型カラムに対応するフィールドにNULLが設定されており、かつ、gsGetRowFieldAsStringを用いた場合、NULLアドレスではなく、空の値である長さ0の文字列を指すアドレスが求まります。
+
Since
1.5
+ +
+
+ +
+
+ + + + +
typedef GSRow GSRowKey
+
+ +

ロウキーに関するカラムのみから構成されるGSRowの一種です。

+
gsGetRowSchemaより求まるGSContainerInfoに含まれるカラム情報は、ロウキーに関するカラムの情報のみとなります。
+
Since
4.3
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseRow (GSRow ** row)
+
+ +

指定のGSRowインスタンスを解放します。

+
Parameters
+ + +
[in,out]rowクローズ対象のGSRowインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowByRow (GSRowrow,
GSRow ** destRow 
)
+
+ +

同一のフィールド値からなる新たなGSRowインスタンスを作成します。

+
Parameters
+ + + +
[in]row作成元とするGSRow
[out]destRow新たに作成されるGSRowインスタンスを格納するための、ポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsCreateRowKeyByRow (GSRowrow,
GSRowKey ** key 
)
+
+ +

ロウキーを構成するカラムのみを持ち、それらのカラムについて同一のフィールド値からなる新たなGSRowKeyインスタンスを作成します。

+
Parameters
+ + + +
[in]row作成元とするGSRow
[out]key新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 作成元とするGSRowがロウキーを持たない場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBlob (GSRowrow,
int32_t column,
GSBlobfieldValue 
)
+
+ +

指定のBLOB型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBool (GSRowrow,
int32_t column,
GSBoolfieldValue 
)
+
+ +

指定のBOOL型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsBoolArray (GSRowrow,
int32_t column,
const GSBool ** fieldValue,
size_t * size 
)
+
+ +

指定のBOOL配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByte (GSRowrow,
int32_t column,
int8_t * fieldValue 
)
+
+ +

指定のBYTE型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsByteArray (GSRowrow,
int32_t column,
const int8_t ** fieldValue,
size_t * size 
)
+
+ +

指定のBYTE配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDouble (GSRowrow,
int32_t column,
double * fieldValue 
)
+
+ +

指定のDOUBLE型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsDoubleArray (GSRowrow,
int32_t column,
const double ** fieldValue,
size_t * size 
)
+
+ +

指定のDOUBLE配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloat (GSRowrow,
int32_t column,
float * fieldValue 
)
+
+ +

指定のFLOAT型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsFloatArray (GSRowrow,
int32_t column,
const float ** fieldValue,
size_t * size 
)
+
+ +

指定のFLOAT配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsGeometry (GSRowrow,
int32_t column,
const GSChar ** fieldValue 
)
+
+ +

指定のGEOMETRY型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsInteger (GSRowrow,
int32_t column,
int32_t * fieldValue 
)
+
+ +

指定のINTEGER型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsIntegerArray (GSRowrow,
int32_t column,
const int32_t ** fieldValue,
size_t * size 
)
+
+ +

指定のINTEGER配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLong (GSRowrow,
int32_t column,
int64_t * fieldValue 
)
+
+ +

指定のLONG型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsLongArray (GSRowrow,
int32_t column,
const int64_t ** fieldValue,
size_t * size 
)
+
+ +

指定のLONG配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsPreciseTimestamp (GSRowrow,
int32_t column,
GSPreciseTimestampfieldValue 
)
+
+ +

指定の高精度のTIMESTAMP型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型・精度種別と一致しない場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShort (GSRowrow,
int32_t column,
int16_t * fieldValue 
)
+
+ +

指定のSHORT型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsShortArray (GSRowrow,
int32_t column,
const int16_t ** fieldValue,
size_t * size 
)
+
+ +

指定のSHORT配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsString (GSRowrow,
int32_t column,
const GSChar ** fieldValue 
)
+
+ +

指定のSTRING型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsStringArray (GSRowrow,
int32_t column,
const GSChar *const ** fieldValue,
size_t * size 
)
+
+ +

指定のSTRING配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestamp (GSRowrow,
int32_t column,
GSTimestampfieldValue 
)
+
+ +

指定の通常精度のTIMESTAMP型フィールドの値を取得します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型・精度種別と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldAsTimestampArray (GSRowrow,
int32_t column,
const GSTimestamp ** fieldValue,
size_t * size 
)
+
+ +

指定のTIMESTAMP配列型フィールドの値を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size対象フィールドの値の配列要素数を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldGeneral (GSRowrow,
int32_t column,
GSValuefieldValue,
GSTypetype 
)
+
+ +

指定のフィールドの値とその型を取得します。

+
Attention
フィールド値に含まれる可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]fieldValue対象フィールドの値を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]type対象フィールドの値の型を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowFieldNull (GSRowrow,
int32_t column,
GSBoolnullValue 
)
+
+ +

指定のフィールドにNULLが設定されているかどうかを返します。

+
NOT NULL制約の設定されたカラムが指定された場合、常にGS_FALSEを返します。
+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[out]nullValueNULLが設定されているかどうか受け取る変数へのポインタ値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
+
+
Since
3.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSResult gsGetRowSchema (GSRowrow,
GSContainerInfoschemaInfo 
)
+
+ +

指定のロウに対応するスキーマを取得します。

+
ロウキーの有無を含むカラムレイアウトにする情報のみが設定されたGSContainerInfoが求まります。コンテナ名、コンテナ種別、索引設定、時系列構成オプションなどその他のコンテナ情報は含まれません。
+
Attention
カラム情報の列などの可変長データを格納するために、指定のGSRowと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用します。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]row処理対象のGSRow
[out]schemaInfoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBlob (GSRowrow,
int32_t column,
const GSBlobfieldValue 
)
+
+ +

指定のBLOB型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBool (GSRowrow,
int32_t column,
GSBool fieldValue 
)
+
+ +

指定のBOOL型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByBoolArray (GSRowrow,
int32_t column,
const GSBoolfieldValue,
size_t size 
)
+
+ +

指定のBOOL配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByte (GSRowrow,
int32_t column,
int8_t fieldValue 
)
+
+ +

指定のBYTE型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByByteArray (GSRowrow,
int32_t column,
const int8_t * fieldValue,
size_t size 
)
+
+ +

指定のBYTE配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDouble (GSRowrow,
int32_t column,
double fieldValue 
)
+
+ +

指定のDOUBLE型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByDoubleArray (GSRowrow,
int32_t column,
const double * fieldValue,
size_t size 
)
+
+ +

指定のDOUBLE配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloat (GSRowrow,
int32_t column,
float fieldValue 
)
+
+ +

指定のFLOAT型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByFloatArray (GSRowrow,
int32_t column,
const float * fieldValue,
size_t size 
)
+
+ +

指定のFLOAT配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByGeometry (GSRowrow,
int32_t column,
const GSCharfieldValue 
)
+
+ +

指定のGEOMETRY型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByInteger (GSRowrow,
int32_t column,
int32_t fieldValue 
)
+
+ +

指定のINTEGER型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByIntegerArray (GSRowrow,
int32_t column,
const int32_t * fieldValue,
size_t size 
)
+
+ +

指定のINTEGER配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLong (GSRowrow,
int32_t column,
int64_t fieldValue 
)
+
+ +

指定のLONG型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByLongArray (GSRowrow,
int32_t column,
const int64_t * fieldValue,
size_t size 
)
+
+ +

指定のLONG配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByPreciseTimestamp (GSRowrow,
int32_t column,
const GSPreciseTimestampfieldValue 
)
+
+ +

指定の高精度のTIMESTAMP型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型・精度種別と一致しない場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShort (GSRowrow,
int32_t column,
int16_t fieldValue 
)
+
+ +

指定のSHORT型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByShortArray (GSRowrow,
int32_t column,
const int16_t * fieldValue,
size_t size 
)
+
+ +

指定のSHORT配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByString (GSRowrow,
int32_t column,
const GSCharfieldValue 
)
+
+ +

指定のSTRING型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByStringArray (GSRowrow,
int32_t column,
const GSChar *const * fieldValue,
size_t size 
)
+
+ +

指定のSTRING配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
  • 配列要素にNULLが含まれる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestamp (GSRowrow,
int32_t column,
GSTimestamp fieldValue 
)
+
+ +

指定の通常精度のTIMESTAMP型フィールドに値を設定します。

+
Parameters
+ + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型・精度種別と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldByTimestampArray (GSRowrow,
int32_t column,
const GSTimestampfieldValue,
size_t size 
)
+
+ +

指定のTIMESTAMP配列型フィールドに値を設定します。

+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値
[in]size対象フィールドの値の配列要素数
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • 指定のカラム番号の型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldGeneral (GSRowrow,
int32_t column,
const GSValuefieldValue,
GSType type 
)
+
+ +

指定のフィールドに値を設定します。

+
Attention
対象フィールドの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
[in]fieldValue対象フィールドの値。typeとしてGS_TYPE_NULLが指定された場合は、指定の内容が参照されることはありません。ただし、NULL以外のポインタ値を指定する必要があります
[in]type対象フィールドの値の型
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • NOT NULL制約の設定されたカラムに対して、フィールド値の型としてGS_TYPE_NULLが指定された場合
  • +
  • フィールドの値の構成要素のポインタ値としてNULLが含まれていた場合
  • +
  • フィールドの値がカラムの型と一致しない場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetRowFieldNull (GSRowrow,
int32_t column 
)
+
+ +

指定のフィールドにNULLを設定します。

+
Parameters
+ + + +
[in]row処理対象のGSRow
[in]column対象フィールドのカラム番号。0以上かつカラム数未満の値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 範囲外のカラム番号が指定された場合
  • +
  • NOT NULL制約の設定されたカラムが指定された場合
  • +
+
+
Since
3.5
+ +
+
+
+
+
+
GSRowKeyPredicate
+
+
+ + + + + +

+Typedefs

typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
 ロウキーの合致条件を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate **predicate)
 指定のGSRowKeyPredicateインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicate *predicate, GSType *keyType)
 合致条件の評価対象とするロウキーの型を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicate *predicate, GSContainerInfo *info)
 合致条件の評価対象とするロウキーのスキーマを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の開始位置とするロウキーを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **startKey)
 範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicate *predicate, const GSChar **startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey **keyObj)
 範囲条件の終了位置とするロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue **finishKey)
 範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicate *predicate, const GSChar **finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicate *predicate, const int32_t **finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicate *predicate, const int64_t **finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicate *predicate, GSRowKey *const **keyObjList, size_t *size)
 個別条件を構成するロウキーの集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicate *predicate, const GSValue **keyList, size_t *size)
 個別条件を構成する、単一カラムのロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicate *predicate, const GSChar *const **keyList, size_t *size)
 個別条件を構成するSTRING型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicate *predicate, const int32_t **keyList, size_t *size)
 個別条件を構成するINTEGER型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicate *predicate, const int64_t **keyList, size_t *size)
 個別条件を構成するLONG型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp **keyList, size_t *size)
 個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp **keyList, size_t *size)
 個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の開始位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *startKey, GSType keyType)
 範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicate *predicate, const GSChar *startKey)
 範囲条件の開始位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *startKey)
 範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicate *predicate, const int64_t *startKey)
 範囲条件の開始位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *startKey)
 範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *startKey)
 範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 範囲条件の終了位置とするロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *finishKey, GSType keyType)
 範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicate *predicate, const GSChar *finishKey)
 範囲条件の終了位置とするSTRING型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicate *predicate, const int32_t *finishKey)
 範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicate *predicate, const int64_t *finishKey)
 範囲条件の終了位置とするLONG型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicate *predicate, const GSTimestamp *finishKey)
 範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *finishKey)
 範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicate *predicate, GSRowKey *keyObj)
 個別条件の要素の一つとするロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicate *predicate, const GSValue *key, GSType keyType)
 個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicate *predicate, const GSChar *key)
 個別条件の要素の一つとするSTRING型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicate *predicate, int32_t key)
 個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicate *predicate, int64_t key)
 個別条件の要素の一つとするLONG型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicate *predicate, GSTimestamp key)
 個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicate *predicate, const GSPreciseTimestamp *key)
 個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSRowKeyPredicateTag GSRowKeyPredicate
+
+ +

ロウキーの合致条件を表します。

+
gsGetMultipleContainerRowsにおける取得条件を構成するために使用できます。
+
条件の種別として、範囲条件と個別条件の2つの種別があります。両方の種別の条件を共に指定することはできません。条件の内容を何も指定しない場合、対象とするすべてのロウキーに合致することを表します。
+
Since
1.5
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
+
+ +

個別条件の要素の一つとするロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj個別条件の要素の一つとするロウキー
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByInteger (GSRowKeyPredicatepredicate,
int32_t key 
)
+
+ +

個別条件の要素の一つとするINTEGER型ロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByLong (GSRowKeyPredicatepredicate,
int64_t key 
)
+
+ +

個別条件の要素の一つとするLONG型ロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampkey 
)
+
+ +

個別条件の要素の一つとする高精度のTIMESTAMP型ロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByString (GSRowKeyPredicatepredicate,
const GSCharkey 
)
+
+ +

個別条件の要素の一つとするSTRING型ロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyByTimestamp (GSRowKeyPredicatepredicate,
GSTimestamp key 
)
+
+ +

個別条件の要素の一つとする通常精度のTIMESTAMP型ロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキーの値
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAddPredicateKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuekey,
GSType keyType 
)
+
+ +

個別条件の要素の一つとする、単一カラムのロウキーの値を追加します。

+
追加された値と同一の値のロウキーは合致するものとみなされるようになります。
+
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]key個別条件の要素の一つとするロウキー
[in]keyType個別条件の要素の一つとするロウキーの値の型
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • ポインタ型引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowKeyPredicate (GSRowKeyPredicate ** predicate)
+
+ +

指定のGSRowKeyPredicateインスタンスを解放します。

+
Parameters
+ + +
[in,out]predicateクローズ対象のGSRowKeyPredicateインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowKeyPredicateインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctGeneralKeys (GSRowKeyPredicatepredicate,
GSRowKey *const ** keyObjList,
size_t * size 
)
+
+ +

個別条件を構成するロウキーの集合を取得します。

+
Attention
ロウキーの列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObjList個別条件を構成するロウキーの集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** keyList,
size_t * size 
)
+
+ +

個別条件を構成するINTEGER型ロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsLong (GSRowKeyPredicatepredicate,
const int64_t ** keyList,
size_t * size 
)
+
+ +

個別条件を構成するLONG型ロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** keyList,
size_t * size 
)
+
+ +

個別条件を構成する高精度のTIMESTAMP型ロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsString (GSRowKeyPredicatepredicate,
const GSChar *const ** keyList,
size_t * size 
)
+
+ +

個別条件を構成するSTRING型ロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** keyList,
size_t * size 
)
+
+ +

個別条件を構成する通常精度のTIMESTAMP型ロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateDistinctKeysGeneral (GSRowKeyPredicatepredicate,
const GSValue ** keyList,
size_t * size 
)
+
+ +

個別条件を構成する、単一カラムのロウキーの値の集合を取得します。

+
Attention
値ならびにその列を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyList個別条件を構成するロウキーの値の集合を構成する配列のアドレスを格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
[out]size個別条件を構成するロウキーの値の集合の要素数を格納するための変数へのポインタ値。個別条件が設定されていない場合は0が格納されます。実行結果としてGS_RESULT_OK以外が返される場合、0が格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 複合ロウキーについての合致条件が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishGeneralKey (GSRowKeyPredicatepredicate,
GSRowKey ** keyObj 
)
+
+ +

範囲条件の終了位置とするロウキーの値を取得します。

+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObj終了位置とするロウキーとして新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** finishKey 
)
+
+ +

範囲条件の終了位置とするINTEGER型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsLong (GSRowKeyPredicatepredicate,
const int64_t ** finishKey 
)
+
+ +

範囲条件の終了位置とするLONG型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** finishKey 
)
+
+ +

範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsString (GSRowKeyPredicatepredicate,
const GSChar ** finishKey 
)
+
+ +

範囲条件の終了位置とするSTRING型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** finishKey 
)
+
+ +

範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateFinishKeyGeneral (GSRowKeyPredicatepredicate,
const GSValue ** finishKey 
)
+
+ +

範囲条件の終了位置とする、単一カラムのロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]finishKey終了位置とするロウキーの値を格納するための変数へのポインタ値。終了位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 複合ロウキーについての合致条件が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeySchema (GSRowKeyPredicatepredicate,
GSContainerInfoinfo 
)
+
+ +

合致条件の評価対象とするロウキーのスキーマを取得します。

+
この合致条件の作成に用いられた情報に、ロウキー以外のカラム情報やスキーマ以外のコンテナ情報が含まれていたとしても、返却されるスキーマ情報には含まれません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]infoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateKeyType (GSRowKeyPredicatepredicate,
GSTypekeyType 
)
+
+ +

合致条件の評価対象とするロウキーの型を取得します。

+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyType合致条件の評価対象とするロウキーの型を格納するための変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartGeneralKey (GSRowKeyPredicatepredicate,
GSRowKey ** keyObj 
)
+
+ +

範囲条件の開始位置とするロウキーを取得します。

+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]keyObj開始位置とするロウキーとして新たに作成されるGSRowKeyインスタンスを格納するための、ポインタ変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsInteger (GSRowKeyPredicatepredicate,
const int32_t ** startKey 
)
+
+ +

範囲条件の開始位置とするINTEGER型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsLong (GSRowKeyPredicatepredicate,
const int64_t ** startKey 
)
+
+ +

範囲条件の開始位置とするLONG型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestamp ** startKey 
)
+
+ +

範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsString (GSRowKeyPredicatepredicate,
const GSChar ** startKey 
)
+
+ +

範囲条件の開始位置とするSTRING型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyAsTimestamp (GSRowKeyPredicatepredicate,
const GSTimestamp ** startKey 
)
+
+ +

範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 引数にNULLが指定された場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetPredicateStartKeyGeneral (GSRowKeyPredicatepredicate,
const GSValue ** startKey 
)
+
+ +

範囲条件の開始位置とする、単一カラムのロウキーの値を取得します。

+
Attention
値を格納する領域を確保するために、指定のGSRowKeyPredicateと関係するGSGridStoreインスタンス上で管理される一時的なメモリ領域を使用する場合があります。この領域は、指定のGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[out]startKey開始位置とするロウキーの値を格納するための変数へのポインタ値。開始位置が設定されていない場合はNULLが格納されます。実行結果としてGS_RESULT_OK以外が返される場合、NULLが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 複合ロウキーについての合致条件が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
+
+ +

範囲条件の終了位置とするロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のロウキーまたはその型を含む複合ロウキーのように、大小関係が定義されていないロウキーの場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj終了位置とするロウキー。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByInteger (GSRowKeyPredicatepredicate,
const int32_t * finishKey 
)
+
+ +

範囲条件の終了位置とするINTEGER型ロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByLong (GSRowKeyPredicatepredicate,
const int64_t * finishKey 
)
+
+ +

範囲条件の終了位置とするLONG型ロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampfinishKey 
)
+
+ +

範囲条件の終了位置とする高精度のTIMESTAMP型ロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByString (GSRowKeyPredicatepredicate,
const GSCharfinishKey 
)
+
+ +

範囲条件の終了位置とするSTRING型ロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型では大小関係が定義されていないため、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyByTimestamp (GSRowKeyPredicatepredicate,
const GSTimestampfinishKey 
)
+
+ +

範囲条件の終了位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateFinishKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuefinishKey,
GSType keyType 
)
+
+ +

範囲条件の終了位置とする、単一カラムのロウキーの値を設定します。

+
設定された値より大きな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]finishKey終了位置とするロウキーの値。NULLの場合、設定が解除されます
[in]keyType終了位置とするロウキーの値の型
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartGeneralKey (GSRowKeyPredicatepredicate,
GSRowKeykeyObj 
)
+
+ +

範囲条件の開始位置とするロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のロウキーまたはその型を含む複合ロウキーのように、大小関係が定義されていないロウキーの場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]keyObj開始位置とするロウキー。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByInteger (GSRowKeyPredicatepredicate,
const int32_t * startKey 
)
+
+ +

範囲条件の開始位置とするINTEGER型ロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByLong (GSRowKeyPredicatepredicate,
const int64_t * startKey 
)
+
+ +

範囲条件の開始位置とするLONG型ロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByPreciseTimestamp (GSRowKeyPredicatepredicate,
const GSPreciseTimestampstartKey 
)
+
+ +

範囲条件の開始位置とする高精度のTIMESTAMP型ロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByString (GSRowKeyPredicatepredicate,
const GSCharstartKey 
)
+
+ +

範囲条件の開始位置とするSTRING型ロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型では大小関係が定義されていないため、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyByTimestamp (GSRowKeyPredicatepredicate,
const GSTimestampstartKey 
)
+
+ +

範囲条件の開始位置とする通常精度のTIMESTAMP型ロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Parameters
+ + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型・精度種別が合致条件の評価対象とするロウキーのものと異なる場合
  • +
+
+
Since
1.5
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsSetPredicateStartKeyGeneral (GSRowKeyPredicatepredicate,
const GSValuestartKey,
GSType keyType 
)
+
+ +

範囲条件の開始位置とする、単一カラムのロウキーの値を設定します。

+
設定された値より小さな値のロウキーは合致しないものとみなされるようになります。
+
STRING型のように大小関係の定義されていない型の場合、条件として設定はできるものの、実際の判定に用いることはできません。
+
Attention
指定ロウキーの値とその型との対応が一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]predicate処理対象のGSRowKeyPredicate
[in]startKey開始位置とするロウキーの値。NULLの場合、設定が解除されます
[in]keyType開始位置とするロウキーの値の型
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • predicate引数にNULLが指定された場合
  • +
  • 個別条件がすでに設定されていた場合
  • +
  • 期待した型が合致条件の評価対象とするロウキーの型と異なる場合
  • +
+
+
Since
1.5
+ +
+
+
+
+
+
GSRowSet
+
+
+ + + + + +

+Classes

struct  GSQueryAnalysisEntryTag
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
+ + + + +

+Macros

+#define GS_QUERY_ANALYSIS_ENTRY_INITIALIZER   { 0, 0, NULL, NULL, NULL, NULL }
 GSQueryAnalysisEntryの初期化子です。
 
+ + + + + + + + + +

+Typedefs

typedef struct GSRowSetTag GSRowSet
 クエリ実行より求めたロウの集合を管理します。More...
 
typedef GSEnum GSRowSetType
 
typedef struct
+GSQueryAnalysisEntryTag 
GSQueryAnalysisEntry
 クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。More...
 
+ + + + +

+Enumerations

enum  GSRowSetTypeTag { GS_ROW_SET_CONTAINER_ROWS, +GS_ROW_SET_AGGREGATION_RESULT, +GS_ROW_SET_QUERY_ANALYSIS + }
 GSRowSetから取り出すことのできる内容の種別です。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet **rowSet)
 指定のGSRowSetインスタンスを解放します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSet *rowSet)
 現在のカーソル位置のロウを削除します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSet *rowSet, void *rowObj)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSet *rowSet, GSAggregationResult **aggregationResult)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSet *rowSet, GSQueryAnalysisEntry *queryAnalysis)
 ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。More...
 
GS_DLL_PUBLIC GSRowSetType
+GS_API_CALL 
gsGetRowSetType (GSRowSet *rowSet)
 ロウ集合の種別を取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSet *rowSet, GSContainerInfo *schemaInfo, GSBool *exists)
 このロウ集合に対応するスキーマを取得します。More...
 
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSet *rowSet)
 ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSet *rowSet)
 現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSet *rowSet, const void *rowObj)
 現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSQueryAnalysisEntryTag GSQueryAnalysisEntry
+
+ +

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。

+
TQLのEXPLAIN文ならびEXPLAIN ANALYZE文の実行結果を保持するために使用します。1つの実行結果は、このエントリの列により表現されます。
+ +
+
+ +
+
+ + + + +
typedef struct GSRowSetTag GSRowSet
+
+ +

クエリ実行より求めたロウの集合を管理します。

+
ロウ単位・ロウフィールド単位での操作機能を持ち、対象とするロウを指し示すためのカーソル状態を保持します。初期状態のカーソルは、ロウ集合の先頭より手前に位置しています。
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSRowSetType
+
+
See Also
GSRowSetTypeTag
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSRowSetTypeTag
+
+ +

GSRowSetから取り出すことのできる内容の種別です。

+ + + + +
Enumerator
GS_ROW_SET_CONTAINER_ROWS  +

クエリ実行対象のコンテナと対応する型のロウデータからなるGSRowSetであることを示します。

+
GS_ROW_SET_AGGREGATION_RESULT  +

集計演算からなるGSRowSetであることを示します。

+
See Also
GSAggregationResult
+
GS_ROW_SET_QUERY_ANALYSIS  +

EXPLAIN文ならびEXPLAIN ANALYZE文の実行結果エントリからなるGSRowSetであることを示します。

+
See Also
GSQueryAnalysisEntry
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC void GS_API_CALL gsCloseRowSet (GSRowSet ** rowSet)
+
+ +

指定のGSRowSetインスタンスを解放します。

+
Parameters
+ + +
[in,out]rowSetクローズ対象のGSRowSetインスタンスを指しているポインタ変数へのポインタ値。クローズすると、ポインタ変数にNULLが設定されます。以後、解放したGSRowSetインスタンスにアクセスしてはなりません。ポインタ値またはポインタ変数の値がNULLの場合は、クローズ処理を行いません。
+
+
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsDeleteCurrentRow (GSRowSetrowSet)
+
+ +

現在のカーソル位置のロウを削除します。

+
ロックを有効にして取得したGSRowSetに対してのみ使用できます。また、gsDeleteRowと同様、コンテナの種別ならびに設定によっては、さらに制限が設けられています。
+
Parameters
+ + +
[in]rowSet処理対象のGSRowSet
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • +
  • 対象位置のロウが存在しない場合
  • +
  • ロックを有効にせずに取得したGSRowSetに対して呼び出された場合
  • +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextAggregation (GSRowSetrowSet,
GSAggregationResult ** aggregationResult 
)
+
+ +

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にある集計結果を取得します。

+
Parameters
+ + + +
[in]rowSet処理対象のGSRowSet
[out]aggregationResult集計結果をGSAggregationResultとして格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のロウ集合の種別がGS_ROW_SET_AGGREGATION_RESULT以外の場合
  • +
  • 対象位置の集計結果が存在しない場合
  • +
  • 引数にNULLが指定された場合
  • +
  • 対応するGSContainerのクローズ後に呼び出された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextQueryAnalysis (GSRowSetrowSet,
GSQueryAnalysisEntryqueryAnalysis 
)
+
+ +

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるクエリ解析結果エントリを取得します。

+
Parameters
+ + + +
[in]rowSet処理対象のGSRowSet
[out]queryAnalysisクエリ解析結果エントリの内容を格納するためのGSQueryAnalysisEntry。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、GS_QUERY_ANALYSIS_ENTRY_INITIALIZERと同一の内容の初期値が格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のロウ集合の種別がGS_ROW_SET_QUERY_ANALYSIS以外の場合
  • +
  • 対象位置のエントリが存在しない場合
  • +
  • 引数にNULLが指定された場合
  • +
  • 対応するGSContainerのクローズ後に呼び出された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetNextRow (GSRowSetrowSet,
void * rowObj 
)
+
+ +

ロウ集合内の後続のロウにカーソル移動し、移動後の位置にあるロウオブジェクトを取得します。

+
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の続きを行う場合があります。
+
Attention
対応するGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSRowSetと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + +
[in]rowSet処理対象のGSRowSet
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • +
  • 対象位置のロウが存在しない場合
  • +
  • 引数にNULLが指定された場合
  • +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • 対応するGSContainerのクローズ後に呼び出された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowSetSchema (GSRowSetrowSet,
GSContainerInfoschemaInfo,
GSBoolexists 
)
+
+ +

このロウ集合に対応するスキーマを取得します。

+
ロウキーの有無を含むカラムレイアウトにする情報のみが設定されたGSContainerInfoが求まります。コンテナ名、コンテナ種別、索引設定、時系列構成オプションなどその他のコンテナ情報は含まれません。
+
このロウ集合の種別がGS_ROW_SET_AGGREGATION_RESULTであり、かつ、1件もロウを含まない場合、現バージョンではスキーマを取得しません。
+
Parameters
+ + + + +
[in]rowSet処理対象のGSRowSet
[out]schemaInfoスキーマ情報を格納するためのGSContainerInfoへのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_CONTAINER_INFO_INITIALIZERと同一の内容の初期値が格納されます。
[out]exists取得可能なスキーマが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • exists引数にNULLが指定された場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC int32_t GS_API_CALL gsGetRowSetSize (GSRowSetrowSet)
+
+ +

ロウ集合のサイズ、すなわちロウ集合作成時点におけるロウの数を返します。

+
GS_FETCH_PARTIAL_EXECUTIONが有効に設定されていた場合、クエリ実行処理の進行状況によらず、結果を求めることはできません。
+
Parameters
+ + +
[in]rowSet処理対象のGSRowSet
+
+
+
Returns
ロウ集合のサイズ。ただし、rowSetNULLが指定された場合、またはオプション設定の影響によりロウの数を取得できない場合は-1
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSRowSetType GS_API_CALL gsGetRowSetType (GSRowSetrowSet)
+
+ +

ロウ集合の種別を取得します。

+
ロウ集合の種別に応じて、それぞれ次の取得機能が使用できます。 + + + + + + + + +
ロウ集合の種別使用できる取得機能
GS_ROW_SET_CONTAINER_ROWS gsGetNextRow
GS_ROW_SET_AGGREGATION_RESULT gsGetNextAggregation
GS_ROW_SET_QUERY_ANALYSIS gsGetNextQueryAnalysis
+
+
Parameters
+ + +
[in]rowSet処理対象のGSRowSet
+
+
+
Returns
ロウ集合の種別。ただし、rowSetNULLが指定された場合は-1
+ +
+
+ +
+
+ + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsHasNextRow (GSRowSetrowSet)
+
+ +

現在のカーソル位置を基準として、ロウ集合内に後続のロウが存在するかどうかを返します。

+
Parameters
+ + +
[in]rowSet処理対象のGSRowSet
+
+
+
Returns
後続のロウが存在するかどうか。ただし、rowSetNULLが指定された場合はGS_FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsUpdateCurrentRow (GSRowSetrowSet,
const void * rowObj 
)
+
+ +

現在のカーソル位置のロウについて、指定のロウオブジェクトを使用してロウキー以外の値を更新します。

+
Attention
対応するGSContainerにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
ロックを有効にして取得したGSRowSetに対してのみ使用できます。また、gsPutRowと同様、コンテナの種別ならびに設定によっては、さらに制限が設けられています。
+
Parameters
+ + + +
[in]rowSet処理対象のGSRowSet
[in]rowObj更新するロウの内容と対応するロウオブジェクト。ロウキーの内容は無視されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のロウ集合の種別がGS_ROW_SET_CONTAINER_ROWS以外の場合
  • +
  • 対象位置のロウが存在しない場合
  • +
  • ロックを有効にせずに取得したGSRowSetに対して呼び出された場合
  • +
  • この処理または関連するトランザクションのタイムアウト、対応するコンテナの削除もしくはスキーマ変更、接続障害が発生した場合、または対応するコンテナのクローズ後に呼び出された場合。また、指定のロウオブジェクト内のロウキー以外のフィールドについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+
+
+
+
GSTimeSeries
+
+
+ + + + + + + + +

+Classes

struct  GSColumnCompressionTag
 特定のカラムの圧縮設定を表します。More...
 
struct  GSTimeSeriesPropertiesTag
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
+ + + + + + + +

+Macros

+#define GS_COLUMN_COMPRESSION_INITIALIZER   { NULL, GS_FALSE, 0, 0, 0 }
 GSColumnCompressionの初期化子です。
 
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
 GSTimeSeriesPropertiesの初期化子です。More...
 
+ + + + + + + + + + + + + + + + + + +

+Typedefs

typedef GSContainer GSTimeSeries
 時刻をロウキーとする、時系列処理に特化したコンテナです。More...
 
typedef GSEnum GSAggregation
 
typedef GSEnum GSInterpolationMode
 
typedef GSEnum GSTimeOperator
 
typedef GSEnum GSCompressionMethod
 
typedef struct
+GSColumnCompressionTag 
GSColumnCompression
 特定のカラムの圧縮設定を表します。More...
 
typedef struct
+GSTimeSeriesPropertiesTag 
GSTimeSeriesProperties
 時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。More...
 
+ + + + + + + + + + + + + +

+Enumerations

enum  GSAggregationTag {
+  GS_AGGREGATION_MINIMUM, +GS_AGGREGATION_MAXIMUM, +GS_AGGREGATION_TOTAL, +GS_AGGREGATION_AVERAGE, +
+  GS_AGGREGATION_VARIANCE, +GS_AGGREGATION_STANDARD_DEVIATION, +GS_AGGREGATION_COUNT, +GS_AGGREGATION_WEIGHTED_AVERAGE +
+ }
 ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。More...
 
enum  GSInterpolationModeTag { GS_INTERPOLATION_LINEAR_OR_PREVIOUS, +GS_INTERPOLATION_EMPTY + }
 ロウの補間方法の種別を表します。More...
 
enum  GSTimeOperatorTag { GS_TIME_OPERATOR_PREVIOUS, +GS_TIME_OPERATOR_PREVIOUS_ONLY, +GS_TIME_OPERATOR_NEXT, +GS_TIME_OPERATOR_NEXT_ONLY + }
 GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。More...
 
enum  GSCompressionMethodTag { GS_COMPRESSION_NO, +GS_COMPRESSION_SS, +GS_COMPRESSION_HI + }
 圧縮方式の種別を表します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *column, GSAggregation aggregation, GSAggregationResult **aggregationResult)
 開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeries *timeSeries, const void *rowObj, GSBool *exists)
 GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeries *timeSeries, GSTimestamp base, GSTimeOperator timeOp, void *rowObj, GSBool *exists)
 指定の時刻を基準として、関係する1つのロウを取得します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeries *timeSeries, GSTimestamp base, const GSChar *column, void *rowObj, GSBool *exists)
 指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, GSQuery **query)
 開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeries *timeSeries, const GSTimestamp *start, const GSTimestamp *end, GSQueryOrder order, GSQuery **query)
 開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。More...
 
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeries *timeSeries, GSTimestamp start, GSTimestamp end, const GSChar *const *columnSet, size_t columnCount, GSInterpolationMode mode, int32_t interval, GSTimeUnit intervalUnit, GSQuery **query)
 特定範囲のロウ集合をサンプリングするクエリを作成します。More...
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GS_TIME_SERIES_PROPERTIES_INITIALIZER
+
+ +

GSTimeSeriesPropertiesの初期化子です。

+
ロウの有効期限ならびに圧縮ロウの間引き連続制限は無効、時系列圧縮方式は無圧縮に設定されます。
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef GSEnum GSAggregation
+
+
See Also
GSAggregationTag
+ +
+
+ +
+
+ + + + +
typedef struct GSColumnCompressionTag GSColumnCompression
+
+ +

特定のカラムの圧縮設定を表します。

+
時系列を対象とした誤差あり間引き圧縮のカラム別設定に使用します。
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSCompressionMethod
+
+
+ +
+
+ + + + +
typedef GSEnum GSInterpolationMode
+
+
+ +
+
+ + + + +
typedef GSEnum GSTimeOperator
+
+
See Also
GSTimeOperatorTag
+ +
+
+ +
+
+ + + + +
typedef GSContainer GSTimeSeries
+
+ +

時刻をロウキーとする、時系列処理に特化したコンテナです。

+
一般的に、範囲取得や集計演算といった処理は、GSCollectionよりも効率的な実装が選択されます。
+
ロウ操作については、GSCollectionと異なり一部制限が設けられています。GSTimeSeriesPropertiesに基づき圧縮オプションが設定されている場合、次のロウ操作を行えません。
    +
  • 指定ロウの更新
  • +
  • 指定ロウの削除
  • +
  • 指定時刻より新しい時刻のロウが存在する場合の、ロウの新規作成
  • +
+
+
gsQueryもしくはgsGetMultipleContainerRowsなどより複数のロウの内容を一度に取得する場合、特に指定がなければ、返却されるロウの順序はロウキーの時刻を基準としてGS_ORDER_ASCENDING相当の順序に整列されます。
+
ロック粒度は、1つ以上のロウ集合をひとまとまりとする内部格納単位となります。したがって、特定ロウについてロックする際、そのロウが属する内部格納単位上の他のロウも同時にロックしようとします。
+ +
+
+ +
+
+ +

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。

+
カラム名の表記、もしくは、個別に圧縮設定できるカラム数の上限などの内容の妥当性について、必ずしも検査するとは限りません。
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSAggregationTag
+
+ +

ロウ集合またはその特定のカラムに対する、集計演算の方法を示します。

+
現バージョンでは、GSTimeSeriesに対してのみ使用できます。
+
重み付きの演算の場合、キーの値に基づき重み付け値を決定します。GSTimeSeriesに対する重み付きの演算の場合、前後それぞれの時刻のロウとの中間時刻間の期間を特定の単位で換算したものを、重み付け値として使用します。ただし、前後いずれかの時刻のロウのみが存在しない場合は、存在しないロウの代わりに重み付け対象のロウを用いて求めた重み付け値を使用します。前後いずれの時刻のロウも存在しない場合は、重み付け値として1 (単位は前後いずれかのロウが存在する場合と同一)を使用します。
+
演算の内部処理にてオーバーフローが発生した場合、浮動小数点数型では負または正の無限大、整数型では未定義の値が求まります。また、浮動小数点数型にて演算対象に非数(NaN)が含まれていた場合、非数が求まります。
+ + + + + + + + + +
Enumerator
GS_AGGREGATION_MINIMUM  +

最小値を求める演算です。

+
大小比較できる型、すなわち数値型や時刻型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムと同一の型となります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_MAXIMUM  +

最大値を求める演算です。

+
大小比較できる型、すなわち数値型や時刻型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムと同一の型となります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_TOTAL  +

合計を求める演算です。

+
数値型のカラムに対してのみ使用できます。演算結果の型は、対象のカラムが整数型の場合LONG、浮動小数点型の場合DOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_AVERAGE  +

平均を求める演算です。

+
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_VARIANCE  +

分散を求める演算です。

+
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_STANDARD_DEVIATION  +

標準偏差を求める演算です。

+
数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
GS_AGGREGATION_COUNT  +

標本数、すなわちロウ数を求める演算です。

+
任意のカラムに対して使用できます。演算結果の型は常にLONGとなります。対象となるロウが1つも存在しない場合、演算結果の値は0となります。
+
GS_AGGREGATION_WEIGHTED_AVERAGE  +

重み付きで平均を求める演算です。

+
各標本値と重み付け値との積の合計を、各重み付け値の合計で割ることにより求めます。重み付け値の計算方法は、GSAggregationTagの説明を参照してください。
+
この演算は、数値型のカラムに対してのみ使用できます。演算結果の型は常にDOUBLEとなります。対象となるロウが1つも存在しない場合、演算結果は設定されません。
+
+ +
+
+ +
+
+ + + + +
enum GSCompressionMethodTag
+
+ +

圧縮方式の種別を表します。

+
時系列圧縮設定を行う際に使用します。
+ + + + +
Enumerator
GS_COMPRESSION_NO  +

無圧縮であることを示します。

+
GS_COMPRESSION_SS  +

誤差なし間引き圧縮方式であることを示します。

+
誤差なし間引き圧縮では、直前及び直後に登録したロウと同じデータを持つロウは省かれます。省かれたデータはinterpolateやsample処理の際に、誤差を発生することなく復元されます。
+
GS_COMPRESSION_HI  +

誤差あり間引き圧縮方式であることを示します。

+
誤差あり間引き圧縮では、前回まで及び直後に登録したデータと同じ傾斜を表すロウは省かれます。同じ傾斜かを判定する条件はユーザが指定できます。指定されたカラムが条件を満たし、それ以外のカラムの値が前回のデータと同じ場合のみ省かれます。省かれたデータはinterpolateやsample処理の際に、指定された誤差の範囲内で復元されます。
+
+ +
+
+ +
+
+ + + + +
enum GSInterpolationModeTag
+
+ +

ロウの補間方法の種別を表します。

+
時系列ロウの補間機能で使用されます。
+ + + +
Enumerator
GS_INTERPOLATION_LINEAR_OR_PREVIOUS  +

カラムに応じて線形補間または直前ロウの値による補間を行うことを示します。

+
補間機能にて指定されたカラムについては、補間対象時刻の前後時刻のロウの値により線形補間を行います。対象とするカラムの型は数値型でなければなりません。
+
補間機能にて特に指定されていないカラムについては、補間対象時刻と隣接する直前の時刻のロウの値を補間値として使用します。対象とするカラムの型に制限はありません。
+
GS_INTERPOLATION_EMPTY  +

空の値を補間値として用いることを示します。

+
ロウキーを除くすべてのロウフィールドについて、GSContainerにて定義されている空の値を補間値として用いることを示します。
+
+ +
+
+ +
+
+ + + + +
enum GSTimeOperatorTag
+
+ +

GSTimeSeriesのキー時刻に基づく、ロウの特定方法を表します。

+
別途指定する時刻と組み合わせることで、最も近い時刻のキーを持つロウなどを特定できます。該当するロウが存在しない場合の扱いは、この列挙型を使用するそれぞれの機能により異なります。
+ + + + + +
Enumerator
GS_TIME_OPERATOR_PREVIOUS  +

指定時刻と同一またはより前の時刻のロウのうち、最も新しいものを求めます。

+
GS_TIME_OPERATOR_PREVIOUS_ONLY  +

指定より前の時刻のロウのうち、最も新しいものを求めます。

+
GS_TIME_OPERATOR_NEXT  +

指定時刻同一またはより後の時刻のロウのうち、最も古いものを求めます。

+
GS_TIME_OPERATOR_NEXT_ONLY  +

指定時刻より後の時刻のロウのうち、最も古いものを求めます。

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAggregateTimeSeries (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
const GSCharcolumn,
GSAggregation aggregation,
GSAggregationResult ** aggregationResult 
)
+
+ +

開始・終了時刻を指定して、ロウ集合またはその特定のカラムに対し集計演算を行います。

+
columnaggregation次第で無視されることがあります。演算対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
+
Parameters
+ + + + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[in]column集計対象のカラム名。合計演算のように、特定のカラムを対象としない場合はNULL
[in]aggregation集計方法
[out]aggregationResult集計結果をGSAggregationResultとして格納するためのポインタ変数へのポインタ値。対象時系列の内容と集計方法によっては、NULLが設定されることもあります。詳細はGSAggregationの定義を参照してください。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別が時系列ではない場合
  • +
  • 指定の演算方法で許可されていない型のカラムを指定した場合
  • +
  • 対応する名前のカラムが存在しない場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsAppendTimeSeriesRow (GSTimeSeriestimeSeries,
const void * rowObj,
GSBoolexists 
)
+
+ +

GridDB上の現在時刻をロウキーとして、ロウを新規作成または更新します。

+
GridDB上の現在時刻に相当するTIMESTAMP値をロウキーとする点を除き、gsPutRowと同様に振る舞います。指定のロウオブジェクト内のロウキーは無視されます。
+
圧縮オプションが設定された状態の時系列に対しては、GridDB上の現在時刻より新しい時刻のロウが存在しない場合のみ使用できます。最も新しい時刻を持つ既存ロウの時刻が現在時刻と一致する場合、何も変更は行わず既存ロウの内容を保持します。
+
手動コミットモードの場合、対象のロウがロックされます。また、内部格納単位が同一の他のロウもロックされます。
+
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
Parameters
+ + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]rowObj新規作成または更新するロウの内容と対応するロウオブジェクト
[out]existsGridDB上の現在時刻と一致するロウが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定の時系列について圧縮オプションが設定されており、現在時刻より新しい時刻のロウが存在した場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値がロウオブジェクトに含まれていた場合
  • +
  • exists以外の引数にNULLが指定された場合。また、指定のロウオブジェクトについて、文字列など可変長サイズのデータへのポインタ値にNULLが含まれていた場合
  • +
+
+
See Also
gsPutRow
+
+GSTimeSeriesPropertiesTag::compressionMethod
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsGetRowByBaseTime (GSTimeSeriestimeSeries,
GSTimestamp base,
GSTimeOperator timeOp,
void * rowObj,
GSBoolexists 
)
+
+ +

指定の時刻を基準として、関係する1つのロウを取得します。

+
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSTimeSeriesと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]base基準となる時刻
[in]timeOp取得方法
[out]rowObj取得対象のロウの内容を格納するためのロウオブジェクト。取得対象のロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists条件に一致するロウが存在したかどうかを格納するためのブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値が基準時刻として指定された場合
  • +
  • exists以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsInterpolateTimeSeriesRow (GSTimeSeriestimeSeries,
GSTimestamp base,
const GSCharcolumn,
void * rowObj,
GSBoolexists 
)
+
+ +

指定時刻に相当するロウオブジェクトについて、線形補間などを行い生成します。

+
一致する時系列ロウの指定のカラムの値、もしくは、前後時刻のロウの指定カラムの値を線形補間して得られた値を基にロウオブジェクトを生成します。前後時刻のロウの少なくともいずれか、もしくは、一致するロウが存在しない場合は生成されません。
+
補間対象として指定できるカラムの型は、数値型のみです。指定のカラムならびにロウキー以外のフィールドには、指定時刻と同一またはより前の時刻のロウのうち、最も新しい時刻を持つロウのフィールドの値が設定されます。
+
Attention
指定のGSTimeSeriesにバインドされたロウオブジェクトの型と指定のロウオブジェクトの型とが一致しない場合、この処理の動作は未定義です。アクセス違反により実行プロセスが異常終了する可能性があります。
+
+文字列や配列などの可変長のデータを格納するために、指定のGSTimeSeriesと対応するGSGridStoreインスタンス上で管理される、一時的なメモリ領域を使用します。この領域は、対応するGSGridStoreもしくはその関連リソースに対し、この関数もしくは同様に一時的なメモリ領域を使用する関数が再び実行されるまで有効です。無効になった領域にアクセスしようとした場合の動作は未定義です。
+
Parameters
+ + + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]base基準となる時刻
[in]column線形補間対象のカラム
[out]rowObj生成結果を格納するためのロウオブジェクト。生成のために必要とするロウが存在しない場合、ロウオブジェクトの内容は何も変更されません。実行結果としてGS_RESULT_OK以外が返される場合、ロウオブジェクトのフィールドのうち一部またはすべてが変更されることがあります。
[out]exists生成のために必要とするロウが存在したかどうかを格納するための、ブール型変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、GS_FALSEが格納されます。ポインタ値がNULLの場合、この格納処理が省略されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 対応する名前のカラムが存在しない場合。また、サポートされていない型のカラムが指定された場合
  • +
  • この処理またはトランザクションのタイムアウト、指定のコンテナの削除もしくはスキーマ変更、接続障害が発生した場合
  • +
  • サポート範囲外の値が基準時刻として指定された場合
  • +
  • exists以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesOrderedRange (GSTimeSeriestimeSeries,
const GSTimestampstart,
const GSTimestampend,
GSQueryOrder order,
GSQuery ** query 
)
+
+ +

開始時刻・終了時刻・順序を指定して、特定範囲のロウ集合を求めるクエリを作成します。

+
取得対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
+
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
+
Parameters
+ + + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻またはNULLNULLの場合、指定の時系列上の最も古いロウの時刻が開始時刻として指定されたものとみなします。
[in]end終了時刻またはNULLNULLの場合、指定の時系列上の最も新しいロウの時刻が終了時刻として指定されたものとみなします。
[in]order取得するロウ集合の時刻順序。GS_ORDER_ASCENDINGの場合は古い時刻から新しい時刻の順、GS_ORDER_DESCENDINGの場合は新しい時刻から古い時刻の順となります。
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが設定されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別が時系列ではない場合
  • +
  • startend以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesRange (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
GSQuery ** query 
)
+
+ +

開始時刻・終了時刻を指定して、特定範囲のロウ集合を求めるクエリを作成します。

+
取得対象には、開始・終了時刻と合致する境界上のロウも含まれます。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。要求するロウ集合は昇順、すなわち古い時刻から新しい時刻の順となります。
+
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることもできます。
+
Parameters
+ + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが設定されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別が時系列ではない場合
  • +
  • ポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSResult GS_API_CALL gsQueryByTimeSeriesSampling (GSTimeSeriestimeSeries,
GSTimestamp start,
GSTimestamp end,
const GSChar *const * columnSet,
size_t columnCount,
GSInterpolationMode mode,
int32_t interval,
GSTimeUnit intervalUnit,
GSQuery ** query 
)
+
+ +

特定範囲のロウ集合をサンプリングするクエリを作成します。

+
サンプリング対象の時刻は、開始時刻に対し非負整数倍のサンプリング間隔を加えた時刻のうち、終了時刻と同じかそれ以前のもののみです。終了時刻より新しい開始時刻を指定した場合、すべてのロウが対象外となります。
+
作成したクエリを実行すると、各サンプリング位置の時刻と一致するロウが存在する場合は該当ロウの値を、存在しない場合はcolumnSetmode引数の指定に従い補間された値を使用しロウ集合を生成します。個別の補間方法については、GSInterpolationModeの定義を参照してください。
+
補間のために参照する必要のあるロウが存在しない場合、該当するサンプリング時刻のロウは生成されず、該当箇所の数だけ結果件数が減少します。サンプリング間隔をより短く設定すると、補間方法次第では異なるサンプリング時刻であっても同一のロウの内容が使用される可能性が高まります。
+
gsFetchを通じてロウ集合を求める際、更新用ロックのオプションを有効にすることはできません。
+
Parameters
+ + + + + + + + + + +
[in]timeSeries処理対象のGSTimeSeries
[in]start開始時刻
[in]end終了時刻
[in]columnSetmodeに基づき特定の補間処理を適用するカラムの名前の集合。文字列ポインタの配列より構成されます。空集合の場合は、適用対象のカラムを何も指定しないことを示します。NULLの場合は、空集合を指定した場合と同様です。
[in]columnCountmodeに基づき特定の補間処理を適用するカラムの個数
[in]mode補間方法
[in]intervalサンプリング間隔。0および負の値は指定できません
[in]intervalUnitサンプリング間隔の時間単位。GS_TIME_UNIT_YEARGS_TIME_UNIT_MONTHは指定できません
[out]queryGSQueryインスタンスを格納するためのポインタ変数へのポインタ値。実行結果としてGS_RESULT_OK以外が返される場合、このポインタ値がNULL以外の値であれば、対応するポインタ変数にNULLが格納されます。
+
+
+
Returns
実行結果のコード番号。次の場合、GS_RESULT_OK以外の値を返します。
    +
  • 指定のコンテナの種別が時系列ではない場合
  • +
  • columnSet以外のポインタ型引数にNULLが指定された場合
  • +
+
+ +
+
+
+
+
+
GSTimestamp
+
+
+ + + + + + + + + + + +

+Classes

struct  GSPreciseTimestampTag
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
struct  GSTimeZoneTag
 タイムゾーン情報を表します。More...
 
struct  GSTimestampFormatOptionTag
 日時フォーマットに関するオプション情報を表します。More...
 
+ + + + + + + + + + + + + + + + + + + +

+Macros

#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
 GSPreciseTimestampの初期化子です。More...
 
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
 GSTimeZoneの初期化子です。More...
 
#define GS_TIMESTAMP_DEFAULT   0
 時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。More...
 
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
 GSTimestampFormatOptionの初期化子です。More...
 
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
 TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
 GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。More...
 
+ + + + + + + + + + + + + + + +

+Typedefs

typedef int64_t GSTimestamp
 GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。More...
 
typedef struct
+GSPreciseTimestampTag 
GSPreciseTimestamp
 GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。More...
 
typedef GSEnum GSTimeUnit
 
typedef struct GSTimeZoneTag GSTimeZone
 タイムゾーン情報を表します。More...
 
typedef struct
+GSTimestampFormatOptionTag 
GSTimestampFormatOption
 日時フォーマットに関するオプション情報を表します。More...
 
+ + + + +

+Enumerations

enum  GSTimeUnitTag {
+  GS_TIME_UNIT_YEAR, +GS_TIME_UNIT_MONTH, +GS_TIME_UNIT_DAY, +GS_TIME_UNIT_HOUR, +
+  GS_TIME_UNIT_MINUTE, +GS_TIME_UNIT_SECOND, +GS_TIME_UNIT_MILLISECOND +
+ }
 時系列処理で用いる時間の単位を示します。More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

GS_DLL_PUBLIC GSTimestamp
+GS_API_CALL 
gsCurrentTime ()
 現在時刻を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit)
 GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamp *timestamp, int64_t field, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。More...
 
GS_STATIC_HEADER_FUNC_SPECIFIER
+GSTimestamp 
gsAddTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit)
 時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC GSTimestamp
+GS_API_CALL 
gsAddZonedTime (GSTimestamp timestamp, int64_t amount, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、時刻に一定の値を加算します。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit)
 二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1, GSTimestamp timestamp2, GSTimeUnit timeUnit, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp, GSChar *strBuf, size_t bufSize, const GSTimeZone *zone)
 指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamp *timestamp, GSChar *strBuf, size_t bufSize, const GSTimestampFormatOption *option)
 指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSChar *str, GSTimestamp *timestamp)
 TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSChar *str, GSPreciseTimestamp *timestamp, const GSTimestampFormatOption *option)
 通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。More...
 
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZone *zone, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を取得します。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZone *zone, int64_t offset, GSTimeUnit timeUnit)
 指定のタイムゾーンのオフセット値を設定します。More...
 
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZone *zone, GSChar *strBuf, size_t bufSize)
 TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。More...
 
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSChar *str, GSTimeZone *zone)
 TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。More...
 
+

Detailed Description

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GS_PRECISE_TIMESTAMP_INITIALIZER   { 0, 0 }
+
+ +

GSPreciseTimestampの初期化子です。

+
Since
5.3
+ +
+
+ +
+
+ + + + +
#define GS_TIME_STRING_SIZE_MAX   GS_INTERNAL_TIME_STRING_SIZE_MAX
+
+ +

TIMESTAMP型値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。

+
See Also
gsFormatTime
+ +
+
+ +
+
+ + + + +
#define GS_TIME_ZONE_INITIALIZER   { { 0 } }
+
+ +

GSTimeZoneの初期化子です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
#define GS_TIME_ZONE_STRING_SIZE_MAX   8
+
+ +

GSTimeZone値の文字列表現を格納するための文字列バッファにおける、終端文字を含むバイト単位での最大サイズです。

+
See Also
gsFormatTimeZone
+
Since
4.3
+ +
+
+ +
+
+ + + + +
#define GS_TIMESAMP_FORMAT_OPTION_INITIALIZER   { NULL }
+
+ +

GSTimestampFormatOptionの初期化子です。

+
Since
5.3
+ +
+
+ +
+
+ + + + +
#define GS_TIMESTAMP_DEFAULT   0
+
+ +

時刻1970-01-01T00:00:00Zに相当するGSTimestamp値です。

+
Since
4.3
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct GSPreciseTimestampTag GSPreciseTimestamp
+
+ +

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。

+
See Also
GS_TYPE_OPTION_TIME_MICRO
+
+GS_TYPE_OPTION_TIME_NANO
+
Since
5.3
+ +
+
+ +
+
+ + + + +
typedef int64_t GSTimestamp
+
+ +

GridDB上の通常精度のTIMESTAMP型と対応する時刻型です。ミリ秒単位のUNIX時刻を保持します。

+
See Also
GS_TYPE_OPTION_TIME_MILLI
+ +
+
+ +
+
+ +

日時フォーマットに関するオプション情報を表します。

+
Note
使用する関数によっては、オプション情報を一部またはすべて参照しない場合があります。
+
Since
5.3
+ +
+
+ +
+
+ + + + +
typedef GSEnum GSTimeUnit
+
+
See Also
GSTimeUnitTag
+ +
+
+ +
+
+ + + + +
typedef struct GSTimeZoneTag GSTimeZone
+
+ +

タイムゾーン情報を表します。

+
Since
4.3
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum GSTimeUnitTag
+
+ +

時系列処理で用いる時間の単位を示します。

+ + + + + + + + +
Enumerator
GS_TIME_UNIT_YEAR  +

年の単位です。

+
GS_TIME_UNIT_MONTH  +

月の単位です。

+
GS_TIME_UNIT_DAY  +

日の単位です。

+
GS_TIME_UNIT_HOUR  +

時の単位です。

+
GS_TIME_UNIT_MINUTE  +

分の単位です。

+
GS_TIME_UNIT_SECOND  +

秒の単位です。

+
GS_TIME_UNIT_MILLISECOND  +

ミリ秒の単位です。

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_STATIC_HEADER_FUNC_SPECIFIER GSTimestamp gsAddTime (GSTimestamp timestamp,
int64_t amount,
GSTimeUnit timeUnit 
)
+
+ +

時刻に一定の値を加算します。

+
amountに負の値を指定することで、指定の時刻より前の時刻を求めることができます。
+
現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。
+
Parameters
+ + + + +
[in]timestamp対象とする時刻
[in]amount加算する値
[in]timeUnit加算する値の単位
+
+
+
Returns
加算後のGSTimestamp。次の場合は-1
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
  • 加算結果がサポート範囲外の時刻となりうる場合
  • +
+
+
See Also
gsAddZonedTime
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSTimestamp GS_API_CALL gsAddZonedTime (GSTimestamp timestamp,
int64_t amount,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
+
+ +

指定のタイムゾーン設定を用い、時刻に一定の値を加算します。

+
amountに負の値を指定することで、指定の時刻より前の時刻を求めることができます。
+
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
+
Parameters
+ + + + + +
[in]timestamp対象とする時刻
[in]amount加算する値
[in]timeUnit加算する値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsAddTimeと同様に振る舞います。
+
+
+
Returns
加算後のGSTimestamp。次の場合は-1
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
  • 加算結果がサポート範囲外の時刻となりうる場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
See Also
gsAddZonedTime
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + +
GS_DLL_PUBLIC GSTimestamp GS_API_CALL gsCurrentTime ()
+
+ +

現在時刻を求めます。

+
Note
取得分解能はLinux/Windowsともにおおむね1msです(Windows上ではV5.8より)。
+
Returns
現在時刻に相当するGSTimestamp。内部のシステムコールに失敗した場合、-1
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatPreciseTime (const GSPreciseTimestamptimestamp,
GSCharstrBuf,
size_t bufSize,
const GSTimestampFormatOptionoption 
)
+
+ +

指定のオプション設定を用い、高精度のTIMESTAMP値表記に従って時刻の文字列表現を求めます。

+
Parameters
+ + + + + +
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
[in]optionオプション設定情報へのポインタ値。NULLの場合はgsFormatTimeと同様に振る舞います。タイムゾーンが指定された場合、指定のタイムゾーン設定を用います。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    +
  • サポート範囲外の時刻が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
See Also
GS_TIME_STRING_SIZE_MAX
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatTime (GSTimestamp timestamp,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

TQLのTIMESTAMP値表記に従い、時刻の文字列表現を求めます。

+
現バージョンでは、変換の際に使用されるタイムゾーンはUTCです。
+
Parameters
+ + + + +
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    +
  • サポート範囲外の時刻が指定された場合
  • +
+
+
See Also
GS_TIME_STRING_SIZE_MAX
+
+gsFormatZonedTime
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t gsFormatTimeZone (const GSTimeZonezone,
GSCharstrBuf,
size_t bufSize 
)
+
+ +

TQLのTIMESTAMP値表記に従い、タイムゾーン情報の文字列表現を求めます。

+
Parameters
+ + + + +
[out]zone対象とするタイムゾーン情報
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
See Also
GS_TIME_ZONE_STRING_SIZE_MAX
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC size_t GS_API_CALL gsFormatZonedTime (GSTimestamp timestamp,
GSCharstrBuf,
size_t bufSize,
const GSTimeZonezone 
)
+
+ +

指定のタイムゾーン設定を用い、TQLのTIMESTAMP値表記に従って時刻の文字列表現を求めます。

+
Parameters
+ + + + + +
[in]timestamp対象とする時刻
[out]strBuf出力先の文字列バッファ。bufSizeを超えない範囲で終端文字を含む文字列を出力します。bufSize1以上であり、出力に必要とするサイズに満たない場合、終端文字をバッファ範囲内の最終位置に設定し、残りの領域に可能な限り文字列を出力します。strBufNULLまたはbufSize0の場合、文字列は出力されません。
[in]bufSize出力先の文字列バッファについての、終端文字を含んだバイト単位のサイズ
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsFormatTimeと同様に振る舞います。
+
+
+
Returns
終端文字を含んだ、出力に必要とする文字列バッファのバイト単位の最低サイズ。ただし次の場合は、空文字列のサイズに相当する1
    +
  • サポート範囲外の時刻が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
See Also
GS_TIME_STRING_SIZE_MAX
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeDiff (GSTimestamp timestamp1,
GSTimestamp timestamp2,
GSTimeUnit timeUnit 
)
+
+ +

二つの時刻間の差分値を求めます。

+
timestamp1に対して、timestamp2で減じた値を求めます。
+
現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。
+
Parameters
+ + + + +
[in]timestamp1対象とする一つ目の時刻
[in]timestamp2対象とする二つ目の時刻
[in]timeUnit求める差分値の単位
+
+
+
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
+
+
See Also
gsGetZonedTimeDiff
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeField (GSTimestamp timestamp,
GSTimeUnit timeUnit 
)
+
+ +

GSTimestampを構成するフィールド値の一つを取得します。

+
現バージョンでは、取得の際に使用されるタイムゾーンはUTCです。
+
Parameters
+ + + +
[in]timestamp対象とする時刻
[in]timeUnit取得するフィールド値の単位
+
+
+
Returns
指定の条件に合致するフィールド値。次の場合は-1
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
+
+
See Also
gsGetZonedTimeField
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetTimeZoneOffset (const GSTimeZonezone,
GSTimeUnit timeUnit 
)
+
+ +

指定のタイムゾーンのオフセット値を取得します。

+
Parameters
+ + + +
[in]zone対象とするタイムゾーン情報
[in]timeUnit求めるオフセット値の単位
+
+
+
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    +
  • サポート外の単位が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeDiff (GSTimestamp timestamp1,
GSTimestamp timestamp2,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
+
+ +

指定のタイムゾーン設定を用い、二つの時刻間の差分値を求めます。

+
timestamp1に対して、timestamp2で減じた値を求めます。
+
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
+
Parameters
+ + + + + +
[in]timestamp1対象とする一つ目の時刻
[in]timestamp2対象とする二つ目の時刻
[in]timeUnit求める差分値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsGetTimeDiffと同様に振る舞います。
+
+
+
Returns
差分値。次の場合はint64_t型の値として取りうる範囲の最小値
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC int64_t GS_API_CALL gsGetZonedTimeField (GSTimestamp timestamp,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
+
+ +

指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを取得します。

+
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
+
Parameters
+ + + + +
[in]timestamp対象とする時刻
[in]timeUnit取得するフィールド値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsGetTimeFieldと同様に振る舞います。
+
+
+
Returns
指定の条件に合致するフィールド値。次の場合は-1
    +
  • サポート範囲外の時刻や単位が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsParsePreciseTime (const GSCharstr,
GSPreciseTimestamptimestamp,
const GSTimestampFormatOptionoption 
)
+
+ +

通常精度もしくは高精度のTIMESTAMP値表記に従い、指定の文字列に対応するGSPreciseTimestamp値を求めます。

+
TIMESTAMP値表記に含まれるタイムゾーン設定を使用します。
+
Parameters
+ + + + +
[in]str対象とする時刻を表す文字列
[out]timestamp変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限り-1が格納されます。
[in]optionオプション設定情報へのポインタ値。現バージョンでは、使用されません。
+
+
+
Returns
GSTimestamp値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    +
  • 時刻の文字列表記と一致しない文字列が指定された場合
  • +
  • サポート範囲外の時刻が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
5.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTime (const GSCharstr,
GSTimestamptimestamp 
)
+
+ +

TQLのTIMESTAMP値表記に従い、指定の文字列に対応するGSTimestamp値を求めます。

+
TIMESTAMP値表記に含まれるタイムゾーン設定を使用します。
+
Parameters
+ + + +
[in]str対象とする時刻を表す文字列
[out]timestamp変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限り-1が格納されます。
+
+
+
Returns
GSTimestamp値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    +
  • 時刻の文字列表記と一致しない文字列が指定された場合
  • +
  • サポート範囲外の時刻が指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsParseTimeZone (const GSCharstr,
GSTimeZonezone 
)
+
+ +

TQLのTIMESTAMP値表記に従い、指定のタイムゾーン文字列に対応するGSTimeZone値を求めます。

+
Parameters
+ + + +
[in]str対象とするタイムゾーン文字列
[out]zone変換した値を格納するための変数へのポインタ値。戻り値がGS_FALSEとなる場合、このポインタ値がNULLではない限りGS_TIME_ZONE_INITIALIZERと同一の内容の初期値が格納されます。
+
+
+
Returns
GSTimeZone値への変換に成功し結果を格納できたかどうか。次の場合、GS_FALSEを返します。
    +
  • タイムゾーン情報の文字列表記と一致しない文字列が指定された場合
  • +
  • サポート範囲外のタイムゾーンが指定された場合
  • +
  • 引数にNULLが指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeField (GSTimestamptimestamp,
int64_t field,
GSTimeUnit timeUnit 
)
+
+ +

GSTimestampを構成するフィールド値の一つを設定します。

+
現バージョンでは、設定の際に使用されるタイムゾーンはUTCです。
+
Parameters
+ + + + +
[in,out]timestamp対象とする時刻
[in]field設定するフィールド値
[in]timeUnit設定するフィールド値の単位
+
+
+
Returns
フィールド値を設定できたかどうか。次の場合はGS_FALSE
    +
  • timestamp引数にNULLが指定された場合
  • +
  • サポート範囲外の時刻や単位、フィールド値が指定された場合
  • +
+
+
See Also
gsGetZonedTimeField
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetTimeZoneOffset (GSTimeZonezone,
int64_t offset,
GSTimeUnit timeUnit 
)
+
+ +

指定のタイムゾーンのオフセット値を設定します。

+
Parameters
+ + + + +
[out]zone対象とするタイムゾーン情報
[in]offsetオフセット値
[in]timeUnitオフセット値の単位
+
+
+
Returns
オフセット値を設定できたかどうか。次の場合はGS_FALSE
    +
  • zone引数にNULLが指定された場合
  • +
  • サポート範囲外のオフセット値や単位が指定された場合
  • +
+
+
Since
4.3
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GS_DLL_PUBLIC GSBool GS_API_CALL gsSetZonedTimeField (GSTimestamptimestamp,
int64_t field,
GSTimeUnit timeUnit,
const GSTimeZonezone 
)
+
+ +

指定のタイムゾーン設定を用い、GSTimestampを構成するフィールド値の一つを設定します。

+
演算に用いる時間の単位によっては、タイムゾーン設定の影響を受けない場合があります。
+
Parameters
+ + + + + +
[in,out]timestamp対象とする時刻
[in]field設定するフィールド値
[in]timeUnit設定するフィールド値の単位
[in]zoneタイムゾーン設定情報へのポインタ値。NULLの場合はgsSetTimeFieldと同様に振る舞います。
+
+
+
Returns
フィールド値を設定できたかどうか。次の場合はGS_FALSE
    +
  • timestamp引数にNULLが指定された場合
  • +
  • サポート範囲外の時刻や単位、フィールド値が指定された場合
  • +
  • 初期化誤りなど正しくないタイムゾーン情報が指定されたことを検知した場合
  • +
+
+
Since
4.3
+ +
+
+
+
+
+
GSBindingTag Struct Reference
+
+
+ +

ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。 More...

+ +

#include <gridstore.h>

+

Detailed Description

+

ロウオブジェクトとロウデータとの対応関係を表すバインディング情報です。

+
+ +
+
+
+
GSBlobTag Struct Reference
+
+
+ +

ロウオブジェクトにおけるBLOB構造を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + +

+Public Attributes

+size_t size
 BLOBデータのサイズです。
 
+const void * data
 BLOBデータの格納先ポインタです。
 
+

Detailed Description

+

ロウオブジェクトにおけるBLOB構造を表します。

+
+ +
+
+
+
GSCollectionPropertiesTag Struct Reference
+
+
+ +

コレクションの構成オプションを表します。 More...

+ +

#include <gridstore.h>

+

Detailed Description

+

コレクションの構成オプションを表します。

+
Note
現バージョンでは使用されておりません。
+
+ +
+
+
+
GSColumnCompressionTag Struct Reference
+
+
+ +

特定のカラムの圧縮設定を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + +

+Public Attributes

const GSCharcolumnName
 設定対象のカラムの名前です。More...
 
GSBool relative
 間引き圧縮における判定基準値として、相対誤差を適用するかどうかを示します。More...
 
double rate
 相対誤差あり間引き圧縮における、値がとりうる範囲を基準とした誤差境界値の比率です。More...
 
double span
 相対誤差あり間引き圧縮における、値がとりうる範囲の最大値と最小値の差です。More...
 
double width
 絶対誤差あり間引き圧縮における、誤差境界の幅です。More...
 
+

Detailed Description

+

特定のカラムの圧縮設定を表します。

+
時系列を対象とした誤差あり間引き圧縮のカラム別設定に使用します。
+

Member Data Documentation

+ +
+
+ + + + +
const GSChar* GSColumnCompressionTag::columnName
+
+ +

設定対象のカラムの名前です。

+
間引き圧縮方式(GS_COMPRESSION_HI)を選択し、次の型のカラムに対して指定した場合のみ、カラム別の圧縮設定として使用できます。 +
+ +
+
+ +
+
+ + + + +
double GSColumnCompressionTag::rate
+
+ +

相対誤差あり間引き圧縮における、値がとりうる範囲を基準とした誤差境界値の比率です。

+
値がとりうる範囲は、spanメンバと対応します。また、比率は0以上1以下でなければ、時系列を作成することができません。
+
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
+ +
+
+ +
+
+ + + + +
GSBool GSColumnCompressionTag::relative
+
+ +

間引き圧縮における判定基準値として、相対誤差を適用するかどうかを示します。

+
間引き圧縮方式(GS_COMPRESSION_HI)以外を選択した場合は無視されます。
+ +
+
+ +
+
+ + + + +
double GSColumnCompressionTag::span
+
+ +

相対誤差あり間引き圧縮における、値がとりうる範囲の最大値と最小値の差です。

+
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
+ +
+
+ +
+
+ + + + +
double GSColumnCompressionTag::width
+
+ +

絶対誤差あり間引き圧縮における、誤差境界の幅です。

+
誤差あり間引き圧縮方式(GS_COMPRESSION_HI)において、判定基準値として相対誤差を選択(GSColumnCompressionTag::relativeGS_TRUEを指定)した場合のみ有効です。
+ +
+
+ + +
+
+
+
GSColumnInfoTag Struct Reference
+
+
+ +

カラムのスキーマに関する情報を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + +

+Public Attributes

+const GSCharname
 カラム名です。
 
+GSType type
 カラムの型、すなわち、カラムに対応する各フィールド値の型です。
 
GSIndexTypeFlags indexTypeFlags
 索引種別を示すフラグ値のビット和です。More...
 
GSTypeOption options
 カラムに関するオプション設定を示すフラグ値のビット和です。More...
 
+

Detailed Description

+

カラムのスキーマに関する情報を表します。

+

Member Data Documentation

+ +
+
+ + + + +
GSIndexTypeFlags GSColumnInfoTag::indexTypeFlags
+
+ +

索引種別を示すフラグ値のビット和です。

+
GS_INDEX_FLAG_DEFAULTは索引種別が未設定であることを示します。
+
Since
1.5
+ +
+
+ +
+
+ + + + +
GSTypeOption GSColumnInfoTag::options
+
+ +

カラムに関するオプション設定を示すフラグ値のビット和です。

+
現バージョンでは、NOT NULL制約または初期値に関連する、以下のフラグ値のみを含めることができます。 +
+
Since
3.5
+ +
+
+ + +
+
+
+
GSContainerInfoTag Struct Reference
+
+
+ +

特定のコンテナに関する情報を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const GSCharname
 コンテナ名です。
 
+GSContainerType type
 コンテナの種別です。
 
+size_t columnCount
 カラム数です。
 
const GSColumnInfocolumnInfoList
 カラム情報のリストです。More...
 
GSBool rowKeyAssigned
 ロウキーに対応するカラムが設定されているかどうかを示す真偽値です。More...
 
GSBool columnOrderIgnorable
 カラム順序が無視できるかどうかを示す真偽値です。More...
 
const GSTimeSeriesPropertiestimeSeriesProperties
 時系列構成オプションです。More...
 
size_t triggerInfoCount
 トリガ情報のエントリ数です。More...
 
const GSTriggerInfotriggerInfoList
 トリガ情報の一覧です。More...
 
const GSChardataAffinity
 データ配置最適化のために用いられる、コンテナ間の類似性(データアフィニティ)を示す文字列です。More...
 
size_t indexInfoCount
 索引情報のエントリ数です。More...
 
const GSIndexInfoindexInfoList
 索引情報の一覧です。More...
 
size_t rowKeyColumnCount
 ロウキーを構成するカラム列についての、カラム数です。More...
 
const int32_t * rowKeyColumnList
 ロウキーを構成するカラム列についての、0から始まるカラム番号一覧です。More...
 
+

Detailed Description

+

特定のコンテナに関する情報を表します。

+

Member Data Documentation

+ +
+
+ + + + +
const GSColumnInfo* GSContainerInfoTag::columnInfoList
+
+ +

カラム情報のリストです。

+
カラム数と同一の長さのGSColumnInfoの配列です。各要素はカラムの定義順と対応します。
+ +
+
+ +
+
+ + + + +
GSBool GSContainerInfoTag::columnOrderIgnorable
+
+ +

カラム順序が無視できるかどうかを示す真偽値です。

+
See Also
gsPutContainerGeneral
+
Since
1.5
+ +
+
+ +
+
+ + + + +
const GSChar* GSContainerInfoTag::dataAffinity
+
+ +

データ配置最適化のために用いられる、コンテナ間の類似性(データアフィニティ)を示す文字列です。

+
同一クラスタノード上の同一管理領域内に格納されるコンテナについて、配置先を最適化するために使用されます。
+
データアフィニティが同一のコンテナの内容は、近接する配置先に格納される可能性が高くなります。また、解放期限が設定され、近接する配置先に格納された時系列について、登録頻度などの変更パターンが類似している場合、解放期限に到達したロウの解放処理が効率的に行われる可能性が高くなります。
+
コンテナの定義において使用できるデータアフィニティ文字列の文字種や長さには制限があります。具体的には、GridDB機能リファレンスを参照してください。ただし、文字列を設定した時点で必ずしもすべての制限を検査するとは限りません。特に記載のない限り、データアフィニティ文字列が使用される操作では、ASCIIの大文字・小文字表記の違いが区別されます。
+
値がNULLの場合、標準設定を優先することを示します。
+
Since
2.1
+ +
+
+ +
+
+ + + + +
size_t GSContainerInfoTag::indexInfoCount
+
+ +

索引情報のエントリ数です。

+
Since
3.5
+ +
+
+ +
+
+ + + + +
const GSIndexInfo* GSContainerInfoTag::indexInfoList
+
+ +

索引情報の一覧です。

+
Since
3.5
+ +
+
+ +
+
+ + + + +
GSBool GSContainerInfoTag::rowKeyAssigned
+
+ +

ロウキーに対応するカラムが設定されているかどうかを示す真偽値です。

+
現バージョンでは、コンテナが単一カラムからなるロウキーを持つ場合、対応するカラム番号は0となります。
+
任意のロウキー構成を扱うには、GSContainerInfo::rowKeyColumnListを使用します。
+ +
+
+ +
+
+ + + + +
size_t GSContainerInfoTag::rowKeyColumnCount
+
+ +

ロウキーを構成するカラム列についての、カラム数です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const int32_t* GSContainerInfoTag::rowKeyColumnList
+
+ +

ロウキーを構成するカラム列についての、0から始まるカラム番号一覧です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const GSTimeSeriesProperties* GSContainerInfoTag::timeSeriesProperties
+
+ +

時系列構成オプションです。

+
Since
1.5
+ +
+
+ +
+
+ + + + +
size_t GSContainerInfoTag::triggerInfoCount
+
+ +

トリガ情報のエントリ数です。

+
Since
1.5
+ +
+
+ +
+
+ + + + +
const GSTriggerInfo* GSContainerInfoTag::triggerInfoList
+
+ +

トリガ情報の一覧です。

+
Since
1.5
+ +
+
+ + +
+
+
+
GSContainerRowEntryTag Struct Reference
+
+
+ +

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + +

+Public Attributes

+const GSCharcontainerName
 コンテナ名です。
 
void *const * rowList
 ロウオブジェクトへのアドレスのリストです。More...
 
+size_t rowCount
 ロウオブジェクトの個数です。
 
+

Detailed Description

+

複数のコンテナの複数のロウを一括して操作する場合に用いる、コンテナ別のロウ内容エントリです。

+
Since
1.5
+

Member Data Documentation

+ +
+
+ + + + +
void* const* GSContainerRowEntryTag::rowList
+
+ +

ロウオブジェクトへのアドレスのリストです。

+
現バージョンでは、GSRowのアドレスのみを要素として含めることができます。
+ +
+
+ + +
+
+
+
GSIndexInfoTag Struct Reference
+
+
+ +

索引の設定内容を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

const GSCharname
 索引名です。More...
 
GSIndexTypeFlags type
 索引種別を示すフラグ値です。More...
 
int32_t column
 索引に対応するカラムのカラム番号です。More...
 
const GSCharcolumnName
 索引に対応するカラムのカラム名です。More...
 
size_t columnCount
 索引に対応する任意個数のカラムのカラム番号の列のカラム数です。More...
 
const int32_t * columnList
 索引に対応する任意個数のカラムのカラム番号の列です。More...
 
size_t columnNameCount
 索引に対応する任意個数のカラムのカラム名の列のカラム数です。More...
 
const GSChar *const * columnNameList
 索引に対応する任意個数のカラムのカラム名の列です。More...
 
+

Detailed Description

+

索引の設定内容を表します。

+
Since
3.5
+

Member Data Documentation

+ +
+
+ + + + +
int32_t GSIndexInfoTag::column
+
+ +

索引に対応するカラムのカラム番号です。

+
単一のカラムからなるカラム番号の列が設定された場合と同等であるとみなされます。
+
Since
3.5
+ +
+
+ +
+
+ + + + +
size_t GSIndexInfoTag::columnCount
+
+ +

索引に対応する任意個数のカラムのカラム番号の列のカラム数です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const int32_t* GSIndexInfoTag::columnList
+
+ +

索引に対応する任意個数のカラムのカラム番号の列です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const GSChar* GSIndexInfoTag::columnName
+
+ +

索引に対応するカラムのカラム名です。

+
単一のカラムからなるカラム名の列が設定された場合と同等であるとみなされます。
+
Since
3.5
+ +
+
+ +
+
+ + + + +
size_t GSIndexInfoTag::columnNameCount
+
+ +

索引に対応する任意個数のカラムのカラム名の列のカラム数です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const GSChar* const* GSIndexInfoTag::columnNameList
+
+ +

索引に対応する任意個数のカラムのカラム名の列です。

+
Since
4.3
+ +
+
+ +
+
+ + + + +
const GSChar* GSIndexInfoTag::name
+
+ +

索引名です。

+
Since
3.5
+ +
+
+ +
+
+ + + + +
GSIndexTypeFlags GSIndexInfoTag::type
+
+ +

索引種別を示すフラグ値です。

+
デフォルトまたは任意個数の索引種別を含めることができます。複数個の索引種別を含める場合は、各種別のフラグ値のビット和により表現します。コンテナ情報の一部として得られた索引情報では、デフォルトを除くいずれか一つの索引種別のみが設定されます。
+
Since
3.5
+ +
+
+ + +
+
+
+
GSPreciseTimestampTag Struct Reference
+
+
+ +

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + +

+Public Attributes

+GSTimestamp base
 通常精度のTIMESTAMP値を表します。
 
uint32_t nanos
 ミリ秒未満の桁の値について、ナノ秒単位で表します。More...
 
+

Detailed Description

+

GridDB上の高精度のTIMESTAMP型と対応する時刻型です。現バージョンではナノ秒単位までの時刻を保持します。

+
See Also
GS_TYPE_OPTION_TIME_MICRO
+
+GS_TYPE_OPTION_TIME_NANO
+
Since
5.3
+

Member Data Documentation

+ +
+
+ + + + +
uint32_t GSPreciseTimestampTag::nanos
+
+ +

ミリ秒未満の桁の値について、ナノ秒単位で表します。

+
有効な値の範囲は0から999999までです。
+ +
+
+ + +
+
+
+
GSPropertyEntryTag Struct Reference
+
+
+ +

プロパティの構成エントリです。 More...

+ +

#include <gridstore.h>

+ + + + + + + + +

+Public Attributes

+const GSCharname
 プロパティエントリの名前です。
 
+const GSCharvalue
 プロパティエントリの値です。
 
+

Detailed Description

+

プロパティの構成エントリです。

+
+ +
+
+
+
GSQueryAnalysisEntryTag Struct Reference
+
+
+ +

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

int32_t id
 一連のエントリ列における、このエントリの位置を示すIDです。More...
 
int32_t depth
 他のエントリとの関係を表すための、深さです。More...
 
const GSChartype
 このエントリが示す情報の種別です。More...
 
const GSCharvalueType
 このエントリが示す情報に対応付けられた値の型名です。More...
 
+const GSCharvalue
 このエントリが示す情報に対応付けられた値の文字列表現です。
 
+const GSCharstatement
 このエントリが示す情報に対応するTQL文の一部です。
 
+

Detailed Description

+

クエリプランならびにクエリ処理解析結果を構成する一連の情報の一つを示します。

+
TQLのEXPLAIN文ならびEXPLAIN ANALYZE文の実行結果を保持するために使用します。1つの実行結果は、このエントリの列により表現されます。
+

Member Data Documentation

+ +
+
+ + + + +
int32_t GSQueryAnalysisEntryTag::depth
+
+ +

他のエントリとの関係を表すための、深さです。

+
このエントリより小さな値のIDを順にたどり、このエントリの深さより1だけ浅いエントリが存在した場合、このエントリは、該当するエントリの内容をより詳しく説明するためのものであることを意味します。
+ +
+
+ +
+
+ + + + +
int32_t GSQueryAnalysisEntryTag::id
+
+ +

一連のエントリ列における、このエントリの位置を示すIDです。

+
TQLを実行した結果を受け取る場合、IDは1から順に割り当てられます。
+ +
+
+ +
+
+ + + + +
const GSChar* GSQueryAnalysisEntryTag::type
+
+ +

このエントリが示す情報の種別です。

+
実行時間といった解析結果の種別、クエリプランの構成要素の種別などを表します。
+ +
+
+ +
+
+ + + + +
const GSChar* GSQueryAnalysisEntryTag::valueType
+
+ +

このエントリが示す情報に対応付けられた値の型名です。

+
実行時間といった解析結果などに対応する値の型名です。型の名称は、TQLで定義された基本型のうち次のものです。
    +
  • STRING
  • +
  • BOOL
  • +
  • BYTE
  • +
  • SHORT
  • +
  • INTEGER
  • +
  • LONG
  • +
  • FLOAT
  • +
  • DOUBLE
  • +
+
+ +
+
+ + +
+
+
+
GSRowKeyPredicateEntryTag Struct Reference
+
+
+ +

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。 More...

+ +

#include <gridstore.h>

+ + + + + + + + +

+Public Attributes

+const GSCharcontainerName
 コンテナ名です。
 
+GSRowKeyPredicatepredicate
 コンテナのロウキーについての合致条件です。
 
+

Detailed Description

+

複数のコンテナに対する取得条件を表すための、コンテナ別の合致条件エントリです。

+
Since
1.5
+
+ +
+
+
+
GSTimeSeriesPropertiesTag Struct Reference
+
+
+ +

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

int32_t rowExpirationTime
 ロウの有効期限の基準となる経過期間です。More...
 
GSTimeUnit rowExpirationTimeUnit
 ロウの有効期限の基準とする経過時間の単位です。More...
 
int32_t compressionWindowSize
 間引き圧縮において連続して間引きされるロウの最大期間です。More...
 
GSTimeUnit compressionWindowSizeUnit
 間引き圧縮において連続して間引きされるロウの最大期間の単位です。More...
 
+GSCompressionMethod compressionMethod
 時系列圧縮方式の種別です。
 
size_t compressionListSize
 カラム別圧縮設定(compressionList)のエントリ数です。More...
 
GSColumnCompressioncompressionList
 カラム別の圧縮設定です。More...
 
int32_t expirationDivisionCount
 期限に到達したロウデータの解放単位と対応する、有効期間に対しての分割数です。More...
 
+

Detailed Description

+

時系列を新規作成または変更する際に使用される、オプションの構成情報を表します。

+
カラム名の表記、もしくは、個別に圧縮設定できるカラム数の上限などの内容の妥当性について、必ずしも検査するとは限りません。
+

Member Data Documentation

+ +
+
+ + + + +
GSColumnCompression* GSTimeSeriesPropertiesTag::compressionList
+
+ +

カラム別の圧縮設定です。

+
エントリ数が0の場合、時系列を新規作成または更新する際に無視されます。
+ +
+
+ +
+
+ + + + +
size_t GSTimeSeriesPropertiesTag::compressionListSize
+
+ +

カラム別圧縮設定(compressionList)のエントリ数です。

+
1つの時系列に対してパラメータ設定できるカラムの上限数については、GridDB機能リファレンスを参照してください。上限を超えたオプションを指定して時系列を作成することはできません。
+ +
+
+ +
+
+ + + + +
int32_t GSTimeSeriesPropertiesTag::compressionWindowSize
+
+ +

間引き圧縮において連続して間引きされるロウの最大期間です。

+
この期間が設定された時系列のロウについて、前方のロウと指定の期間以上時刻が離れていた場合、間引き圧縮として間引き可能な条件を満たしていたとしても、間引かれなくなります。
+
時系列圧縮方式としてGS_COMPRESSION_NOが設定されていた場合、この期間の設定は無視されます。
+
時系列圧縮方式としてGS_COMPRESSION_HIまたはGS_COMPRESSION_SSが設定されており、この期間として0以下の値が設定された場合、TIMESTAMP型の取りうる値の範囲全体が期間として設定されたとみなされます。
+
前方のロウと指定の期間以上時刻が離れておらず、かつ、間引き圧縮として間引き可能な条件を満たしていたとしても、格納先の内部の配置などによっては間引かれない場合があります。
+ +
+
+ +
+
+ + + + +
GSTimeUnit GSTimeSeriesPropertiesTag::compressionWindowSizeUnit
+
+ +

間引き圧縮において連続して間引きされるロウの最大期間の単位です。

+
最大期間の値が明示的に設定されていた場合、GS_TIME_UNIT_YEARまたはGS_TIME_UNIT_MONTHが設定されたオプションを指定して、時系列を作成することはできません。
+ +
+
+ +
+
+ + + + +
int32_t GSTimeSeriesPropertiesTag::expirationDivisionCount
+
+ +

期限に到達したロウデータの解放単位と対応する、有効期間に対しての分割数です。

+
分割数を設定すると、期限に到達したロウデータの管理領域を解放するための条件を制御できます。期限に到達したロウデータが分割数に相当する期間だけ集まった時点で解放しようとします。
+
分割数の上限については、GridDB機能リファレンスを参照してください。上限を超えたオプションを指定して時系列を作成することはできません。
+
値が負の場合、分割数が設定されていないことを示します。0が設定されたオプションを指定して時系列を作成することはできません。
+
ロウの有効期限の基準となる経過期間の設定がない場合、この分割数の設定は無視されます。一方、ロウの有効期限の基準となる経過期間の設定がある場合にこの分割数の設定を省略すると、作成される時系列にはGridDBクラスタ上のデフォルトの分割数が設定されます。
+
Since
2.0
+ +
+
+ +
+
+ + + + +
int32_t GSTimeSeriesPropertiesTag::rowExpirationTime
+
+ +

ロウの有効期限の基準となる経過期間です。

+
ロウの有効期限の時刻は、ロウキーの時刻から指定の経過期間を加算することで求まります。有効期限の時刻がGridDB上の現在時刻よりも古いロウは、有効期限の切れたロウとみなされます。期限切れのロウは、検索や更新といったロウ操作の対象から外れ、存在しないものとみなされます。対応するGridDB上の内部データは、随時削除されます。
+
Attention
有効期限超過の判定に使用される現在時刻は、GridDBの各ノードの実行環境に依存します。したがって、ネットワークの遅延や実行環境の時刻設定のずれなどにより、このプロセスの実行環境の現在時刻より前に期限切れ前のロウにアクセスできなくなる場合や、この現在時刻より後に期限切れロウにアクセスできる場合があります。意図しないロウの喪失を避けるために、最低限必要な期間よりも大きな値を設定することを推奨します。
+
作成済みの時系列の設定を変更することはできません。
+
値が負の場合、有効期限はないものとみなされ、明示的に削除操作を行わない限りロウが削除されなくなります。0が設定されたオプションを指定して時系列を作成することはできません。
+ +
+
+ +
+
+ + + + +
GSTimeUnit GSTimeSeriesPropertiesTag::rowExpirationTimeUnit
+
+ +

ロウの有効期限の基準とする経過時間の単位です。

+
有効期限の期間値が設定されていた場合、GS_TIME_UNIT_YEARまたはGS_TIME_UNIT_MONTHが設定されたオプションを指定して、時系列を作成することはできません。
+ +
+
+ + +
+
+
+
GSTimeZoneTag Struct Reference
+
+
+ +

タイムゾーン情報を表します。 More...

+ +

#include <gridstore.h>

+

Detailed Description

+

タイムゾーン情報を表します。

+
Since
4.3
+
+ +
+
+
+
GSTimestampFormatOptionTag Struct Reference
+
+
+ +

日時フォーマットに関するオプション情報を表します。 More...

+ +

#include <gridstore.h>

+ + + + + +

+Public Attributes

const GSTimeZonetimeZone
 日時フォーマットに用いるタイムゾーンのオプションです。More...
 
+

Detailed Description

+

日時フォーマットに関するオプション情報を表します。

+
Note
使用する関数によっては、オプション情報を一部またはすべて参照しない場合があります。
+
Since
5.3
+

Member Data Documentation

+ +
+
+ + + + +
const GSTimeZone* GSTimestampFormatOptionTag::timeZone
+
+ +

日時フォーマットに用いるタイムゾーンのオプションです。

+
NULLの場合、タイムゾーンが指定されなかったものとみなされます。
+ +
+
+ + +
+
+
+
GSTriggerInfoTag Struct Reference
+
+
+ +

トリガに関する情報を表します。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const GSCharname
 トリガ名です。
 
+GSTriggerType type
 トリガ種別です。
 
+const GSCharuri
 通知先URIです。
 
+GSTriggerEventTypeFlags eventTypeFlags
 監視対象とする更新操作種別です。
 
+const GSChar *const * columnSet
 通知対象とするカラム名の集合です。
 
+size_t columnCount
 通知対象とするカラム名の数です。
 
+const GSCharjmsDestinationType
 JMS通知で使用するJMSデスティネーション種別です。
 
+const GSCharjmsDestinationName
 JMS通知で使用するJMSデスティネーション名です。
 
+const GSCharuser
 通知先サーバに接続する際のユーザ名です。
 
+const GSCharpassword
 通知先サーバに接続する際のパスワードです。
 
+

Detailed Description

+

トリガに関する情報を表します。

+
Since
1.5
+
+ +
+
+
+
GSValueTag Union Reference
+
+
+ +

ロウフィールドに格納できるいずれかの型の値です。 More...

+ +

#include <gridstore.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const GSCharasString
 STRING型のロウフィールドに対応する値です。
 
+GSBool asBool
 BOOL型のロウフィールドに対応する値です。
 
+int8_t asByte
 BYTE型のロウフィールドに対応する値です。
 
+int16_t asShort
 SHORT型のロウフィールドに対応する値です。
 
+int32_t asInteger
 INTEGER型のロウフィールドに対応する値です。
 
+int64_t asLong
 LONG型のロウフィールドに対応する値です。
 
+float asFloat
 FLOAT型のロウフィールドに対応する値です。
 
+double asDouble
 DOUBLE型のロウフィールドに対応する値です。
 
GSTimestamp asTimestamp
 通常精度のTIMESTAMP型のロウフィールドに対応する値です。More...
 
GSPreciseTimestamp asPreciseTimestamp
 高精度のTIMESTAMP型のロウフィールドに対応する値です。More...
 
+const GSCharasGeometry
 GEOMETRY型のロウフィールドに対応する値です。
 
+GSBlob asBlob
 BLOB型のロウフィールドに対応する値です。
 
+struct {
   size_t   length
 配列の要素数です。
 
   union {
      const void *   data
 配列の要素列へのアドレスです。
 
      const GSChar *const *   asString
 STRING型配列の要素列へのアドレスです。
 
      const GSBool *   asBool
 BOOL型配列の要素列へのアドレスです。
 
      const int8_t *   asByte
 BYTE型配列の要素列へのアドレスです。
 
      const int16_t *   asShort
 SHORT型配列の要素列へのアドレスです。
 
      const int32_t *   asInteger
 INTEGER型配列の要素列へのアドレスです。
 
      const int64_t *   asLong
 LONG型配列の要素列へのアドレスです。
 
      const float *   asFloat
 FLOAT型配列の要素列へのアドレスです。
 
      const double *   asDouble
 DOUBLE型配列の要素列へのアドレスです。
 
      const GSTimestamp *   asTimestamp
 TIMESTAMP型配列の要素列へのアドレスです。
 
   }   elements
 配列の要素です。
 
asArray
 配列型のロウフィールドに対応する値です。
 
+

Detailed Description

+

ロウフィールドに格納できるいずれかの型の値です。

+
Since
1.5
+

Member Data Documentation

+ +
+
+ + + + +
GSPreciseTimestamp GSValueTag::asPreciseTimestamp
+
+ +

高精度のTIMESTAMP型のロウフィールドに対応する値です。

+
GSValueを用いてフィールド値を設定・取得する場合、値の型はGS_TYPE_PRECISE_TIMESTAMPによって識別します。
+
Since
5.3
+ +
+
+ +
+
+ + + + +
GSTimestamp GSValueTag::asTimestamp
+
+ +

通常精度のTIMESTAMP型のロウフィールドに対応する値です。

+
GSValueを用いてフィールド値を設定・取得する場合、値の型はGS_TYPE_TIMESTAMPによって識別します。
+ +
+
+ + +
+
+ + +
+ +
+ +
+

1.2 APIサンプル

+
+ + + +
+ +
+

1.2.1 基本: コレクション操作のサンプル

+
#include "gridstore.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef struct {
+	const GSChar *name;
+	GSBool status;
+	uint64_t count;
+	const int8_t *lob;
+	size_t lobSize;
+} Person;
+
+GS_STRUCT_BINDING(Person,
+	GS_STRUCT_BINDING_KEY(name, GS_TYPE_STRING)
+	GS_STRUCT_BINDING_ELEMENT(status, GS_TYPE_BOOL)
+	GS_STRUCT_BINDING_ELEMENT(count, GS_TYPE_LONG)
+	GS_STRUCT_BINDING_ARRAY(lob, lobSize, GS_TYPE_BYTE));
+
+// コレクションデータの操作
+int sample1(const char *args[5]) {
+	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
+	static const GSBool update = GS_TRUE;
+
+	GSGridStore *store;
+	GSCollection *col;
+	GSQuery *query;
+	GSRowSet *rs;
+	Person person;
+	GSResult ret;
+
+	const GSPropertyEntry props[] = {
+			{ "notificationAddress", args[0] },
+			{ "notificationPort", args[1] },
+			{ "clusterName", args[2] },
+			{ "user", args[3] },
+			{ "password", args[4] } };
+	const size_t propCount = sizeof(props) / sizeof(*props);
+
+	// GridStoreインスタンスの取得
+	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
+
+	// コレクションの作成
+	gsPutCollection(store, "col01",
+			GS_GET_STRUCT_BINDING(Person), NULL, GS_FALSE, &col);
+
+	// カラムに索引を設定
+	gsCreateIndex(col, "count", GS_INDEX_FLAG_DEFAULT);
+
+	// 自動コミットモードをオフ
+	gsSetAutoCommit(col, GS_FALSE);
+
+	// Rowのデータを用意
+	person.name = "name01";
+	person.status = GS_FALSE;
+	person.count = 1;
+	person.lob = personLob;
+	person.lobSize = sizeof(personLob);
+
+	// KV形式でRowを操作: RowKeyは"name01"
+	gsPutRow(col, NULL, &person, NULL);	// 登録
+	gsGetRowForUpdate(col, &person.name, &person, NULL);	// 取得(更新用にロック)
+	gsDeleteRow(col, &person.name, NULL);	// 削除
+
+	// KV形式でRowを操作: RowKeyは"name02"
+	gsPutRowByString(col, "name02", &person, NULL);	// 登録(RowKeyを指定)
+
+	// トランザクションの確定(ロック解除)
+	gsCommit(col);
+
+	// コレクション内のRowを検索(クエリ使用)
+	gsQuery(col, "select * where name = 'name02'", &query);
+
+	// 検索したRowの取得と更新
+	gsFetch(query, update, &rs);
+	while (gsHasNextRow(rs)) {
+		size_t i;
+
+		// 検索したRowの更新
+		gsGetNextRow(rs, &person);
+		person.count += 1;
+		ret = gsUpdateCurrentRow(rs, &person);
+		if (!GS_SUCCEEDED(ret)) break;
+
+		printf("Person:");
+		printf(" name=%s", person.name);
+		printf(" status=%s", person.status ? "true" : "false");
+		printf(" count=%d", (int) person.count);
+		printf(" lob=[");
+		for (i = 0; i < person.lobSize; i++) {
+			if (i > 0) printf(", ");
+			printf("%d", (int) person.lob[i]);
+		}
+		printf("]\n");
+	}
+
+	// トランザクションの確定
+	ret = gsCommit(col);
+
+	// リソースの解放
+	gsCloseGridStore(&store, GS_TRUE);
+
+	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+ + +
+ +
+ +
+

1.2.2 基本: 時系列操作のサンプル ― 登録・範囲取得

+
#include "gridstore.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef struct {
+	GSTimestamp timestamp;
+	GSBool active;
+	double voltage;
+} Point;
+
+GS_STRUCT_BINDING(Point,
+	GS_STRUCT_BINDING_KEY(timestamp, GS_TYPE_TIMESTAMP)
+	GS_STRUCT_BINDING_ELEMENT(active, GS_TYPE_BOOL)
+	GS_STRUCT_BINDING_ELEMENT(voltage, GS_TYPE_DOUBLE));
+
+// 時系列データの登録と範囲取得
+int sample2(const char *args[5]) {
+	GSGridStore *store;
+	GSTimeSeries *ts;
+	Point point;
+	GSTimestamp now;
+	GSTimestamp before;
+	GSQuery *query;
+	GSRowSet *rs;
+	GSResult ret = !GS_RESULT_OK;
+
+	const GSPropertyEntry props[] = {
+			{ "notificationAddress", args[0] },
+			{ "notificationPort", args[1] },
+			{ "clusterName", args[2] },
+			{ "user", args[3] },
+			{ "password", args[4] } };
+	const size_t propCount = sizeof(props) / sizeof(*props);
+
+	// GridStoreインスタンスの取得
+	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
+
+	// 時系列の作成 (既存の場合は取得のみ)
+	gsPutTimeSeries(store, "point01",
+			GS_GET_STRUCT_BINDING(Point), NULL, GS_FALSE, &ts);
+
+	// 時系列要素のデータを用意
+	point.active = GS_FALSE;
+	point.voltage = 100;
+
+	// 時系列要素の登録(グリッドストア側で時刻設定)
+	gsAppendTimeSeriesRow(ts, &point, NULL);
+
+	// 指定区間の時系列の取得: 6時間前から直近まで
+	now = gsCurrentTime();
+	before = gsAddTime(now, -6, GS_TIME_UNIT_HOUR);
+
+	gsQueryByTimeSeriesRange(ts, before, now, &query);
+	ret = gsFetch(query, GS_FALSE, &rs);
+	while (gsHasNextRow(rs)) {
+		GSChar timeStr[GS_TIME_STRING_SIZE_MAX];
+
+		ret = gsGetNextRow(rs, &point);
+		if (!GS_SUCCEEDED(ret)) break;
+
+		gsFormatTime(point.timestamp, timeStr, sizeof(timeStr));
+		printf("Time=%s", timeStr);
+		printf(" Active=%s", point.active ? "true" : "false");
+		printf(" Voltage=%.1lf\n", point.voltage);
+	}
+
+	// リソースの解放
+	gsCloseGridStore(&store, GS_TRUE);
+
+	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+ + +
+ +
+ +
+

1.2.3 基本: 時系列操作のサンプル ― 検索・集計

+
#include "gridstore.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef struct {
+	GSTimestamp timestamp;
+	GSBool active;
+	double voltage;
+} Point;
+
+GS_STRUCT_BINDING(Point,
+	GS_STRUCT_BINDING_KEY(timestamp, GS_TYPE_TIMESTAMP)
+	GS_STRUCT_BINDING_ELEMENT(active, GS_TYPE_BOOL)
+	GS_STRUCT_BINDING_ELEMENT(voltage, GS_TYPE_DOUBLE));
+
+// 時系列データの検索と集計
+int sample3(const char *args[5]) {
+	GSGridStore *store;
+	GSTimeSeries *ts;
+	GSQuery *query;
+	GSRowSet *rs;
+	GSResult ret = !GS_RESULT_OK;
+
+	// 読み取りのみなので、一貫性レベルを緩和(デフォルトはIMMEDIATE)
+	const GSPropertyEntry props[] = {
+			{ "notificationAddress", args[0] },
+			{ "notificationPort", args[1] },
+			{ "clusterName", args[2] },
+			{ "user", args[3] },
+			{ "password", args[4] },
+			{ "consistency", "EVENTUAL" } };
+	const size_t propCount = sizeof(props) / sizeof(*props);
+
+	// GridStoreインスタンスの取得
+	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
+
+	// 時系列の取得(既存の場合は取得のみ)
+	// ※sample2と同じPoint構造体を使用
+	gsGetTimeSeries(store, "point01", GS_GET_STRUCT_BINDING(Point), &ts);
+
+	// 停止中にもかかわらず電圧が基準値以上の箇所を検索
+	gsQuery(ts,
+			"select * from point01"
+			" where not active and voltage > 50", &query);
+	gsFetch(query, GS_FALSE, &rs);
+
+	while (gsHasNextRow(rs)) {
+		// 各異常ポイントについて調査
+
+		GSTimestamp hot;
+		Point hotPoint;
+		GSTimestamp start;
+		Point startPoint;
+		GSTimestamp end;
+		GSAggregationResult *avg;
+		double avgValue;
+		GSChar hotStr[GS_TIME_STRING_SIZE_MAX];
+
+		ret = gsGetNextRow(rs, &hotPoint);
+		if (!GS_SUCCEEDED(ret)) break;
+		hot = hotPoint.timestamp;
+
+		// 10分前付近のデータを取得
+		start = gsAddTime(hot, -10, GS_TIME_UNIT_MINUTE);
+		gsGetRowByBaseTime(
+				ts, start, GS_TIME_OPERATOR_NEXT, &startPoint, NULL);
+
+		// 前後10分間の平均値を計算
+		end = gsAddTime(hot, 10, GS_TIME_UNIT_MINUTE);
+		gsAggregateTimeSeries(
+				ts, start, end, "voltage", GS_AGGREGATION_AVERAGE, &avg);
+
+		ret = gsGetAggregationValueAsDouble(avg, &avgValue, NULL);
+		if (!GS_SUCCEEDED(ret)) break;
+
+		gsFormatTime(hot, hotStr, sizeof(hotStr));
+
+		printf("[Alert] %s", hotStr);
+		printf(" start=%.1lf", startPoint.voltage);
+		printf(" hot=%.1lf", hotPoint.voltage);
+		printf(" avg=%.1lf\n", avgValue);
+	}
+
+	// リソースの解放
+	gsCloseGridStore(&store, GS_TRUE);
+
+	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+ + +
+ +
+ +
+

1.2.4 応用: コレクション操作のサンプル ― コンテナ情報を用いてスキーマ定義

+
#include "gridstore.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+// コンテナ情報を用いてスキーマ定義
+int sample4(const char *args[5]) {
+	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
+	static const GSBool update = GS_TRUE;
+
+	GSGridStore *store;
+	GSContainer *container;
+	GSContainerInfo info = GS_CONTAINER_INFO_INITIALIZER;
+	GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
+	GSColumnInfo columnInfoList[4];
+	GSRow *row;
+	GSQuery *query;
+	GSRowSet *rs;
+	GSResult ret;
+
+	const GSPropertyEntry props[] = {
+			{ "notificationAddress", args[0] },
+			{ "notificationPort", args[1] },
+			{ "clusterName", args[2] },
+			{ "user", args[3] },
+			{ "password", args[4] } };
+	const size_t propCount = sizeof(props) / sizeof(*props);
+
+	// GridStoreインスタンスの取得
+	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
+
+	// コンテナ情報を作成
+	columnInfo.name = "name";
+	columnInfo.type = GS_TYPE_STRING;
+	columnInfoList[0] = columnInfo;
+
+	columnInfo.name = "status";
+	columnInfo.type = GS_TYPE_BOOL;
+	columnInfoList[1] = columnInfo;
+
+	columnInfo.name = "count";
+	columnInfo.type = GS_TYPE_LONG;
+	columnInfoList[2] = columnInfo;
+
+	columnInfo.name = "lob";
+	columnInfo.type = GS_TYPE_BYTE_ARRAY;
+	columnInfoList[3] = columnInfo;
+
+	info.type = GS_CONTAINER_COLLECTION;
+	info.name = "col01";
+	info.columnCount = sizeof(columnInfoList) / sizeof(*columnInfoList);
+	info.columnInfoList = columnInfoList;
+	info.rowKeyAssigned = GS_TRUE;
+
+	// コレクションの作成
+	gsPutContainerGeneral(store, NULL, &info, GS_FALSE, &container);
+
+	// カラムに索引を設定
+	gsCreateIndex(container, "count", GS_INDEX_FLAG_DEFAULT);
+
+	// 自動コミットモードをオフ
+	gsSetAutoCommit(container, GS_FALSE);
+
+	// Rowのデータを用意
+	{
+		const GSChar *name = "name01";
+		GSBool status = GS_FALSE;
+		int64_t count = 1;
+		const int8_t *lobData = personLob;
+		size_t lobSize = sizeof(personLob);
+
+		gsCreateRowByStore(store, &info, &row);
+		gsSetRowFieldByString(row, 0, name);
+		gsSetRowFieldByBool(row, 1, status);
+		gsSetRowFieldByLong(row, 2, count);
+		gsSetRowFieldByByteArray(row, 3, lobData, lobSize);
+	}
+
+	// KV形式でRowを操作: RowKeyは"name01"
+	gsPutRow(container, NULL, row, NULL);	// 登録
+	gsGetRowByString(container, "name01", row, update, NULL);	// 取得(更新用にロック)
+	gsDeleteRowByString(container, "name01", NULL);	// 削除
+
+	// KV形式でRowを操作: RowKeyは"name02"
+	gsPutRowByString(container, "name02", row, NULL);	// 登録(RowKeyを指定)
+
+	// 不要ロウオブジェクトの解放
+	gsCloseRow(&row);
+
+	// トランザクションの確定(ロック解除)
+	gsCommit(container);
+
+	// コレクション内のRowを検索(クエリ使用)
+	gsQuery(container, "select * where name = 'name02'", &query);
+
+	// 検索したRowの取得と更新
+	gsFetch(query, update, &rs);
+	while (gsHasNextRow(rs)) {
+		const GSChar *name;
+		GSBool status;
+		int64_t count;
+		const int8_t *lobData;
+		size_t lobSize;
+		size_t i;
+
+		gsCreateRowByContainer(container, &row);
+
+		// 検索したRowの更新
+		gsGetNextRow(rs, row);
+		gsGetRowFieldAsString(row, 0, &name);
+		gsGetRowFieldAsBool(row, 1, &status);
+		gsGetRowFieldAsLong(row, 2, &count);
+		gsGetRowFieldAsByteArray(row, 3, &lobData, &lobSize);
+		count += 1;
+		ret = gsUpdateCurrentRow(rs, row);
+		if (!GS_SUCCEEDED(ret) || name == NULL) break;
+
+		printf("Person:");
+		printf(" name=%s", name);
+		printf(" status=%s", status ? "true" : "false");
+		printf(" count=%d", (int) count);
+		printf(" lob=[");
+		for (i = 0; i < lobSize; i++) {
+			if (i > 0) {
+				printf(", ");
+			}
+			printf("%d", (int) lobData[i]);
+		}
+		printf("]\n");
+	}
+
+	// トランザクションの確定
+	ret = gsCommit(container);
+
+	// コレクションの削除
+	gsDropContainer(store, info.name);
+
+	// リソースの解放
+	gsCloseGridStore(&store, GS_TRUE);
+
+	return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+ + +
+ +
+ +
+

1.2.5 応用: コレクション操作のサンプル ― 複数コンテナ一括操作

+
#include "gridstore.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#define SAMPLE5_CONTAINER_COUNT 5
+#define SAMPLE5_ROW_COUNT 2
+
+// 複数コンテナ一括操作
+int sample5(const char *args[5]) {
+	static const int8_t personLob[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
+
+	static const GSChar *const containerNameList[SAMPLE5_CONTAINER_COUNT] = {
+			"col01", "col02", "col03", "col04", "col05"
+	};
+	static const GSChar *const keyList[SAMPLE5_ROW_COUNT] = {
+			"name01", "name02"
+	};
+
+	static const size_t containerCount = SAMPLE5_CONTAINER_COUNT;
+	static const size_t rowCount = SAMPLE5_ROW_COUNT;
+
+	GSGridStore *store;
+	GSContainer *containerList[SAMPLE5_CONTAINER_COUNT];
+	GSContainerInfo info = GS_CONTAINER_INFO_INITIALIZER;
+	GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
+	GSColumnInfo columnInfoList[4];
+	GSResult ret;
+	int failed = 0;
+	size_t i, j;
+
+	const GSPropertyEntry props[] = {
+			{ "notificationAddress", args[0] },
+			{ "notificationPort", args[1] },
+			{ "clusterName", args[2] },
+			{ "user", args[3] },
+			{ "password", args[4] } };
+	const size_t propCount = sizeof(props) / sizeof(*props);
+
+	// GridStoreインスタンスの取得
+	gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);
+
+	//コンテナ定義情報を作成
+	columnInfo.name = "name";
+	columnInfo.type = GS_TYPE_STRING;
+	columnInfoList[0] = columnInfo;
+
+	columnInfo.name = "status";
+	columnInfo.type = GS_TYPE_BOOL;
+	columnInfoList[1] = columnInfo;
+
+	columnInfo.name = "count";
+	columnInfo.type = GS_TYPE_LONG;
+	columnInfoList[2] = columnInfo;
+
+	columnInfo.name = "lob";
+	columnInfo.type = GS_TYPE_BYTE_ARRAY;
+	columnInfoList[3] = columnInfo;
+
+	info.type = GS_CONTAINER_COLLECTION;
+	info.columnCount = sizeof(columnInfoList) / sizeof(*columnInfoList);
+	info.columnInfoList = columnInfoList;
+	info.rowKeyAssigned = GS_TRUE;
+
+	// コレクションの作成
+	for (i = 0; i < containerCount; i++) {
+		const GSChar *name = containerNameList[i];
+		gsPutContainerGeneral(store, name, &info, GS_FALSE, &containerList[i]);
+	}
+
+	// 複数コレクションのRowを一括登録
+	{
+		void *allRowList[SAMPLE5_CONTAINER_COUNT][SAMPLE5_ROW_COUNT];
+		GSContainerRowEntry inEntry = GS_CONTAINER_ROW_ENTRY_INITIALIZER;
+		GSContainerRowEntry inEntryList[SAMPLE5_CONTAINER_COUNT];
+
+		GSBool status = GS_FALSE;
+		int64_t count = 1;
+		const int8_t *lobData = personLob;
+		size_t lobSize = sizeof(personLob);
+
+		for (i = 0; i < containerCount; i++) {
+			for (j = 0; j < rowCount; j++) {
+				GSRow *row;
+				const GSChar *name = keyList[j];
+
+				gsCreateRowByStore(store, &info, &row);
+				gsSetRowFieldByString(row, 0, name);
+				gsSetRowFieldByBool(row, 1, status);
+				gsSetRowFieldByLong(row, 2, count);
+				gsSetRowFieldByByteArray(row, 3, lobData, lobSize);
+				count++;
+
+				allRowList[i][j] = row;
+			}
+			inEntry.containerName = containerNameList[i];
+			inEntry.rowList = allRowList[i];
+			inEntry.rowCount = rowCount;
+			inEntryList[i] = inEntry;
+		}
+
+		ret = gsPutMultipleContainerRows(store, inEntryList, containerCount);
+		failed |= !GS_SUCCEEDED(ret);
+
+		for (i = 0; i < containerCount; i++) {
+			for (j = 0; j < rowCount; j++) {
+				GSRow *row = allRowList[i][j];
+				gsCloseRow(&row);
+			}
+		}
+	}
+
+	// 複数コレクションのRowを一括取得
+	{
+		GSRowKeyPredicateEntry predEntry =
+				GS_ROW_KEY_PREDICATE_ENTRY_INITIALIZER;
+		GSRowKeyPredicateEntry predEntryValueList[SAMPLE5_CONTAINER_COUNT];
+		const GSRowKeyPredicateEntry *predEntryList[SAMPLE5_CONTAINER_COUNT];
+		const GSContainerRowEntry *outEntryList;
+		size_t outEntryCount;
+		GSRow *allRowList[SAMPLE5_CONTAINER_COUNT][SAMPLE5_ROW_COUNT];
+
+		// 取得条件を構築
+		for (i = 0; i < containerCount; i++) {
+			GSRowKeyPredicate *predicate;
+
+			gsCreateRowKeyPredicate(store, GS_TYPE_STRING, &predicate);
+			for (j = 0; j < rowCount; j++) {
+				gsAddPredicateKeyByString(predicate, keyList[j]);
+			}
+
+			predEntry.containerName = containerNameList[i];
+			predEntry.predicate = predicate;
+			predEntryValueList[i] = predEntry;
+			predEntryList[i] = &predEntryValueList[i];
+		}
+
+		ret = gsGetMultipleContainerRows(
+				store, predEntryList, containerCount,
+				&outEntryList, &outEntryCount);
+		failed |= !GS_SUCCEEDED(ret);
+
+		// 取得結果ロウ列をコピー
+		for (i = 0; i < containerCount || i < outEntryCount; i++) {
+			GSContainerRowEntry outEntry = GS_CONTAINER_ROW_ENTRY_INITIALIZER;
+			if (i < outEntryCount) {
+				outEntry = outEntryList[i];
+			}
+			for (j = 0; j < rowCount || j < outEntry.rowCount; j++) {
+				GSRow *row = NULL;
+				if (j < outEntry.rowCount) {
+					row = (GSRow*) outEntry.rowList[j];
+				}
+				if (i < containerCount && j < rowCount) {
+					allRowList[i][j] = row;
+				}
+				else {
+					gsCloseRow(&row);
+				}
+			}
+		}
+
+		// 取得結果を出力
+		for (i = 0; i < containerCount; i++) {
+			for (j = 0; j < rowCount; j++) {
+				GSRow *row = allRowList[i][j];
+				const GSChar *name;
+				int64_t count;
+
+				gsGetRowFieldAsString(row, 0, &name);
+				gsGetRowFieldAsLong(row, 2, &count);
+
+				failed |= (name == NULL);
+				if (failed) break;
+
+				printf("Person[%d]:", (int) i);
+				printf(" name=%s", name);
+				printf(" count=%d\n", (int) count);
+
+				gsCloseRow(&row);
+			}
+			gsCloseRowKeyPredicate(&predEntryValueList[i].predicate);
+		}
+	}
+
+	// 複数コレクションのRowを一括検索(クエリ使用)
+	{
+		GSQuery *queryList[SAMPLE5_CONTAINER_COUNT];
+
+		for (i = 0; i < containerCount; i++) {
+			const GSChar *tql = "select * where count >= 0";
+			gsQuery(containerList[i], tql, &queryList[i]);
+		}
+
+		ret = gsFetchAll(store, queryList, containerCount);
+		failed |= !GS_SUCCEEDED(ret);
+
+		for (i = 0; i < containerCount; i++) {
+			GSRowSet *rs;
+			GSRow *row;
+
+			gsCreateRowByContainer(containerList[i], &row);
+			gsGetRowSet(queryList[i], &rs);
+
+			while (gsHasNextRow(rs)) {
+				const GSChar *name;
+				GSBool status;
+				int64_t count;
+				const int8_t *lobData;
+				size_t lobSize;
+
+				ret = gsGetNextRow(rs, row);
+				failed |= !GS_SUCCEEDED(ret);
+				if (failed) break;
+
+				gsGetRowFieldAsString(row, 0, &name);
+				gsGetRowFieldAsBool(row, 1, &status);
+				gsGetRowFieldAsLong(row, 2, &count);
+				gsGetRowFieldAsByteArray(row, 3, &lobData, &lobSize);
+				count += 1;
+
+				failed |= (name == NULL);
+				if (failed) break;
+
+				printf("Person[%d]:", (int) i);
+				printf(" name=%s", name);
+				printf(" status=%s", status ? "true" : "false");
+				printf(" count=%d", (int) count);
+				printf(" lob=[");
+				for (j = 0; j < lobSize; j++) {
+					if (j > 0) {
+						printf(", ");
+					}
+					printf("%d", (int) lobData[j]);
+				}
+				printf("]\n");
+			}
+
+			gsCloseRow(&row);
+			gsCloseRowSet(&rs);
+			gsCloseQuery(&queryList[i]);
+		}
+	}
+
+	// コレクションの削除
+	for (i = 0; i < containerCount; i++) {
+		const GSChar *name = containerNameList[i];
+		gsDropContainer(store, name);
+	}
+
+	// リソースの解放
+	gsCloseGridStore(&store, GS_TRUE);
+
+	return (failed ? EXIT_FAILURE : EXIT_SUCCESS);
+}
+
+ + +
+
+
+ +
+ +
+

2 付録

+
+ + + +
+ +
+

2.1 値の範囲

+
+ + +

+値の上限などの値の範囲を説明します。 +システムの制限値については、GridDB機能リファレンスを参照してください。 +

+ +
+ +
+

2.1.1 基本型の取りうる値

+
+ +

以下の基本型の取りうる値は、次の通りです。 +

+ + +
+ + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
取りうる値
ブール(BOOL)型真または偽
BYTE型-27から27-1
SHORT型-215から215-1
INTEGER型-231から231-1
LONG型-263から263-1
FLOAT型IEEE754準拠
DOUBLE型IEEE754準拠
時刻(TIMESTAMP)型西暦1970年1月1日のはじめから西暦9999年12月31日の終わりまで(UTC相当)。うるう秒は扱わない。ミリ秒、マイクロ秒、ナノ秒のいずれかの精度を設定可能。
+ + + + +
+ +

+空間(GEOMETRY)型でTQL演算に使用できる値はST_GeomFromText関数が返す任意の値です。このうちコンテナに格納できる値はQUADRATICSURFACE構造を除いたものです。 +

+

+APIを通じて基本型とマッピングされるオブジェクトの表現範囲は、上記の範囲と異なる場合があります。上記の範囲を超えた値を持つオブジェクトの内容をコンテナに格納することはできませんが、検索条件の構築など、その他操作の可否を規定するものではありません。たとえば、Java APIにて時刻型にマッピングされるjava.util.Dateオブジェクトでは、コンテナに格納できない西暦1970年より前の年の時刻も表現でき、その値をロウキーの条件としてRowKeyPredicateオブジェクトや時系列のサンプリングクエリに含めることができます。しかし、その条件でロウを取得しようとした時点でエラーが検出される可能性があります。マッピングされるオブジェクトの具体的な表現範囲は、個々のオブジェクトの型の定義を参照してください。 +

+
+
+
+ +
+ +
+

3 商標

+
+ + +
    +
  • +GridDBは日本国内における東芝デジタルソリューションズ株式会社の登録商標です。 +
  • +
  • +OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。 +
  • +
  • +その他製品名は、それぞれの所有者の商標または登録商標です。 + +

    +Copyright (c) 2023 Toshiba Digital Solutions Corporation +

  • +
+
+
+
+
+
+ + diff --git a/manuals/md_reference_feature/md_reference_feature.md b/manuals/md_reference_feature/md_reference_feature.md index ad9577f..3e3f74a 100644 --- a/manuals/md_reference_feature/md_reference_feature.md +++ b/manuals/md_reference_feature/md_reference_feature.md @@ -27,7 +27,6 @@ >- OSユーザ(gsadm)はパッケージを使ってGridDBをインストールした場合に作成されます。 >- ODBCはEnterprise Edition限定です。 - GridDBとは ========== @@ -605,6 +604,9 @@ GridDBは、ラックやアベイラビリティゾーンなどの物理的な また、障害発生からクラスタ安定状態(データ同期処理が発生する時間)になるまでの時間も若干増加する傾向がありますが、 GridDBではこれらデータ偏りや安定状態までの時間をできるだけラックゾーンアウェアネス無の場合と大きな違いがないように最適化します。 +【メモ】 +ラックゾーンアウェアネス機能はクラスタパーティションの割付規則を決定する機能であり、同様の機能を持つ、6.11.1 生成規則の指定と6.11.2 配置表の固定化指定と併用利用することができません。用途に応じていずれかを使い分けるようにしてください。 + ### 設定方法 #### クラスタ構成方法 @@ -1113,7 +1115,6 @@ GridDBの現バージョンでは、ROWKEY(PRIMARY KEY)に指定できるSTRING -   ## ビュー @@ -1886,8 +1887,7 @@ NoSQL I/Fでは、アプリケーション開発者に通知されるタイム フェイルオーバータイムアウトは、クラスタ接続時のパラメータとしてアプリケーションで指定できます。システムの要件に合わせてタイムアウト時間を設定してください。 トランザクションタイムアウト、フェイルオーバータイムアウトともに、Java APIやC APIでGridStoreオブジェクトを用いてクラスタに接続する際に設定できます。 -詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』や『[GridDB C APIリファレンス](../md_reference_c_api/md_reference_c_api.html)』 -を参照ください。 +詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』や『[GridDB C APIリファレンス](../md_reference_c_api/md_reference_c_api.html)』を参照ください。   @@ -1935,7 +1935,24 @@ NewSQL I/Fでは、ログイン(接続)タイムアウト、ネットワーク 【メモ】 - レプリケーション数の設定は、クラスタ定義ファイル(gs_cluster.json)の/cluster/replicationNumで設定します。 レプリケーションの同期設定は、クラスタ定義ファイル(gs_cluster.json)の/transaction/replicationModeで設定します。 +## データ同期機能【EE限定】 + +ノードに障害が発生した場合システムは自動的にレプリカを復旧してデータを再配置します。この機能を「自律的データ配置機能」と呼びます。 +このレプリカ復旧にはデータ同期機能が用いられますが、これは以下の2通りのいずれかが用いられます。 + +A) 差分トランザクションログを用いた同期方法 + +B) オリジナルのデータファイルを用いた同期方法 + +多くの場合A)のほうが高速にデータ同期を行うことができますが、データ同期に必要な差分トランザクションログが削除された場合はB)の方法で実行されます。 +A)のデータ同期を優先的に行いたい場合は以下の設定を行ってください。 +障害発生から指定時間はデータ同期で利用するトランザクションログファイルが削除されにくくなります。 +ただし、保持するトランザクションログファイル数が増加するため、本機能を利用する際は十分なディスク空きがあることを確認してください。 +| パラメータ| 初期値 |  パラメータの意味と制限値  | 変更 | +|------------|-------|------------------------|------| +| /sync/enableKeepLog | false | 本機能を利用する場合はtrueを設定します。 また配置表の固定化指定もあわせて有効とする必要があります(詳細は[配置表の固定化指定](#cluster_stable_goal)を参照)| オンライン| +| /sync/keepLogInterval | 1200s | 障害発生から指定時間トランザクションログファイルの削除をできる限り抑制します。|オンライン| ## アフィニティ機能 @@ -2057,9 +2074,8 @@ GridDBでは、コンテナ単位にブロックを占有するのではなく - 末尾へのカラム追加の操作のみできます。詳細は『[GridDB SQLリファレンス](../md_reference_sql/md_reference_sql.md)』をご参照ください。 カラムを追加した後に既存ロウを取得した場合、追加カラムの値はカラムのデータ型ごとに定義されている「空の値」が返ります。 -空の値の詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』 -のContainer<K,R>をご参照ください。 -(V4.1では、制限事項「カラム追加後に既存のロウを参照した時、NOT NULL制約が付いていないカラムはNULLが返る」があります。) +空の値の詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』のContainer<K,R>をご参照ください。 +(V4.1では、制限事項「カラム追加後に既存のロウを参照した時、NOT NULL制約が付いていないカラムはNULLが返る」があります。
カラム追加の例 @@ -2072,8 +2088,7 @@ GridDBでは、コンテナ単位にブロックを占有するのではなく - NoSQL API - GridStore\#putContainerを用いてカラム削除します。既存コンテナからコンテナ情報ContainerInfoを取得し、削除対象のカラム情報を除いてからputContainerを実行します。 - 詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』 -をご参照ください。 + 詳細は『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』をご参照ください。 ### カラム名変更 @@ -2132,6 +2147,7 @@ GridDBノードごとに圧縮機能を設定します。 - 圧縮機能を有効に変更しても、すでにデータファイルに書き込み済みのデータは圧縮できません。 - ZSTD圧縮機能を一度でも有効にした場合、そのデータファイルはV5.6より古いバージョンのサーバではオープンできません。GridDBのバージョンアップ後、ZSTD圧縮機能を有効にする前にはデータベースのバックアップをとることを推奨します。 + ### データブロック未使用領域解放 データブロック未使用領域解放機能は、データベースファイル(データファイル)の使用されていないブロック領域に対して、Linuxのファイルブロック割り当て解除処理を行い、データベースファイルのサイズ(実ディスク割当量)を縮小することができる機能です。 @@ -2176,6 +2192,116 @@ GridDBノード起動時に、gs_startnodeコマンドでデータブロック - 起動時に領域解放処理が行われるため、通常の起動処理より時間がかかる場合があります。 +## クラスタパーティション配置【EE限定】 + +GriDBは複数のノードにクラスタパーティションを多重化して配置します。クラスタパーティション内のコンテナに対して更新操作ができるノードが「オーナノード」、参照操作のみ可能なノードが「バックアップノード」であり、これら割付をクラスタ全体で決定したものを「クラスタパーティション配置表」と呼びます。 + +クラスタパーティション配置表はクラスタ構成時にサーバによって決定されますが、構成に関する以下の指定を行うことができます。 + +1. 生成規則の指定 + - クラスタパーティション配置表の生成規則(アルゴリズム)が指定できます。 + +2. 配置表の固定化指定 + - 現在のクラスタ構成をクラスタパーティション配置表ファイルとして出力し、それを用いて固定化することができます。 + +### 生成規則の指定 + +サーバが決定するクラスタパーティション配置表の生成規則として以下のいずれかを指定できます。 + +1. デフォルト規則(DEFAULT) + - その時点の各ノードのオーナ、バックアップの個数が均等になるように配置します。 + - その時点で保持しているデータ量を参照します。 + - 同じ構成であっても、その時点の状況により配置表が異なる場合があります。 + + +2. ラウンドロビン規則(ROUNDROBIN) + - その時点の各ノードのオーナ、バックアップの個数が均等になるように配置します。 + - オーナ、バックアップをできるだけ偏りなく、スレッド処理効率が良いように配置しますが、データ量は参照しません。 + - 同じ構成であっても、その時点の状況により配置表が異なる場合があります。 + +ラウンドロビン規則では以下の規則で配置表を作成します。 + + 1) クラスタを構成する各ノードの、ノードアドレス:ポート番号を文字列化して昇順に並べたノード順序を決定します。 + 2) クラスタパーティション番号の0番から昇順に、ノード順序に従いラウンドロビンでオーナを決定します。 + 3) クラスタパーティション番号の0番から2)で決定したオーナのノード番号+1を基点に、ラウンドロビンでレプリカ数分のバックアップを決定します。 + +4台クラスタ構成、クラスタパーティション数8のサンプルを以下に示します。 + +
+ ラウンドロビン +
ラウンドロビン
+
+ +(メモ) +- GridDBのバージョンV5.6以降の機能であり、V5.6以前は自動的にDEFAULTが適用されます。 + + ノード定義ファイル(gs_node.json)の以下のパラメータで設定します。 + +| 設定パラメータ| 初期値 |  パラメータの意味と制限値  | 変更 | +|------------|-------|------------------------|------| +| /cluster/goalAssignmentRule | DEFAULT | クラスタパーティション配置表の生成規則を指定します。
DEFAULT、ROUNDROBINのいずれかを指定します | 起動 | + + +### 配置表の固定化指定 + + + +初回に構成されるクラスタ構成をクラスタパーティション配置表ファイルとして出力し、それを用いてクラスタパーティションを固定化することができます。 +出力される配置表となるファイルは以下となります。 + + - ファイル名:gs_stable_goal.json + - 配置ディレクトリ:各種ノード起動ファイルと同じディレクトリ + - 形式 : json形式 + - 内容 : 各パーティションのオーナとバックアップを定義したもの + +サンプルを以下に示します。 + +``` example + [ + { + "backup": [{"address": "192.168.11.11","port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0", + }, + : + ] +``` + +本機能を利用する場合は以下の手順を行ってください。 + +- gs_node.jsonの/cluster/enableStableGoalに値trueを追加します。 +- クラスタを初回構成する際は、gs_stable_goal.jsonがgs_node.jsonと同じディレクトリにあれば削除した後にクラスタ起動を行ってください。 + +本配置表の読み込みおよび生成されるタイミングは以下の通りです。 + +- 初回のクラスタ構成 +- ノード構成の変更時(増設/縮退) +- ノードの一時的な障害/復帰 + +配置表ファイルが指定フォルダに既に存在する場合は上記タイミングでも「上書き更新」は行われません。また、上記タイミングでの現在のノード構成が配置表ファイルに記載された構成と異なる場合は配置表ファイルを用いず、現在のノード構成において6.1.1で指定した生成規則に従った配置表が適用されます。 + +クラスタのノード増設やノード縮退を行う場合は操作前に配置表ファイルを削除した後にクラスタ操作を実行すると、自動的に新しい構成に従った配置表ファイルを生成することができます。 + +(メモ) +- GridDBのバージョンV5.6以降の機能となります。 + + ノード定義ファイル(gs_node.json)の以下のパラメータで設定します。 + +| 設定パラメータ| 初期値 |  パラメータの意味と制限値  | 変更 | +|------------|-------|------------------------|------| +| /cluster/enableStableGoal | false | クラスタパーティション配置表固定化の利用有無を指定します。| 起動 | + +クラスタパーティション数=8, ノード数=4、生成規則「ROUNDROBIN」を指定した場合のサンプルを以下に示します。初期クラスタ構成時に、4台構成のラウンドロビンに従った配置表となるgs_stable_goal.jsonが自動生成されます。障害発生時は、「ROUNDROBIN」規則による3台構成の配置となります。1ノード増設のタイミングで、gs_stable_goal.jsonを削除しておけば、5台構成のラウンドロビン配置表が新たに生成されます。 + +
+ パーティション割当サンプル +
パーティション割当サンプル
+
+ + # 運用機能 @@ -2320,9 +2446,9 @@ GridDBのリソースはすべて、gsadmの所有物となります。また、 | | コンテナやテーブルへのデータ登録 | gs_sh | | ○ | ○:本人のDB内で更新操作が可能な場合のみ | | | コンテナやテーブルの検索 | gs_sh | | ○ | ○:本人のDB内のみ | | | コンテナやテーブルへの索引操作 | gs_sh | | ○ | ○:本人のDB内で更新操作が可能な場合のみ | -| バックアップ管理 | バックアップ作成 | gs_backup【EE限定】 | | ○ | × | -| バックアップ管理 | バックアップリストア | gs_restore【EE限定】 | ◎ | × | × | -| | バックアップリスト | gs_backuplist【EE限定】 | | ○ | × | +| バックアップ管理 | バックアップ作成 | gs_backup | | ○ | × | +| バックアップ管理 | バックアップリストア | gs_restore | ◎ | × | × | +| | バックアップリスト | gs_backuplist | | ○ | × | | システムステータス管理 | システム情報の取得 | gs_stat | | ○ | × | | | パラメータ変更 | gs_paramconf | | ○ | × | | データインポート/ | データのインポート | gs_import | | ○ | ○:アクセスできる範囲 | @@ -2670,7 +2796,7 @@ GridDBクラスタでは、コンテナデータをクラスタ内のノード -## バックアップ/リストア機能【EE限定】 +## バックアップ/リストア機能 データベース障害やアプリケーションの誤動作によるデータ破壊に備えるために、定期的なバックアップの採取が必要です。バックアップ運用は、サービスレベルの要求やシステムのリソースに応じて対処方法を選択する必要があります。 @@ -3392,6 +3518,7 @@ $ gs_failovercluster -u admin/admin --repair フェイルオーバーの完了は、マスタノードに対するgs_statコマンドの実行で/cluster/partitionStatusがNORMALになっていること、 gs_partitionコマンドでパーティションの欠損が発生していないことで確認します。 + ##### リカバリ完了後の操作 リカバリ完了後は、クラスタを構成する全ノードでフルバックアップを採取してください。 @@ -3569,24 +3696,24 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data 不要となったバックアップデータの削除は、BACKUPNAME単位に不要となったディレクトリを削除するのみです。バックアップデータの管理情報はすべて各々のBACKUPNAMEのディレクトリ下にあるため、他のレジストリ情報などを削除するといった操作は不要です。 なお、差分・増分バックアップの際は、BACKUPNAME_lv0, BACKUPNAME_lv1_NNN_MMMのディレクトリ群をすべて削除してください。 -## ローリングアップグレード機能【EE限定】 +## ローリングアップデート機能【EE限定】 -ローリングアップグレード機能では、クラスタ構成を稼動したままノードのアップグレードを行うことができます。 ノード1台ずつ順番に、クラスタからノードを離脱してGridDB製品をアップグレードし、再びクラスタ構成へノードを参加させることで、最終的にクラスタを構成するすべてのノードを新しいバージョンのGridDB製品に置き換えることができます。 +ローリングアップデート機能では、クラスタ構成を稼動したままノードのアップデートを行うことができます。 ノード1台ずつ順番に、クラスタからノードを離脱してGridDB製品をアップデートし、再びクラスタ構成へノードを参加させることで、最終的にクラスタを構成するすべてのノードを新しいバージョンのGridDB製品に置き換えることができます。 -以下の手順で、ローリングアップグレード機能を用いたアップグレードを行います。 +以下の手順で、ローリングアップデート機能を用いたアップデートを行います。 -1. ローリングアップグレードの運用計画を立てる - - ローリングアップグレードの作業時間を見積もります。ノード1台分の作業は下記の項目となります。 これらにかかる時間を見積り、クラスタの全ノードでの作業時間を計算します。 ノード起動(リカバリ)以外の項目は、約5分程度が目安の時間です。 +1. ローリングアップデートの運用計画を立てる + - ローリングアップデートの作業時間を見積もります。ノード1台分の作業は下記の項目となります。 これらにかかる時間を見積り、クラスタの全ノードでの作業時間を計算します。 ノード起動(リカバリ)以外の項目は、約5分程度が目安の時間です。 - クラスタ離脱 - ノード停止 - GridDBインストール - ノード起動(リカバリ) - クラスタ参加 - - クラスタ離脱前にデータ更新が多い場合(チェックポイントされていない更新が多い場合)、また、ローリングアップグレード中にデータ更新が多い場合は、リカバリに時間がかかる場合があります。 + - クラスタ離脱前にデータ更新が多い場合(チェックポイントされていない更新が多い場合)、また、ローリングアップデート中にデータ更新が多い場合は、リカバリに時間がかかる場合があります。 2. クラスタのデータ配置目標の自動設定を無効にする - - ローリングアップグレードでは、繰り返しクラスタ構成を変更するため、データ配置目標の自動設定を無効にした状態で全ノードのアップグレードを実施します。これにより、無駄なデータ再配置が行われず、処理やネットワーク通信の負荷を軽減できます。 + - ローリングアップデートでは、繰り返しクラスタ構成を変更するため、データ配置目標の自動設定を無効にした状態で全ノードのアップデートを実施します。これにより、無駄なデータ再配置が行われず、処理やネットワーク通信の負荷を軽減できます。 - gs_goalconfコマンドで--clusterオプションを付けて実行すると、クラスタを構成する全ノードに対してデータ配置目標の自動設定の無効化が行われます。 - 例) ``` example @@ -3594,14 +3721,14 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data ``` 3. クラスタ構成を確認する - - ローリングアップグレードの手順では、すべてのフォロワノードをアップグレードした後で、最後にマスタノードをアップグレードします。 そのため、事前にクラスタ構成を確認し、ノードをアップグレードする順序を決めます。 + - ローリングアップデートの手順では、すべてのフォロワノードをアップデートした後で、最後にマスタノードをアップデートします。 そのため、事前にクラスタ構成を確認し、ノードをアップデートする順序を決めます。 - gs_configコマンドでマスタノードを確認します。確認したマスタノード以外はフォロワノードです。 - 例) ``` example $ gs_config -u admin/admin ``` -4. すべてのフォロワノードを1台ずつアップグレードする +4. すべてのフォロワノードを1台ずつアップデートする - 下記の作業を各フォロワノードに対して行います。ノードにログインして実施してください。 この作業の開始以降、5の作業が完了するまでSQL処理は継続できない場合があります。詳しくは【注意】を参照ください。 - a. 現在のデータ配置目標をマスタノードから取得する (gs_goalconf) - 例) @@ -3635,7 +3762,7 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data ``` example $ gs_stopnode -u admin/admin -w ``` - - g. GridDBをアップグレードする + - g. GridDBをアップデートする - h. ノードを起動する (gs_startnode) - 例) ``` example @@ -3680,8 +3807,8 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data ``` example $ gs_stat -u admin/admin -s MASTER_IP | grep partitionStatus ``` -5. マスタノードをアップグレードする - - 手順3で確認したマスタノードを最後にアップグレードします。手順は4と同様です。 +5. マスタノードをアップデートする + - 手順3で確認したマスタノードを最後にアップデートします。手順は4と同様です。 6. クラスタ内のすべてのノードが新しいバージョンになっていることを確認する (gs_stat) @@ -3692,32 +3819,32 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data ``` - 上記の操作手順を支援する運用ツールとして、gs_rollingupgradeが提供されています。ローリングアップグレード支援コマンドを用いることにより、ローリングアップグレードを行う一連の手順の大半の自動化を行うことができます。 + 上記の操作手順を支援する運用ツールとして、gs_rollingupdateが提供されています。ローリングアップデート支援コマンドを用いることにより、ローリングアップデートを行う一連の手順の大半の自動化を行うことができます。
-ローリングアップグレード -
ローリングアップグレード支援コマンド
+ローリングアップデート +
ローリングアップデート支援コマンド
【メモ】 -- ローリングアップグレード機能は、V4.0以降のバージョンにおいて使用することができます。 -- 現在のクラスタ構成のGridDBバージョンと、ローリングアップグレードによって入れ替える新しいGridDBバージョンのメジャーバージョンが異なる場合は、ローリングアップグレード機能を使用することはできません。 +- ローリングアップデート機能は、V4.0以降のバージョンにおいて使用することができます。 +- 現在のクラスタ構成のGridDBバージョンと、ローリングアップデートによって入れ替える新しいGridDBバージョンのメジャーバージョンが異なる場合は、ローリングアップデート機能を使用することはできません。 - 例) 現在のバージョンがV4.0で、入れ替えたいバージョンがV5.0の場合、メジャーバージョンが異なるのでローリングアップグレードは使用できません。 + 例) 現在のバージョンがV4.0で、入れ替えたいバージョンがV5.0の場合、メジャーバージョンが異なるのでローリングアップデートは使用できません。 -- ローリングアップグレードによって入れ替えるGridDBバージョンは、現在のクラスタを構成するGridDBノードのバージョンよりも新しいバージョンでなければなりません。 -- 全ノードのローリングアップグレードが完了するまで、新しいバージョンの追加機能は使用できません。 +- ローリングアップデートによって入れ替えるGridDBバージョンは、現在のクラスタを構成するGridDBノードのバージョンよりも新しいバージョンでなければなりません。 +- 全ノードのローリングアップデートが完了するまで、新しいバージョンの追加機能は使用できません。 【注意】 -- 運用中のクラスタをローリングアップグレードする前に、テスト環境でローリングアップグレードを試行し、手順に問題が無いことを十分に確認してください。 +- 運用中のクラスタをローリングアップデートする前に、テスト環境でローリングアップデートを試行し、手順に問題が無いことを十分に確認してください。 - パッケージのアップデートインストールに十分なディスク容量を確保してから手順を実施してください。 -- ローリングアップグレード中のSQL処理の継続は保証されません。 +- ローリングアップデート中のSQL処理の継続は保証されません。 - SQLの検索はクライアントフェイルオーバにより継続できる可能性がありますが、ノード間負荷が高いとエラーが返る場合があります。 -- マスタノードのアップグレードの際、一時的に(約1分程度)クラスタが停止します。 +- マスタノードのアップデートの際、一時的に(約1分程度)クラスタが停止します。 - クライアントでフェイルオーバされる処理(NoSQLインターフェース)は、フェイルオーバタイムアウト時間までにクラスタが再開すれば、クライアント側でエラーにはなりません。 -- ローリングアップグレード中に大量にデータ更新が行われると、ローリングアップグレード完了後のデータ同期処理に時間がかかります。 また、ノードのアップグレード中は残りのノードで要求を処理することになるため、一時的にリソース不足に陥る可能性があります。 そのため、ローリングアップグレードは、クライアントアクセスがなるべく少ない時間帯に実施することを推奨します。 -- レプリケーションの同期設定が非同期である場合、ローリングアップグレード中に登録・更新操作を継続していると、ノードを一時的に離脱させた際に一部のパーティションにアクセスできない状態になる可能性があります。このとき、クライアントフェイルオーバに失敗する可能性があるため、必要に応じてリトライ処理を行ってください。 +- ローリングアップデート中に大量にデータ更新が行われると、ローリングアップデート完了後のデータ同期処理に時間がかかります。 また、ノードのアップデート中は残りのノードで要求を処理することになるため、一時的にリソース不足に陥る可能性があります。 そのため、ローリングアップデートは、クライアントアクセスがなるべく少ない時間帯に実施することを推奨します。 +- レプリケーションの同期設定が非同期である場合、ローリングアップデート中に登録・更新操作を継続していると、ノードを一時的に離脱させた際に一部のパーティションにアクセスできない状態になる可能性があります。このとき、クライアントフェイルオーバに失敗する可能性があるため、必要に応じてリトライ処理を行ってください。 - クラスタに複数バージョンのノードが混在する状態のまま運用を継続しないでください。 @@ -3738,7 +3865,7 @@ $ cp -p gs_cluster_snapshot_info.json ${GS_HOME}/data - (日付時刻) (ホスト名) (スレッド番号) (ログレベル) (カテゴリ) \[(エラー・トレース番号):(エラー・トレース番号名)\](メッセージ) <(base64詳細情報: サポートサービスにて問題点分析用の詳細情報)> エラー・トレース番号名で発生した事象の概要が判ります。 - + ``` example 2014-11-12T10:35:29.746+0900 TSOL1234 8456 ERROR TRANSACTION_SERVICE [10008:TXN_CLUSTER_NOT_SERVICING] (nd={clientId=2, address=127.0.0.1:52719}, pId=0, eventType=CONNECT, stmtId=1) @@ -3878,11 +4005,11 @@ on executing statement..." | AUDIT_SYSTEM | 運用コマンド(STAT以外)に関する監査ログの出力レベル | CRITICAL | | AUDIT_STAT | 運用コマンド(STAT)に関する監査ログの出力レベル | CRITICAL | -デフォルトの出力レベルはアクセスログ(AUDIT_CONNECT)のみINFOでそれ以外はCRITICAL(監査対象外)となっています。よって、起動ファイルで監査ログを有効とした場合は、アクセスログのみ記録されます。運用開始前に監査目的に応じて適切に監査対象とする操作カテゴリを設定する必要があります。 +デフォルトの出力レベルはアクセスログ(AUDIT_CONNECT)のみINFOでそれ以外はCRITICAL(監査対象外)となっています。よって、ノード定義ファイルで監査ログを有効とした場合は、アクセスログのみ記録されます。運用開始前に監査目的に応じて適切に監査対象とする操作カテゴリを設定する必要があります。 データベース管理者は、監査対象となる操作カテゴリをノード定義ファイルもしくはオンラインで設定することもできます。設定状況はイベントログと同様にgs_logconfコマンドで確認できますがこの場合は永続化されませんので、再起動時に元の操作カテゴリに戻ります。よって、できる限り運用開始前に監査カテゴリを決定しておくことが推奨されます。 -ノード起動ファイルで設定する監査ログ関連の設定項目は以下となります。 +ノード定義ファイルで設定する監査ログ関連の設定項目は以下となります。 | 監査カテゴリ| 初期値 |  パラメータの意味と制限値  | 変更 | |------------|-------|------------------------|------| @@ -3932,7 +4059,7 @@ on executing statement..." 監査ログはクライアントと直接接続があったノードに対して出力されます。つまり、監査ログはノード単位で記録されるので、以下の対応が必要となります。 - 事前に全ノードの監査ログに関する設定項目は全て揃えておきます。 -- 監査対象の操作カテゴリをオンライン変更する場合は全てのノードに適用します。また、オンライン変更する場合は永続化されませんので、次に再起動するタイミングでノード起動ファイルを更新します。 +- 監査対象の操作カテゴリをオンライン変更する場合は全てのノードに適用します。また、オンライン変更する場合は永続化されませんので、次に再起動するタイミングでノード定義ファイルを更新します。 - 監査ログ分析を行う場合は、各ノードの監査ログ情報を収集し、横断して分析します。 ### 監査ログを用いた分析 @@ -4046,240 +4173,2146 @@ SELECT notFoundColumn FROM table1 ``` ``` -## 稼働状況の確認機能 +## サイト間データベースレプリケーション【EE限定】 -### 性能・統計情報 +### 目的 -GridDBの性能・統計情報は、運用コマンドのgs_statを利用して確認できます。gs_statはクラスタで共通の情報とノード独自の性能情報・統計情報を表示します。 +サイト間データベースレプリケーション機能を利用することで、障害発生時のディザスタリカバリや、複数サイトを横断したリードレプリカの作成が可能です。この機能には、以下の2つの構成方式があります。稼働系クラスタを「プライマリ」、待機系クラスタを「スタンバイ」と呼びます。 -gs_statコマンドでの出力のうち、performance構造が、性能・統計情報に関連する項目です。 +**1. コールドスタンバイ方式** -出力例を以下に示します。出力される内容はバージョンによって異なります。 +コールドスタンバイ方式では、スタンバイ側のサーバ群(クラスタ)は通常非稼働状態で運用されます。障害が発生した際に、スタンバイ側がレプリケーションデータを読み込み、その後プライマリとして切り替わります。この方式は、障害復旧時間に余裕があるディザスタリカバリに適しています。 -``` example --bash-4.1$ gs_stat -u admin/admin -s 192.168.0.1:10040 -{ - : - "performance": { - "batchFree": 0, - "dataFileSize": 65536, - "dataFileUsageRate": 0, - "checkpointWriteSize": 0, - "checkpointWriteTime": 0, - "currentTime": 1428024628904, - "numConnection": 0, - "numTxn": 0, - "peakProcessMemory": 42270720, - "processMemory": 42270720, - "recoveryReadSize": 65536, - "recoveryReadTime": 0, - "sqlStoreSwapRead": 0, - "sqlStoreSwapReadSize": 0, - "sqlStoreSwapReadTime": 0, - "sqlStoreSwapWrite": 0, - "sqlStoreSwapWriteSize": 0, - "sqlStoreSwapWriteTime": 0, - "storeDetail": { - "batchFreeMapData": { - "storeMemory": 0, - "storeUse": 0, - "swapRead": 0, - "swapWrite": 0 - }, - "batchFreeRowData": { - "storeMemory": 0, - "storeUse": 0, - "swapRead": 0, - "swapWrite": 0 - }, - "mapData": { - "storeMemory": 0, - "storeUse": 0, - "swapRead": 0, - "swapWrite": 0 - }, - "metaData": { - "storeMemory": 0, - "storeUse": 0, - "swapRead": 0, - "swapWrite": 0 - }, - "rowData": { - "storeMemory": 0, - "storeUse": 0, - "swapRead": 0, - "swapWrite": 0 - } - }, - "storeMemory": 0, - "storeMemoryLimit": 1073741824, - "storeTotalUse": 0, - "swapRead": 0, - "swapReadSize": 0, - "swapReadTime": 0, - "swapWrite": 0, - "swapWriteSize": 0, - "swapWriteTime": 0, - "syncReadSize": 0, - "syncReadTime": 0, - "totalLockConflictCount": 0, - "totalReadOperation": 0, - "totalRowRead": 0, - "totalRowWrite": 0, - "totalWriteOperation": 0 - }, - : -} -``` +**2. ホットスタンバイ方式** -性能・統計情報に関連する情報を説明します。storeDetail構造は、内部のデバッグ情報のため説明は省きます。 -- 種別は以下を示します - - CC:クラスタ全体の現在の値 - - c:指定ノードの現在の値 - - CS:クラスタ全体のサービス開始後の累積値 - - s:ノード全体のサービス開始後の累積値 - - CP:クラスタ全体のサービス開始後のピーク値 - - p:ノード全体のサービス開始後のピーク値 -- 監視すべき事象、数値を確認し、運用を継続するにあたり検討すべき項目を示します。 +ホットスタンバイ方式では、スタンバイ側のデータベースが常に稼働状態で運用されます。スタンバイ側はプライマリからのレプリケーションデータを継続的に受け取り、最新の状態を維持します。このため、コールドスタンバイ方式と比較して、障害復旧時間を大幅に短縮できます。 -| 出力パラメータ | 種別 | 説明 | 監視すべき事象 | -|----------------------------|------|-----------------------------------------------------|-----| -| dataFileSize | c | データファイルサイズ(バイト) | | -| dataFileUsageRate | c | データファイル利用率 | | -| checkpointWrite | s | チェックポイント処理のデータファイルへの書き込み回数 | | -| checkpointWriteSize | s | チェックポイント処理のデータファイルへの書き込みサイズ(バイト) | | -| checkpointWriteTime | s | チェックポイント処理のデータファイルへの書き込み時間(ミリ秒) | | -| checkpointWriteCompressTime| s | チェックポイント処理のデータファイルへの書き込みデータ圧縮時間(ミリ秒) | | -| dataFileAllocateSize | c | データファイルに割り当てられたブロックの総サイズ(バイト) | | -| currentTime | c | 現在時刻 | | -| numConnection | c | 現在のコネクション数。トランザクション処理で使用している接続数であり、クラスタ処理で使用している接続数は含まれない。クライアントの数+保有するパーティション*レプリカ数の値となる。 | ログの監視でコネクション不足が発生している場合はノード構成のconnectionLimitの値を見直します。| -| numSession | c | 現在のセッション数 | | -| numTxn | c | 現在のトランザクション数 | | -| peakProcessMemory | p | プロセス最大使用メモリ量(バイト) storememoryの値を含め、GridDBサーバの利用したメモリのピーク値 | peakProcessMemory、processMemoryがノードの実装メモリより大きくOSのスワップが発生している場合、メモリの追加や一時的にstorememoryLimitの値を下げるなどの検討が必要 | -| processMemory | c | プロセス使用メモリ量(バイト) | | -| recoveryReadSize | s | リカバリ処理でデータファイルを読み込んだサイズ(バイト) | | -| recoveryReadTime | s | リカバリ処理でデータファイルを読み込んだ時間(ミリ秒) | | -| sqlStoreSwapRead | s | SQLストアスワップ処理のファイルからの読み込み回数 | | -| sqlStoreSwapReadSize | s | SQLストアスワップ処理のファイルからの読み込みサイズ(バイト) | | -| sqlStoreSwapReadTime | s | SQLストアスワップ処理のファイルからの読み込み時間(ミリ秒) | | -| sqlStoreSwapWrite | s | SQLストアスワップ処理のファイルへの書き込み回数 | | -| sqlStoreSwapWriteSize | s | SQLストアスワップ処理のファイルへの書き込みサイズ(バイト) | | -| sqlStoreSwapWriteTime | s | SQLストアスワップ処理のファイルへの書き込み時間(ミリ秒) | | -| storeMemory | c | インメモリデータベースでの使用メモリ量(バイト) | | -| storeMemoryLimit | c | インメモリデータベースでの使用メモリ量制限(バイト) | | -| storeTotalUse | c | データベースファイル内のデータ容量を含めたノードが保有する全データ容量(バイト) | | -| swapRead | s | スワップ処理のファイルからの読み込み回数 | | -| swapReadSize | s | スワップ処理のファイルからの読み込みサイズ(バイト) | | -| swapReadTime | s | スワップ処理のファイルからの読み込み時間(ミリ秒) | | -| swapWrite | s | スワップ処理のファイルへの書き込み回数 | | -| swapWriteSize | s | スワップ処理のファイルへの書き込みサイズ(バイト) | | -| swapWriteTime | s | スワップ処理のファイルへの書き込み時間(ミリ秒) | | -| swapWriteCompressTime | s | スワップ処理のファイルへの書き込みデータ圧縮時間(ミリ秒) | | -| syncReadSize | s | 同期処理データファイルからの読み込みサイズ(バイト) | | -| syncReadTime | s | 同期処理データファイルからの読み込み時間(ミリ秒) | | -| totalLockConflictCount | s | ロウロック競合発生回数 | | -| totalReadOperation | s | 検索処理回数 | | -| totalRowRead | s | ロウ読み出し回数 | | -| totalRowWrite | s | ロウ書き込み回数 | | -| totalWriteOperation | s | 登録更新処理回数 | | +さらに、GridDBではスタンバイ側をリードレプリカとして運用することも可能です。本章では、このホットスタンバイ方式を用いた運用方法について詳しく説明します。 -【メモ】 -- 集計単位はノード単位になります。データベース単位で集計を行いたい場合は、メタテーブル"#database_stats"に対してSQLを実行します。 +### 機能概要 -### コンテナ(テーブル)の配置情報確認 +サイト間データベースレプリケーションにおけるホットスタンバイ方式には、以下の2つの方法があります。どちらを選択するかは、障害復旧時間、復旧時点、レプリケーションラグ、運用コストなどの要件に基づいて決定します。 -GridDBクラスタ上のコンテナ(テーブル)は、各ノードに自動的に分散して配置されます。 運用機能やSQLを用いることで、コンテナ(テーブル)がどのノードに配置されているかを確認することができます。 +**1. ファイルベースレプリケーション** -この機能は次の場合に役立ちます。 -- ノードごとのデータベースサイズに偏りがあるときに、ノードに配置されているコンテナを調べたい。 -- 特定のコンテナを含むノードのバックアップを取得したい。 +プライマリサーバで生成されたトランザクションログファイルをスタンバイサーバに転送し、それを適用することでレプリケーションを実現する方式です。この方式では、トランザクションログファイルの生成、転送、適用はサーバ間で自動的に行われません。代わりに、サーバが提供するレプリケーション機能を活用して手動で実施します。 -【メモ】 -- コンテナやパーティションなどデータ管理に関する説明は、[データモデル](#data_model)をご参照ください。 -- ノードの停止や障害などによって自律的データ配置が行われると、コンテナの配置が動的に変化する場合があります。コンテナ配置は恒久的なものではありません。 +- **特徴**: + - 転送方式や転送単位を柔軟に調整可能です。 + - トランザクションログファイル単位でのレプリケーションとなるため、プライマリとスタンバイ間のレプリケーションラグが若干大きくなります。 + - トランザクションログファイルをアーカイブとして保持することで、レプリケーション障害期間が長期化しても復旧が可能です。 +- **注意点**: + - レプリケーション手順は自動化されていないため、データベース管理者による運用管理が必要となり、一定の運用コストが発生します。 -次の方法で、コンテナ(テーブル)が属するパーティションのオーナが配置されているノードを確認できます。 +**2. メモリベースレプリケーション** -#### ノード上のコンテナ(テーブル)一覧確認【EE限定】 +プライマリサーバとスタンバイサーバ間で、トランザクションログをメモリベースで直接レプリケーションする方式です。この方式では、トランザクションログの生成、転送、適用がサーバ間で自動的に行われます。 -1つのノード上に配置されているコンテナ(テーブル)一覧を確認するには、統合運用管理GUI(gs_admin)のコンテナ一覧画面を使用します。 +- **特徴**: + - レプリケーション時に障害が発生しても、プライマリサーバのトランザクションログを利用して速やかに復旧可能です。 + - レプリケーション手順は自動化されているため運用負荷が低く、プライマリとスタンバイ間のレプリケーションラグが小さいです。 +- **注意点**: + - プライマリサーバのトランザクションログ保持期間を適切に設定する必要があります。これはレプリケーション失敗時の同期処理に用いられます。 + - 本機能はバージョン5.8以降で利用可能です。 -1. gs_adminにログインします。 +どちらの方式も、それぞれの特性を理解した上で、システム要件に最適な方法を選択してください。 -2. 左画面のツリービューで「ClusterTree」タブを選択してノードを選択した後、右画面で「Container」タブをクリックします。 +### ファイルベースレプリケーション -3. ノードに配置されているコンテナ一覧が表示されます。 +ファイルベースレプリケーションでは、トランザクションログファイルを使用してデータのレプリケーションを行います。この方式に必要なサーバ機能は以下の通りです。それぞれの詳細については、次節で説明します。 -【メモ】 -- パーティショニングされたコンテナ(テーブル)は、管理テーブルのみ表示されます。データパーティションは表示されません。 +a) ベースDB作成と自動アーカイブ機能 +ベースラインとなるデータベースファイル(ベースDB)を作成し、その後に生成されたトランザクションログを指定フォルダに自動的に複製する機能です。この機能により、レプリケーションに必要なデータを効率的に管理できます。 -#### コンテナ(テーブル)配置ノードの確認 +b) スタンバイモード機能 +クラスタをリードオンリー(参照専用)として稼働させる機能です。このモードでは、クライアントからの更新要求はエラーとなり、データの整合性を保ちながらスタンバイ環境を維持できます。 -特定のコンテナ(テーブル)が配置されているノードを確認するには、gs_shとパーティション情報取得コマンド(gs_partition)を使用します。 +c) トランザクションログ適用機能 +指定されたトランザクションログをサーバに適用する機能です。この機能を使用することで、スタンバイサーバに対してプライマリサーバの更新内容を反映させることができます。 -1. gs_shのshowcontainerサブコマンドでコンテナが格納されているパーティションのIDを確認します。 パーティションIDが"Partition ID"に表示されます。 +#### ベースライン生成と自動アーカイブ機能 -2. gs_shのconfigclusterサブコマンドでマスタノードを確認します。 "Role"に"M"と表示されるノードがマスタノードです。 +自動アーカイブ機能は、以下の特徴を持つ機能です: -3. マスタノードに対して、1で確認したパーティションIDを引数に指定してgs_partitionを実行します。 表示されたJSONの/owner/addressのノードが、コンテナが配置されているノードです。 +- **ベースライン生成**: 指定された時点のデータベースファイル(datファイルとcpファイル)をベースDBとして生成します。 +- **トランザクションログの自動出力**: ベースライン生成後に作成されたトランザクションログを指定フォルダに自動的に保存します。 +- **コマンドによる操作**: `gs_autoarchive` コマンドを実行することでアーカイブ処理を開始できます。アーカイブにはベースDBとトランザクションログが含まれます。 +- **追加情報の出力(オプション)**: + - 出力されたトランザクションログファイルが保持するLSNの範囲情報。 + - ノード起動時のLSNや、オーナー・バックアップの変更履歴とその時点のLSN情報。 -【実行例】 -- 特定のパーティションの配置ノードを確認します。 +**設定パラメータ** -``` example -$ gs_partition -u admin/admin -n 5 -[ - { - "backup": [], - "catchup": [], - "maxLsn": 300008, - "owner": { - "address": "192.168.11.10", -> IPアドレス:192.168.11.10のノードに格納されている - "lsn": 300008, - "port": 10010 - }, - "pId": "5", - "status": "ON" - } -] -``` +以下は、自動アーカイブ機能に関連する設定パラメータです: -【注意】 -- マスタノード以外にgs_partitionを実行した場合は、パーティション情報が正しくない場合があります。 +| パラメータ名 | データ型 | デフォルト値 | 説明 | +|-------------------------------------|----------|-------------|------| +| `/dataStore/enableAutoArchive` | `bool` | `false` | 自動アーカイブ機能を有効にするかどうかを指定します。 | +| `/dataStore/autoArchiveName` | `string` | `""` | 自動アーカイブの出力先フォルダ名を指定します。 | +| `/dataStore/enableAutoArchiveOutputInfo` | `bool` | `true` | 自動アーカイブ時に追加情報を出力するかどうかを指定します。 | +| `/dataStore/enableAutoArchiveOutputInfoPath` | `string` | `cluster` | 追加情報の出力先フォルダ名を指定します。 | -【メモ】 -- パーティショニングされたコンテナ(テーブル)を指定した場合、管理テーブルの配置情報が表示されます。 データパーティションの配置情報は表示されません。 +**使用例** -#### データパーティション配置ノードの確認 +自動アーカイブ機能を有効にするには、以下の手順を実行してください: -パーティショニングされたコンテナ(テーブル)は、複数の内部コンテナ(データパーティション)にデータを分割して格納します。 これらのデータパーティションがどのノードに配置されているかを確認することで、パーティショニングされたコンテナ(テーブル)のデータ配置を知ることができます。 +1. ノード定義ファイルで以下の設定を行います: + ```json + { + "dataStore": { + "enableAutoArchive": true, + "autoArchiveName": "arch", + "enableAutoArchiveOutputInfo": true, + "enableAutoArchiveOutputInfoPath": "cluster" + } + } + ``` -配置確認の流れとしては、該当コンテナ(テーブル)のデータパーティションが格納されているパーティションのIDを調べて、そのIDを基にして配置されているノードを調べます。以下に手順を説明します。 +2. 設定後、`gs_autoarchive` コマンドを実行してアーカイブを開始します: + ```bash + $ gs_autoarchive -u admin/admin --start + ``` -1. 該当コンテナ(テーブル)のデータパーティションが格納されているパーティションのIDを確認する +3. アーカイブデータは、指定したフォルダ(例: `/var/lib/gridstore/backup/arch`)に保存されます。 -- データパーティションが格納されているパーティションのIDは、メタテーブル"\#table_partitions"を使って確認します。メタテーブル"\#table_partitions"には、全データパーティションのコンテナ名やパーティションIDなどの情報が格納されています。 -- 統合運用管理GUI(gs_admin)のSQL画面またはgs_shのsqlサブコマンドを使用し、メタテーブル"\#table_partitions"に検索を実行します。調べたいコンテナの名前を、where句で「TABLE_NAME」カラムの条件として指定します。 -- 指定したコンテナの複数のデータパーティション情報が表示されますので、「CLUSTER_PARTITION_INDEX」カラムでパーティションIDを確認します。 +**注意事項** -2. パーティションIDから、配置されているノードを確認する +- 自動アーカイブ機能を有効にすると、`gs_backup` を使用した自動ログバックアップは実行できません。ただし、それ以外のバックアップ操作は可能です。 +- 自動アーカイブ機能を有効にした状態でバックアップデータを復元して起動する場合、アーカイブに出力されたログファイル名が重複してエラーが発生する可能性があります。この場合、既存のアーカイブフォルダを退避させた後に起動し、再度 `gs_autoarchive` を実行してください。 -- パーティションIDから、配置されているノードを確認するためには、マスタノードに対してgs_partitionコマンドを実行する必要があります。 -- gs_shのconfigclusterサブコマンドでマスタノードを確認します。"Role"に"M"と表示されるノードがマスタノードです。 -- マスタノードに対して、1で確認したパーティションIDを引数-nに指定してgs_partitionを実行します。 表示されたJSONの/owner/addressのノードが、コンテナが配置されているノードです。 -- -nには、ひとつのパーティションIDしか指定できません。-nを指定しない場合、全パーティションの情報が表示されます。 +**自動アーカイブ機能の有効化** -【例】 -- 1 パーティショニングテーブル'hashTable1'のデータパーティションが格納されているパーティションIDを確認します。 +自動アーカイブ機能を有効にするには、以下の手順でノード定義ファイルを設定します: -``` example -select DATABASE_NAME, TABLE_NAME, CLUSTER_PARTITION_INDEX from "#table_partitions" where TABLE_NAME='hashTable1'; +1. `/dataStore/enableAutoArchive` を `true` に設定します。 +2. `/dataStore/autoArchiveName` にアーカイブ名(保存先ディレクトリ名)を指定します。 -DATABASE_NAME,TABLE_NAME,CLUSTER_PARTITION_INDEX -public,hashTable1,1 -public,hashTable1,93 -public,hashTable1,51 -public,hashTable1,18 +設定後、`gs_autoarchive` コマンドを実行することで、自動アーカイブを開始できます。 + +```bash +# 自動アーカイブが保存されるディレクトリ(バックアップディレクトリ)を確認 +$ cat /var/lib/gridstore/conf/gs_node.json +{ + "dataStore": { + "dbPath": "/var/lib/gridstore/data", + "transactionLogPath": "/var/lib/gridstore/txnlog", + "backupPath": "/var/lib/gridstore/backup", + "storeMemoryLimit": "1024MB", + "concurrency": 4, + "logWriteMode": 1, + "persistencyMode": "NORMAL", + "autoArchiveName": "arch" + } + ... +} + +# 自動アーカイブの開始 +$ gs_autoarchive -u admin/admin --start +``` + +**自動アーカイブ有効時のファイル構成** + +自動アーカイブを有効にすると、以下のようなファイル構成になります: + +``` +/var/lib/gridstore + └── backup # バックアップ/アーカイブ基点ディレクトリ (/dataStore/backupPath) + ├── arch # アーカイブ名 (/dataStore/autoArchiveName) + │ ├── gs_backup_info.json # アーカイブ情報ファイル + │ ├── gs_backup_info_digest.json # アーカイブダイジェスト情報ファイル + │ ├── gs_lsn_info.json # アーカイブLSN情報ファイル + │ ├── gs_auto_archive_command_param.json # アーカイブ実行コマンドパラメータファイル + │ ├── data # データフォルダ (/dataStore/dbPath) + │ │ ├── 0 # パーティション番号0 + │ │ │ ├── 0_part_0.dat # データファイルアーカイブ + │ │ │ ├── 0_4.cplog # チェックポイントログアーカイブ + │ │ │ └── ... + │ │ ├── 1 # パーティション番号1 + │ │ │ └── ... + │ │ └── ... + │ ├── txnlog # トランザクションログフォルダ (/dataStore/transactionLogPath) + │ │ ├── 0 # パーティション番号0 + │ │ │ ├── 0_5.xlog # トランザクションログアーカイブ + │ │ │ ├── 0_6.xlog + │ │ │ └── ... + │ │ ├── 1 # パーティション番号1 + │ │ │ └── ... + │ │ └── ... + │ ├── cluster # クラスタメタ情報ディレクトリ (/dataStore/autoArchiveOutputClusterInfoPath) + │ │ ├── RECOVERY_0_1_100.info # クラスタリカバリ情報ファイル + │ │ ├── ROLE_0_1_100_0_OWNER.info # クラスタロール情報ファイル + │ │ ├── CP_0_1_100_200.info # クラスタチェックポイント情報ファイル + │ │ └── ... + │ └── ... + ├── backup1 # 別のバックアップ名 + │ └── ... + └── backup2 # 別のバックアップ名 + └── ... +``` + +**注意事項** + +- 自動アーカイブ機能を有効にすると、`gs_backup` を使用した自動ログバックアップは実行できません。ただし、それ以外のバックアップ操作は可能です。 +- 自動アーカイブ機能を有効にした状態でバックアップデータを復元して起動する場合、アーカイブに出力されたログファイル名が重複してエラーが発生する可能性があります。この場合、既存のアーカイブフォルダを退避させた後に起動し、再度 `gs_autoarchive` を実行してください。 + +#### スタンバイモード機能 + +スタンバイモード機能は、クラスタをリードオンリー(参照専用)として稼働させるための機能です。このモードでは、クライアントからの更新要求はすべてエラーとなります。 + +**主な特徴:** +- クラスタをリードオンリーとして稼働。 +- クライアントからの更新要求はエラーとして処理。 +- `gs_standby` コマンドを使用してオンラインでモード変更が可能。 +- モード変更時には、各ノードがクラスタから離脱している必要あり。 +- クラスタ構成を行う全ノードでスタンバイモード設定を一致させる必要あり。不一致の場合、クラスタ構成は失敗します。 + +**設定パラメータ:** + +| パラメータ | データ型 | デフォルト値 | 説明 | +|-----------------------------|----------|---------------|---------------------------------------| +| `/cluster/enableStandbyMode` | `bool` | `false` | スタンバイモード機能を有効にするかどうかを指定します。 | + +**スタンバイモードの有効化:** +スタンバイモード機能を有効にするには、ノード定義ファイルで以下の設定を行います。 +```json +/cluster/enableStandbyMode=true +``` + +この設定はスタンバイモード機能を有効にするだけであり、実際のモード変更は運用コマンド `gs_standby` を使用して行います。デフォルトでは無効(`false`)となっています。 + +**スタンバイモードの設定手順:** + +以下は、`gs_standby` コマンドを使用した一連の操作例です。 + +```bash +# スタンバイモードを有効化 +$ gs_standby -u admin/admin --true + +# 現在のスタンバイモードの確認 +$ gs_standby -u admin/admin +{ + "standby": true # スタンバイモードが有効 +} + +# 全ノードにスタンバイモードを設定 + +# クラスタ構成 +$ gs_joincluster -u admin/admin -c cluster1 -n 5 + +# アプリケーションを起動し、参照専用アクセスであることを確認 + +# 設定変更のためクラスタを一時停止 +$ gs_stopcluster -u admin/admin + +# スタンバイモードを無効化 +$ gs_standby -u admin/admin --false + +# スタンバイモードの確認 +$ gs_standby -u admin/admin +{ + "standby": false # スタンバイモードが無効 +} + +# 全ノードに設定を適用 + +# クラスタを再構成 +$ gs_joincluster -u admin/admin -c cluster1 -n 5 + +# アプリケーションを起動し、参照および更新アクセスが可能であることを確認 +``` + +**注意事項:** +- `gs_standby` コマンドを実行すると、ノード設定ファイルと同じディレクトリに `gs_standby.json` ファイルが作成されます。このファイルはスタンバイモードの管理情報として使用されるため、削除しないでください。 +- スタンバイモードの設定は、クラスタ構成を行う全ノードで一致させる必要があります。不一致の場合、クラスタ構成は失敗します。 +- クラスタ構成時には、スタンバイモードの設定状態を確認し、適切に設定を行ってください。 + +#### トランザクションログ適用機能 +トランザクションログ適用機能は、指定されたトランザクションログファイルを待機系サーバに適用し、プライマリサーバの更新内容をスタンバイサーバに反映させるための機能です。 + +**主な特徴:** +- サーバが稼働中でも、トランザクションログファイルを指定して適用が可能です。 +- 適用を行うには、サーバがスタンバイモード(`true`)である必要があります。 +- 適用は `gs_redo` コマンドを使用して実行します。適用はクラスタパーティションのオーナーノードでのみ可能です。 +- 適用されたデータは、オーナーノードからバックアップノードに自動的にレプリケーションされます。 +- トランザクションログの適用は、クラスタパーティション単位で指定できます。 +- 適用するログの順序が正しくない場合、エラーが発生します。 +- ログ適用はサーバ内部で分割実行され、デフォルトでは2MB単位で処理されます。 +- `gs_redo` コマンドは非同期で実行されるため、進捗状況や結果を別途確認する必要があります。 + +**設定パラメータ:** + +| パラメータ | データ型 | デフォルト値 | 説明 | +|-----------------------------|----------|---------------|---------------------------------------| +| `/sync/redoLogErrorKeepInterval` | `int` (秒) | 600秒 | トランザクションログ適用エラーが表示される保持期間を指定します。 | +| `/sync/redoLogMaxMessageSize` | `int` (バイト) | 2097152 (2MB) | トランザクションログ適用の分割実行時の読み込みサイズを指定します。 | + +**トランザクションログ適用手順:** + +1. **ログ適用の依頼** + - `gs_redo` コマンドを使用して、適用対象のログを指定します。 + - コマンド実行時にリクエストID (`uuid`, `requestId`) が返されます。 + + ```bash + $ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /var/lib/gridstore --logFileName=0_1.xlog + { + "requestId": 1, + "uuid": "3238cc45-a265-4825-b45f-30e9ce8dd3d2" + } + ``` + +2. **適用状況の確認** + - `gs_redo` コマンドの `--show` オプションを使用して、進捗状況を確認します。 + - ステータス (`status`) は以下のいずれかです: + - `WAIT`: REDO要求は受理されたが、まだ実行されていない。 + - `RUNNING`: 現在実行中。 + - `FAIL`: 実行結果がエラー。 + + ```bash + $ gs_redo -u admin/admin --show --uuid 3238cc45-a265-4825-b45f-30e9ce8dd3d2 --partitionId 0 --requestId 1 + { + "backupErrorList": [], + "counter": 0, + "logFileDir": "/var/lib/gridstore", + "logFileName": "0_1.xlog", + "partitionId": 0, + "requestId": 1, + "startTime": "2024-03-08T15:22:04.939+09:00", + "status": "RUNNING", + "uuid": "3238cc45-a265-4825-b45f-30e9ce8dd3d2" + } + ``` + +3. **エラー発生時の対応** + - ステータスが `FAIL` の場合、エラー内容は `/sync/redoLogErrorKeepInterval` で指定された期間保持されます。 + - エラー内容を確認し、原因を修正した後、再度ログ適用を実行してください。 + +**注意事項:** +- 適用するログの順序が正しくない場合、エラーが発生します。 +- 適用状況の確認は、リクエストIDをキーとして行います。 +- 適用が成功すると、バックアップノードへのレプリケーションが自動的に行われます。 + +以下の図は、トランザクションログ適用の流れを示しています。 + +
+トランザクションログ適用 +
トランザクションログ適用の流れ
+
+ +#### 運用手順 + +以下の4つの運用について順次説明します。 + +1. **スタンバイ準備** +2. **定常運用** +3. **フェイルオーバ** +4. **スイッチオーバ** + +以下では、3台構成の例を用いて説明します。コマンド実行例では、`$` をプロンプトとして使用し、プライマリ側の操作を `[primary*]`、スタンバイ側の操作を `[standby*]` として表記します。 + +
+サイト間データベースレプリケーション +
サイト間データベースレプリケーション
+
+ +**ノード構成 (3台構成)** + +| **役割** | **ホスト名** | **IPアドレス** | +|----------------|--------------|-------------------| +| プライマリ | `primary0` | 192.168.10.11 | +| | `primary1` | 192.168.10.12 | +| | `primary2` | 192.168.10.13 | +| スタンバイ | `standby0` | 192.168.11.11 | +| | `standby1` | 192.168.11.12 | +| | `standby2` | 192.168.11.13 | + +--- + +**ディレクトリ構成** + +***プライマリ側*** +``` +/primary/cluster/ + ├── conf + │ ├── gs_node.json + │ ├── (gs_stable_goal.json) # 自動生成 + │ └── (gs_standby.json) # 自動生成 + ├── data + │ ├── 0 + │ └── ... + ├── txnlog + │ ├── 0 + │ └── ... + └── backup + └── arch # スタンバイ時は不要 + ├── data + │ ├── 0 + │ └── ... + └── txnlog + ├── 0 + └── ... +``` + +***スタンバイ側*** +``` +/standby/cluster/ + ├── conf + │ ├── gs_node.json + │ ├── gs_stable_goal.json # 自動生成 + │ └── gs_standby.json # 自動生成 + ├── data + │ ├── 0 + │ └── ... + ├── txnlog + │ ├── 0 + │ └── ... + ├── backup # スタンバイ時は不要 + └── tmp_txnlog # 適用対象ログの一時保存フォルダ (運用側で事前に作成) + ├── 0 + └── ... +``` + +##### スタンバイ準備 + + +以下の手順でスタンバイ準備を行います。 + +| **順序** | **対象** | **手順** | +|----------|-------------------|------------------------| +| 1 | プライマリ
スタンバイ | ノード定義ファイルの設定 | +| 2 | プライマリ | ベースラインの生成 | +| 3 | スタンバイ | 転送先の決定 | +| 4 | プライマリ | ベースラインの転送 | +| 5 | スタンバイ | スタンバイクラスタの開始 | + +
+スタンバイ準備 +
スタンバイ準備
+
+ +**1. ノード定義ファイルの設定(プライマリ/スタンバイ)** + +運用開始前に、プライマリおよびスタンバイのノード定義ファイル(`gs_node.json`)に以下の設定を行います。この設定は、プライマリとスタンバイの役割が途中で変更される可能性を考慮したものです。 + +- **自動アーカイブ機能の有効化** + - `/dataStore/enableAutoArchive=true` + - `/dataStore/autoArchiveName="arch"` + +- **スタンバイモード設定機能の有効化** + - `/cluster/enableStandbyMode=true` + +- **クラスタパーティション配置固定化の有効化** + - `/cluster/enableStableGoal=true` + - `/cluster/initialGenerateStableGoal=true` + +以下は、設定例です: + +```json +{ + "dataStore": { + ... + "enableAutoArchive": true, + "autoArchiveName": "arch", + ... + }, + ... + "cluster": { + ... + "enableStandbyMode": true, + "enableStableGoal": true, + "initialGenerateStableGoal": true, + ... + } +} +``` + +これらの設定を適用することで、プライマリとスタンバイの切り替えや運用がスムーズに行えるようになります。 + +**2. ベースラインの生成(プライマリ)** + +プライマリのベースラインを生成します。この操作により、指定したフォルダ(例: `/primary/cluster/backup/arch`)にベースラインデータとトランザクションログが自動的に出力されます。 +以下のコマンドを実行してください: + +```bash +[primary*]$ gs_autoarchive -u admin/admin --start +``` + +実行が成功すると、指定フォルダにベースラインデータが保存され、以降のレプリケーションに使用可能な状態となります。 + +**3. 転送先の決定(スタンバイ)** + +プライマリで出力されるトランザクションログを、スタンバイ側のどのノードに転送・適用するかを決定します。これには、スタンバイクラスタのクラスタパーティション配置表が必要です。以下の手順で配置表を生成します。 + +1) スタンバイ側のノードを起動し、クラスタを構成します。 + + ```bash + [standby*]$ gs_startnode -u admin/admin + [standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin + ``` + + クラスタ構成が成功すると、各ノードのノード定義ファイルと同じディレクトリに `gs_stable_goal.json` というファイルが自動的に作成されます。このファイルは、クラスタパーティションのオーナーおよびバックアップ情報を記録しています。**このファイルは削除せずに残しておいてください。** + +2) クラスタを停止し、不要なデータを削除する + + `gs_stable_goal.json` ファイルの存在を確認した後、クラスタを停止します。クラスタ停止後、データファイルやトランザクションログなどの不要なファイルを削除します。 + + ```bash + [standby*]$ gs_stopcluster -u admin/admin + [standby*]$ gs_stopnode -u admin/admin + [standby*]$ rm -r -f /standby/cluster/data + [standby*]$ rm -r -f /standby/cluster/txnlog + ``` + +3) `gs_stable_goal.json` の内容を確認する + + `gs_stable_goal.json` ファイルには、各パーティションのオーナーおよびバックアップノードの情報が記録されています。以下はサンプル内容です。この例では、スタンバイ側のクラスタパーティション番号0のオーナーはアドレス `192.168.11.10`、バックアップはアドレス `192.168.11.11` となります。ポート番号はいずれも`10010`となります。 + + ```json + [ + { + "backup": [{"address": "192.168.11.11", "port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0" + }, + ... + ] + ``` +この情報を基に、プライマリからスタンバイへのトランザクションログ転送先を決定します。 + +**4. ベースラインの転送\[プライマリ\]** + +スタンバイクラスタの起動に必要なベースラインデータを転送します。以下に、クラスタパーティション0に対する一連の処理の流れを示します。 + +
+ベースライン転送 +
ベースライン転送
+
+ +1) **プライマリ側のクラスタパーティション情報を取得** + + プライマリ側で `gs_partition` コマンドを実行し、各クラスタパーティションのオーナノード情報を取得します。 + + ```bash + [primary*]$ gs_partition -u admin/admin + [ + { + "backup": [{"address": "192.168.10.11", "port": 10010}], + "owner": { + "address": "192.168.10.10", + "port": 10010 + }, + "pId": "0" + }, + ... + ] + ``` + +2) スタンバイ側のクラスタパーティション情報を確認 + + スタンバイ側で、事前に生成した `gs_stable_goal.json` を確認し、各クラスタパーティションのオーナおよびバックアップノード情報を取得します。 + + ```json + # スタンバイ側の gs_stable_goal.json の内容 + [ + { + "backup": [{"address": "192.168.11.11", "port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0" + }, + ... + ] + ``` + +3) 転送情報の整理 + + 上記の情報を基に、パーティション0に対する転送情報を以下のように整理します。 + + - **転送元** + - アドレス: `192.168.10.10` (primary0, オーナ) + - 対象ディレクトリ: `/primary/cluster/backup/arch/data/0`, `/primary/cluster/backup/arch/txnlog/0` + - **転送先** + - オーナノード: `192.168.11.10` (standby0) + - バックアップノード: `192.168.11.11` (standby1) + - 対象ディレクトリ: `/standby/cluster/data`, `/standby/cluster/txnlog` + +4) データの転送 + + 以下のコマンドを使用して、プライマリからスタンバイへデータを転送します。 + +```bash + # プライマリ -> スタンバイ (オーナノード) + [primary*]$ rsync -avz /primary/cluster/backup/arch/data/0 user@standby0:/standby/cluster/data + [primary*]$ rsync -avz /primary/cluster/backup/arch/txnlog/0 user@standby0:/standby/cluster/txnlog + + # プライマリ -> スタンバイ (バックアップノード) + [primary*]$ rsync -avz /primary/cluster/backup/arch/data/0 user@standby1:/standby/cluster/data + [primary*]$ rsync -avz /primary/cluster/backup/arch/txnlog/0 user@standby1:/standby/cluster/txnlog +``` + +5) 全クラスタパーティションへの適用 + + 上記の手順を、すべてのクラスタパーティションに対して繰り返し実施してください。 + + +**5. スタンバイクラスタの開始\[スタンバイ\]** + +以下の手順でスタンバイクラスタを開始します。 + +1) 各ノードの起動 + + 各ノードを起動します。 + + ```bash + [standby*]$ gs_startnode + ``` + +2) **スタンバイモードの設定** + + 各ノードをスタンバイモードに設定します。 + + ```bash + [standby*]$ gs_standby --true -u admin/admin + ``` + +3) **クラスタの稼働** + + クラスタを構成します。これ以降は、\[2. 定常運用\]の手順に従って運用を行います。 + + ```bash + [standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin + ``` + +**GridDBサービスを利用したクラスタ構成** + +スタンバイモードの設定はクラスタ離脱状態で行う必要があります。しかし、GridDBサービス経由で起動する場合、クラスタが自動構成されますのでクラスタ構成後、gs_stopclusterを行って実施した後にgs_joinclusterで再度クラスタを構成するか、以下の方法を実施してください。 + +1) **`gs_standby.json` ファイルの作成** + + 以下の内容で `gs_standby.json` ファイルを作成します。 + + ```json + {"standby": true} + ``` + +2) **ファイルの配置** + + 作成した `gs_standby.json` ファイルをノード定義ファイルと同じディレクトリに配置します。 + + ```bash + cp gs_standby.json /standby/cluster/conf + ``` + +3) **GridDBサービスの起動** + + GridDBサービスを利用してクラスタを構成します。 + + ```bash + [standby*]$ sudo systemctl start gridstore + ``` + +##### 定常運用 + +以下は、定常運用時の手順を示します。順序に従って操作を実行してください。 + +| **順序** | **対象** | **手順** | +|----------|-------------------|--------------------------------------------| +| 1 | プライマリ
スタンバイ | クラスタ構成の確認と更新 | +| 2 | プライマリ | トランザクションログの転送 | +| 3 | スタンバイ | トランザクションログの適用(REDO) | + +
+定常運用 +
定常運用の流れ
+
+ +**1. クラスタ構成の確認と転送情報の更新\[プライマリ/スタンバイ\]** + +各パーティションのプライマリ(転送元)のオーナーノードから、スタンバイ(転送先)のオーナーノードへトランザクションログファイルを転送します。この操作では、プライマリとスタンバイの両方で `gs_partition` コマンドを使用してクラスタパーティション配置表を確認します。通常、障害が発生していない限り、\[1. スタンバイ準備\]で転送したアドレスと同じになりますが、必ず現在の状態を確認してください。 + +1) プライマリのクラスタパーティション構成確認 + + 以下のコマンドを実行して、プライマリのクラスタパーティション構成を確認します。 + + ```bash + # プライマリのクラスタパーティション構成を確認 + [primary*]$ gs_partition -u admin/admin + ``` + + 実行結果の例: + + ```json + [ + { + "backup": [{"address": "192.168.10.11", "port": 10010}], + "owner": { + "address": "192.168.10.10", + "port": 10010 + }, + "pId": "0" + }, + ... + ] + ``` + +2) スタンバイのクラスタパーティション構成確認 + + 以下のコマンドを実行して、スタンバイのクラスタパーティション構成を確認します。 + + ```bash + # スタンバイのクラスタパーティション構成を確認 + [standby*]$ gs_partition -u admin/admin + [ + { + "backup": [{"address": "192.168.11.11", "port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0" + }, + ... + ] + ``` + + **注意点** + + - プライマリとスタンバイのクラスタパーティション構成を比較し、転送元(プライマリのオーナーノード)と転送先(スタンバイのオーナーノード)が正しいことを確認してください。 + - 障害や構成変更が発生している場合、転送元・転送先のアドレスが変更されている可能性があります。その場合は、最新の構成に基づいて転送を行ってください。 + - 転送元・転送先のアドレスが一致している場合でも、必ず最新の状態を確認することを推奨します。 + +**2. トランザクションログの転送(プライマリ)** + +スタンバイへ未転送(差分)のトランザクションログを特定し、転送します。転送元および転送先のアドレスは、手順1で取得した情報を使用します。スタンバイ側でトランザクションログを適用する際には、`gs_redo` コマンドを使用します。そのため、適用先となる一時保存ディレクトリを事前に作成しておきます。 + +```bash +[standby*]$ mkdir -p /standby/cluster/tmp_txnlog/0 +[standby*]$ mkdir -p /standby/cluster/tmp_txnlog/1 +... +``` + +以下は、パーティション0に対する転送情報の例です。転送先ディレクトリが `/standby/cluster/txnlog` ではないことに注意してください。 + +- **転送元** + - アドレス: `192.168.10.10`(primary0, オーナーノード) + - 対象ディレクトリ: `/primary/cluster/backup/arch/txnlog/0` + - 対象ファイル: `0_1.xlog`(未転送のログファイル。運用側で管理してください) + +- **転送先** + - アドレス: `192.168.11.10`(standby0, オーナーノード) + - 対象ディレクトリ: `/standby/cluster/tmp_txnlog/0` + +転送先情報に従い、データを転送します。 + +```bash +[primary0]$ rsync -avz /primary/cluster/backup/arch/txnlog/0/0_1.xlog user@standby0:/standby/cluster/tmp_txnlog/0 +``` + +同様の手順をすべてのクラスタパーティションに対して実施します。以下は例です。 + +```bash +[primary0]$ rsync -avz /primary/cluster/backup/arch/txnlog/0/0_1.xlog user@standby0:/standby/cluster/tmp_txnlog/0 +[primary1]$ rsync -avz /primary/cluster/backup/arch/txnlog/1/1_1.xlog user@standby1:/standby/cluster/tmp_txnlog/1 +... +``` + +以下の図は、クラスタパーティション0に着目した一連の処理の流れを示しています。 + +
+定常運用時の手順 +
定常運用時の手順
+
+ +**3. トランザクションログの適用(REDO)(スタンバイ)** + +プライマリから送信されたトランザクションログがスタンバイに到着した後、`gs_redo` コマンドを使用してトランザクションログを適用します。コマンド実行時にリクエストが受理されると、対応するリクエストIDが発行されます。 + +```bash +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp_txnlog/0 --logFileName 0_1.xlog +{"uuid":"3238cc45-a265-4825-b45f-30e9ce8dd3d2","requestId":1} +``` + +トランザクションログの適用は非同期で実行されるため、進捗状況を確認する必要があります。以下の例では、`status` が `RUNNING` であり、処理が継続中であることを示しています。 + +```bash +[standby*]$ gs_redo -u admin/admin --show --uuid 3238cc45-a265-4825-b45f-30e9ce8dd3d2 --partitionId 0 --requestId 1 +{ + "partitionId": 0, + "requestId": 1, + "uuid": "3238cc45-a265-4825-b45f-30e9ce8dd3d2", + "status": "RUNNING" + ... +} +``` + +一定時間経過後に再度確認します。結果が表示されない場合は、正常終了を意味します。この場合、次の未適用トランザクションログが存在する場合は、その適用を行います。 + +```bash +[standby*]$ gs_redo -u admin/admin --show --uuid 3238cc45-a265-4825-b45f-30e9ce8dd3d2 --partitionId 0 --requestId 1 +# 結果なしの場合は正常終了を意味する + +# 次の未適用トランザクションログの適用 +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp_txnlog/0 --logFileName 0_2.xlog +{"uuid":"3238cc45-a265-4825-b45f-30e9ce8dd3d2","requestId":2} +... +``` + +エラーが発生した場合、`status` が `FAIL` となります。`errorCode` や `errorName` を確認し、原因を特定して修正した後、再実行してください。 + +```bash +[standby*]$ gs_redo -u admin/admin --show --uuid 3238cc45-a265-4825-b45f-30e9ce8dd3d2 --partitionId 0 --requestId 1 +{ + "partitionId": 0, + "requestId": 1, + "uuid": "3238cc45-a265-4825-b45f-30e9ce8dd3d2", + "status": "FAIL", + "errorCode": 20050, + "errorName": "REDO_INVALID_READ_LOG", + ... +} +``` + +トランザクションログの適用が成功すると、スタンバイクラスタ内のバックアップノードにも自動的にレプリケーションが行われます。 + +以上の手順(1~3)を定期的に実行することで、定常運用を維持できます。実行間隔は、データ更新量、ネットワーク性能、チェックポイント時間(ログ出力単位)を考慮して決定してください。 + +##### フェイルオーバ + +**プライマリ障害時のフェイルオーバ手順** + +以下は、プライマリ障害時に実施するフェイルオーバ手順です。順序に従って操作を実行してください。 + +| **順序** | **対象** | **手順** | +|----------|-----------|----------| +| 1 | プライマリ
アプリケーション | アプリケーションを停止します。 | +| 2 | プライマリ | 未適用のトランザクションログを適用します。 | +| 3 | スタンバイ | プライマリクラスタへの昇格を判定します。 | +| 4 | スタンバイ | スタンバイモードを解除します。 | +| 5 | スタンバイ→新プライマリ | 新プライマリクラスタを開始します。 | +| 6 | アプリケーション | アプリケーションを再開します。 | +| 7 | 新プライマリ
旧プライマリ→新スタンバイ | 旧プライマリクラスタをスタンバイとして準備し再開します。 | + +
+フェイルオーバ +
フェイルオーバ手順の概要
+
+ + +**1. アプリケーションの停止\[プライマリ/アプリケーション\]** + +プライマリクラスタが稼働していないことを確認し、アプリケーションをすべて停止します。これにより、データの整合性を保ちながら切り替え作業を進めることができます。 + +**2. 未適用トランザクションログの適用\[スタンバイ\]** + +スタンバイ側で、プライマリから受信済みの未適用トランザクションログがある場合、それらをすべて適用します。以下のコマンドを使用して、ログを順番に適用してください。 + +```bash +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp/0 --logFileName=0_142.xlog +# 最終ログ(例: 0_143.xlog)を適用 +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp/0 --logFileName=0_143.xlog +``` + +**3. プライマリクラスタへの昇格判定\[スタンバイ\]** + +プライマリ障害時点の状態にできるだけ近づけるため、プライマリ側のアーカイブフォルダにアクセス可能か再確認します。アクセス可能であれば、未適用のトランザクションログをさらに適用してください。 + +適用可能なトランザクションログがすべて処理された場合、スタンバイをプライマリに昇格させる準備を進めます。以降の手順に従って、スタンバイをプライマリとして稼働させます。 + +**4. スタンバイモードの解除\[スタンバイ\]** + +スタンバイクラスタを一時的に離脱状態にするため、`gs_stopcluster` コマンドを使用してクラスタを停止します。 + +```bash +[standby*]$ gs_stopcluster -u admin/admin +``` + +その後、スタンバイ側の全ノードに対して `gs_standby` コマンドを実行し、スタンバイモードを解除します。 + +```bash +[standby*]$ gs_standby --false -u admin/admin +``` + +**5. 新プライマリクラスタの開始\[スタンバイ→新プライマリ\]** + +旧プライマリが復帰した場合に備え、自動アーカイブ機能を有効にしてベースラインとそれ以降のトランザクションログを保持します。 + +```bash +[standby*]$ gs_autoarchive -u admin/admin --start +``` + +全ノードの設定が完了したら、新プライマリクラスタを構成します。 + +```bash +[standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +**6. アプリケーションの再開\[アプリケーション\]** + +旧プライマリに接続していたアプリケーションの接続先を新プライマリクラスタに変更します。その後、アプリケーションを再起動し、サービスを再開します。この時点で新プライマリ側でのサービスが稼働状態となります。 + +**7. 旧プライマリクラスタのスタンバイ準備と再開\[新プライマリ/旧プライマリ→新スタンバイ\]** + +旧プライマリが復旧した場合、旧プライマリに存在するデータファイルおよびトランザクションログファイルを削除し、新スタンバイとしての準備を行います。この準備手順は、\[1. スタンバイ準備\]と同じ手順に従います。 + +準備が完了すると、旧プライマリは新スタンバイとして稼働し、旧スタンバイは新プライマリとして運用を継続します。この状態で、通常の運用手順(\[2. 定常運用\])に戻ります。 + +なお、旧プライマリを再びプライマリとして復帰させる場合は、\[3. フェイルオーバ\]手順ではなく、\[4. スイッチオーバ\]手順を実施することを推奨します。 + +##### スイッチオーバ + +**スイッチオーバ手順** + +スイッチオーバは予期せぬ障害に対応する[フェイルオーバ](#フェイルオーバ)とは異なり、計画的に実施することが可能です。そのため、プライマリとスタンバイのデータベース状態を完全に一致させることができます。以下にスイッチオーバ手順を示します。 + +| **順序** | **対象** | **手順** | +|----------|-------------------|--------------------------------------------| +| 1 | アプリケーション | アプリケーションの停止 | +| 2 | プライマリ | レプリケーション対象データの確定 | +| 3 | プライマリ | プライマリクラスタを停止 | +| 4 | プライマリ | 全トランザクションログの転送 | +| 5 | スタンバイ | 全トランザクションログの適用 (REDO) | +| 6 | スタンバイ | クラスタ一致の確認 | +| 7 | スタンバイ | スタンバイクラスタを停止 | +| 8 | プライマリ | プライマリクラスタのスタンバイクラスタへの移行準備 | +| 9 | スタンバイ | スタンバイクラスタをプライマリクラスタへの移行準備 | +| 10 | スタンバイ→新プライマリ | 新プライマリクラスタの稼働 | +| 11 | プライマリ→新スタンバイ | 新スタンバイクラスタの稼働 | +| 12 | アプリケーション | アプリケーションの再開 | + +
+スイッチオーバ +
スイッチオーバ
+
+ +**1. アプリケーションの停止\[アプリケーション\]** + +スイッチオーバ作業中は短時間のサービス停止が発生するため、事前に利用者へ告知を行い、アプリケーションを一時停止します。スイッチオーバ後は接続先がスタンバイ側に変更されるため、事前にアプリケーションの接続先を変更しておきます。 + +**2. レプリケーション対象データの確定\[プライマリ\]** + +プライマリの現時点での各クラスタパーティションのオーナーノードを取得し、オーナーのLSNを記録します。このLSNがスイッチオーバ時点の最終値となります。 + +次に、チェックポイントを実行してレプリケーション対象データを確定させます。 + +```bash +# チェックポイントを実行 +[primary*]$ gs_checkpoint -u admin/admin +``` + +チェックポイント完了後、各オーナーノードのLSN情報を記録します。 + +```bash +# 完了時点のLSN情報を記録 +[primary*]$ gs_partition -u admin/admin > primary_latest.json +``` + +**3. プライマリクラスタの停止\[プライマリ\]** + +プライマリクラスタを停止します。以下のコマンドを実行してください。 + +```bash +[primary*]$ gs_stopcluster -u admin/admin +``` + +停止後、以降の作業で自動アーカイブ機能は不要となるため、無効化します。 + +```bash +[primary*]$ gs_autoarchive --stop +``` + +**4. 全トランザクションログの転送\[プライマリ\]** + +プライマリで出力されたすべてのトランザクションログをスタンバイに転送します。以下のコマンドを使用して、漏れなく転送してください。 + +```bash +# トランザクションログの転送 +[primary0]$ rsync -avz /primary/cluster/backup/arch/txnlog/0/0_240.xlog user@standby0:/standby/cluster/tmp/0 +# 最終トランザクションログの転送 +[primary0]$ rsync -avz /primary/cluster/backup/arch/txnlog/0/0_241.xlog user@standby0:/standby/cluster/tmp/0 +``` + +すべてのトランザクションログが転送されたことを確認してください。 + +**5. トランザクションログの適用 (REDO) \[スタンバイ\]** + +スタンバイ側で、すべてのトランザクションログを漏れなく適用します。以下のコマンドを使用して、順番にトランザクションログを適用してください。 + +```bash +# トランザクションログの適用 +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp/0 --logFileName=0_240.xlog + +# 最終トランザクションログの適用 +[standby*]$ gs_redo -u admin/admin --redo --partitionId 0 --logFilePath /standby/cluster/tmp/0 --logFileName=0_241.xlog +``` + +**6. クラスタ状態の確認 \[スタンバイ\]** + +スタンバイ側で、各パーティションのオーナーノードのLSNが、手順 2 で取得した `primary_latest.json` に記録されたプライマリ側のオーナーLSNと一致しているか確認します。一致していれば、レプリケーションが正常に完了したことを意味します。 + +**7. スタンバイクラスタの停止 \[スタンバイ\]** + +スタンバイクラスタを停止します。以下のコマンドを実行してください。 + +```bash +[standby*]$ gs_stopcluster -u admin/admin +``` + +これで、スタンバイクラスタの停止が完了します。 + +**8. プライマリクラスタをスタンバイクラスタへ移行する準備\[プライマリ\]** + +スイッチオーバの場合、フェイルオーバとは異なり、スタンバイ側のデータファイルやトランザクションログファイルを削除する必要はありません。 + +プライマリクラスタにスタンバイモードを設定します。以下のコマンドを実行してください。 + +```bash +[primary*]$ gs_standby --true -u admin/admin +``` + +**9. スタンバイクラスタをプライマリクラスタへ移行する準備\[スタンバイ\]** + +スタンバイクラスタのスタンバイモードを解除します。以下のコマンドを実行してください。 + +```bash +[standby*]$ gs_standby --false -u admin/admin +``` + +スイッチオーバの場合、フェイルオーバとは異なり、ベースラインの再生成は不要です。そのため、この手順をスキップし、自動アーカイブを有効化します。以下のコマンドを実行してください。 + +```bash +[standby*]$ gs_autoarchive -u admin/admin --start --skipBaseline +``` + +これでスタンバイクラスタが新しいプライマリクラスタとして稼働する準備が整いました。 + +**10. 新プライマリクラスタの稼働\[スタンバイ→新プライマリ\]** + +新しいプライマリクラスタを稼働させるには、以下のコマンドを実行します。 + +```bash +[standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +これにより、スタンバイ側のクラスタが新しいプライマリクラスタとして稼働を開始します。 + +**11. 新スタンバイクラスタの稼働\[プライマリ→新スタンバイ\]** + +旧プライマリクラスタを新しいスタンバイクラスタとして稼働させるには、以下のコマンドを実行します。 + +```bash +[primary*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +これにより、旧プライマリクラスタが新しいスタンバイクラスタとして動作を開始します。 + +**12. アプリケーションの再開\[アプリケーション\]** + +アプリケーションの接続先を新しいプライマリクラスタに変更した後、アプリケーションを再起動してサービスを再開します。これにより、通常の運用が再開されます。 + +以降は、**\[2. 定常運用\]** の手順に従って運用を継続してください。 + +### メモリベースレプリケーション + +メモリベースレプリケーションでは、プライマリで生成されたトランザクションログをメモリベースで直接スタンバイにレプリケーションします。この方式に必要なサーバ機能は以下の通りです。それぞれの詳細については、次節で説明します。 + +**必要なサーバ機能** + +1. **ベースライン生成機能** + - スタンバイのベースDBを作成する機能です。オプションとしてアーカイブを作成することも可能です。 + +2. **スタンバイモード機能** + - クラスタをリードオンリー(参照専用)として稼働させる機能です。このモードでは、クライアントからの更新要求はすべてエラーとなります。 + +3. **サイト間連携機能** + - プライマリとスタンバイをオンライン状態で相互接続および監視します。プライマリで生成されたトランザクションログをスタンバイに自動的にレプリケーションする機能です。 + +#### ベースライン生成機能 + +メモリベース方式の主な特徴は以下の通りです: + +- **ベースDBの作成**: スタンバイ開始時に必要なベースDBは、`gs_autoarchive` コマンドまたは `gs_backup` コマンドを使用して作成します。 +- **トランザクションログの自動レプリケーション**: メモリベース方式では、接続後にトランザクションログが自動的にレプリケーションされるため、`gs_autoarchive` を使用した継続的なトランザクションログ出力は必須ではありません。 +- **レプリケーションの自動化**: 定常状態ではレプリケーションが自動的に実行されるため、運用時に特別な操作は不要です。また、障害発生などで一時的にレプリケーションが失敗した場合でも、プライマリのトランザクションログファイルを使用して自動的に再同期が行われ、通常の状態に復帰します。 +- **アーカイブの保存**: 必要に応じて、`gs_autoarchive` を利用してアーカイブを保存し続けることで、トランザクションログファイルの消失によるレプリケーション失敗を防ぐことが可能です。この場合、同期保存に十分な空き容量を確保することが推奨されます。 + +自動アーカイブ機能の詳細については、[こちら](#自動アーカイブ機能)をご参照ください。 + +##### 初期DB生成手順 + +以下に、メモリベース方式を利用する際の初期DB生成手順を示します。 + +1) **バックアップディレクトリの確認** + 自動アーカイブが保存されるディレクトリを確認します。 + + ```bash + $ cat /var/lib/gridstore/conf/gs_node.json + ``` + +2) **自動アーカイブの開始** + 自動アーカイブを開始してベースDBを生成します。 + + ```bash + $ gs_autoarchive -u admin/admin --start + ``` + +3. **ベースDBの確認** + ベースDBが正常に生成されていることを確認します。 + + ```bash + $ gs_backuplist -u admin/admin + + BackupName Status StartTime EndTime + ------------------------------------------------------------------------ + arch OK 2014-09-25T05:30:02+0900 2014-09-25T05:59:03+0900 + ``` + +4. **アーカイブの停止(オプション)** + メモリベース方式では、以降のトランザクションログは自動的にレプリケーションされるため、アーカイブを停止することも可能です。ただし、必要に応じて継続して保存することもできます。 + + ```bash + $ gs_autoarchive -u admin/admin --stop + ``` + + `gs_autoarchive` の代わりに `gs_backup` を使用してベースラインを生成する場合、以下の手順を実行してください。 + +1. **バックアップの作成** + 以下のコマンドを実行して、バックアップを作成します。 + + ```bash + $ gs_backup -u admin/admin arch + ``` + +2. **バックアップの確認** + 作成されたバックアップが正常であることを確認するには、以下のコマンドを実行します。 + + ```bash + $ gs_backuplist -u admin/admin + + BackupName Status StartTime EndTime + ------------------------------------------------------------------------ + arch OK 2014-09-25T05:30:02+0900 2014-09-25T05:59:03+0900 + ``` + +これにより、指定した名前(例: `arch`)でバックアップが作成され、ベースラインとして利用可能になります。 + +##### ファイル構成 + +メモリベース方式では、スタンバイのベースDBとして使用するデータフォルダが必須です。以下に、ファイル構成の例を示します。 +以下の構成例では、/backup/archive/dataのフォルダがベースDBとなり、これをスタンバイのベースDBとして利用します。 + +``` +/var/lib/gridstore + ├── backup # バックアップ/アーカイブの基点ディレクトリ (/dataStore/backupPath) + │ ├── archive # アーカイブ名 (/dataStore/autoArchiveName) + │ │ ├── gs_backup_info.json # アーカイブ情報ファイル + │ │ ├── gs_backup_info_digest.json # アーカイブダイジェスト情報ファイル + │ │ ├── gs_lsn_info.json # アーカイブLSN情報ファイル + │ │ ├── gs_auto_archive_command_param.json # アーカイブ実行コマンドパラメータファイル + │ │ ├── data # データフォルダ (/dataStore/dbPath) - スタンバイのベースDBとして利用 + │ │ │ ├── 0 # パーティション番号0 + │ │ │ │ ├── 0_part_0.dat # データファイルアーカイブ + │ │ │ │ ├── 0_4.cplog # チェックポイントログアーカイブ + │ │ │ │ └── ... # その他のファイル + │ │ │ ├── 1 # パーティション番号1 + │ │ │ │ └── ... # その他のファイル + │ │ │ └── ... # その他のパーティション + │ │ ├── txnlog # トランザクションログフォルダ (/dataStore/transactionLogPath) + │ │ │ ├── 0 # パーティション番号0 + │ │ │ │ ├── 0_5.xlog # トランザクションログアーカイブ + │ │ │ │ ├── 0_6.xlog + │ │ │ │ └── ... # その他のログ + │ │ │ ├── 1 # パーティション番号1 + │ │ │ │ └── ... # その他のログ + │ │ │ └── ... # その他のパーティション + │ │ ├── cluster # クラスタメタ情報ディレクトリ (/dataStore/autoArchiveOutputClusterInfoPath) + │ │ │ ├── RECOVERY_0_1_100.info # クラスタリカバリ情報ファイル + │ │ │ ├── ROLE_0_1_100_0_OWNER.info # クラスタロール情報ファイル + │ │ │ ├── CP_0_1_100_200.info # クラスタチェックポイント情報ファイル + │ │ │ └── ... # その他のメタ情報 + │ │ └── ... # その他のアーカイブ + │ ├── backup1 # 別のバックアップ名 + │ │ └── ... # バックアップ内容 + │ ├── backup2 # 別のバックアップ名 + │ │ └── ... # バックアップ内容 + │ └── ... # その他のバックアップ +``` + +##### スタンバイモード機能 + +スタンバイモードの概要はファイルベース、メモリベースいずれでも共通となります。 +詳細は、[こちら](#スタンバイモード機能)をご参照ください。 + +##### サイト間レプリケーション連携機能 + +サイト間レプリケーション連携機能とは、プライマリとスタンバイをオンライン状態で接続し、相互に監視しながら、プライマリで生成されたトランザクションログをスタンバイにリアルタイムで自動レプリケーションする機能です。概要は以下の通りです。 + +- **オンライン接続と監視**: プライマリとスタンバイのサーバをオンラインで接続し、相互に監視します。接続や切断を検知し、必要に応じて転送先の切り替えを行います。 +- **ノード構成の定義**: プライマリとスタンバイのノード構成(クラスタ)は、それぞれの設定ファイルで定義します。 +- **リアルタイムレプリケーション**: プライマリで生成されたトランザクションログをスタンバイにメモリベースでリアルタイムにレプリケーションします。これにより、レプリケーションラグは極めて小さくなります。 +- **バックアップへの自動レプリケーション**: スタンバイがクラスタ構成の場合、プライマリからスタンバイへのレプリケーション後、スタンバイ内のバックアップにも自動的にレプリケーションされます。 +- **柔軟な構成**: プライマリとスタンバイのクラスタ構成は異なるノード数でも運用可能です。 +- **自動復旧**: レプリケーションが失敗してスタンバイのトランザクションログが欠損しても、自動的に復旧手順が実行され、正常な状態に戻ります。 +- **復旧用ログの保持**: 復旧処理にはプライマリのトランザクションログファイルを使用するため、ログの保持期間を運用時に設定する必要があります。必要なログが欠損している場合は、ベースDBを再生成します。 + +**設定に必要なパラメータ** + +以下の表に、メモリベース方式の設定に必要なパラメータを示します。本機能を利用する際に必須となる設定は、`enable` と `siteConnectionId` です。これら以外の項目については、デフォルト設定のまま(設定ファイルに記載しない状態)でも動作可能です。一部の項目はオンラインで変更することもできます。`keepLogFileCount` は、提供するサービスが定義する障害復旧時間に応じて適切に設定することを推奨します。 + + +| パラメータ名 | データ型 | デフォルト値 | 説明 | オンライン変更 | 必須項目 | +|-------------------------------------------|------------|---------------|----------------------------------------------------------------------|----------------|----------| +| `/transaction/siteReplication/enable` | `bool` | `false` | サイト間レプリケーション連携機能を有効にするかを指定します | 可 | あり | +| `/transaction/siteReplication/siteConnectionId` | `string` | `""` | サイト間レプリケーション連携機能のキーとなる接続IDを指定します | 不可 | あり | +| `/transaction/siteReplication/heartbeatInterval` | `int` | `15s` | サイト間接続のハートビート間隔(秒)を指定します | 不可 | なし | +| `/transaction/siteReplication/heartbeatRetryCount` | `int` | `1` | ハートビートの再試行回数を指定します | 不可 | なし | +| `/transaction/siteReplication/partitionCheckInterval` | `int` | `15s` | 各パーティションの状態監視間隔(秒)を指定します | 不可 | なし | +| `/transaction/siteReplication/keepLogFileCount` | `int` | `5` | トランザクションログファイルの保持数を指定します | 可 | なし | +| `/transaction/siteReplication/syncWaitTime` | `int` | `0ms` | ログ欠損時の同期処理実行間隔(ミリ秒)を指定します | 不可 | なし | +| `/transaction/siteReplication/limitUpdateDelayTime` | `int` | `300s` | スタンバイ側の更新異常判定時間(秒)を指定します | 可 | なし | +| `/transaction/siteReplication/limitLsnDifference` | `int` | `100000000` | スタンバイ側の更新異常判定のLSN差分閾値を指定します | 可 | なし | +| `/transaction/siteReplication/replicationMember` | `json` | `""` | 相手サイトのノード構成情報(アドレスとポート番号リスト)を指定します | 不可 | なし | + + +**設定例** + +以下は、クラスタ定義ファイル(`gs_cluster.json`)の設定例です。運用開始時に必須で決定するのは、サイト間接続IDと相手サイトのアドレスリストです。 + +```json +"transaction": { + ... + "siteReplication": { + "enable": true, + "siteConnectionId": "R3QGnWlGg6Lseujf0EtbNomgOB1P1wfo", + "keepLogFileCount": 10, + "replicationMember": [ + {"address": "192.168.10.11", "port": 10001}, + {"address": "192.168.10.12", "port": 10001}, + {"address": "192.168.10.13", "port": 10001} + ] + } +} +``` + +サイト間接続機能の状態は、メタテーブル `#replication_stats` を使用して確認できます。このメタテーブルをSQLクエリで参照することで、サイト間レプリケーションの状態やエラー情報を簡単に把握できます。なお、この操作はプライマリおよびスタンバイの両方で実行可能ですが、通常はプライマリ側の情報を参照して状態確認を行うことを推奨します。 + +**メタテーブル `#replication_stats` のカラム詳細** + +| カラム名 | データ型 | 説明 | +|---------------------------|------------|----------------------------------------------------------------------| +| `CLUSTER_PARTITION_INDEX` | `int` | クラスタパーティション番号。情報はクラスタパーティション単位で1レコードとして出力されます。オーナーが未決定の場合は出力されません。| +| `CLUSTER_REPLICATION_ROLE`| `string` | サイト間レプリケーションのロール。`PRIMARY` または `STANDBY` のいずれか。 | +| `PRIMARY_ADDRESS` | `string` | プライマリのオーナーアドレス。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `PRIMARY_PORT` | `short` | プライマリのオーナーポート。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `STANDBY_ADDRESS` | `string` | スタンバイのオーナーアドレス。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `STANDBY_PORT` | `short` | スタンバイのオーナーポート。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `PRIMARY_LSN` | `long` | プライマリのLSN。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `STANDBY_LSN` | `long` | スタンバイのLSN。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `PRIMARY_LAST_UPDATED_TIME`| `timestamp`| プライマリの最終更新時刻。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `STANDBY_LAST_UPDATED_TIME`| `timestamp`| スタンバイの最終更新時刻。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `REPLICATION_STATUS` | `string` | レプリケーション状態。以下のいずれかが表示されます:
- `NODE_DISCONNECTED`(未接続)
- `NODE_CONNECTED`(接続済)
- `REPLICATION_SYNC`(同期中)
- `REPLICATION_REALTIME`(リアルタイムレプリケーション中)
- `REPLICATION_LOSS`(レプリケーション欠損) | +| `LAST_ERROR_CODE` | `int` | 最後に発生したエラーコード。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | +| `LAST_ERROR_TIME` | `timestamp`| 最後に発生したエラー時刻。未決定、またはサイト間レプリケーション連携機能が無効の場合は `NULL`。 | + + +以下のSQLを実行して、サイト間レプリケーションの状態を確認します。 + +```sql +SELECT * FROM "#replication_stats"; +``` + +以下は、クラスタパーティション数に応じた出力例です。通常、プライマリ側で進捗状況を確認することが推奨されますが、スタンバイ側でも実行可能です。プライマリ側で取得するスタンバイ側の情報や、スタンバイ側で取得するプライマリ側の情報には一定のタイムラグが生じる点に注意してください。 + +| CLUSTER_PARTITION_INDEX | CLUSTER_REPLICATION_ROLE | PRIMARY_ADDRESS | PRIMARY_PORT | STANDBY_ADDRESS | STANDBY_PORT | PRIMARY_LSN | STANDBY_LSN | PRIMARY_LAST_UPDATED_TIME | STANDBY_LAST_UPDATED_TIME | REPLICATION_STATUS | LAST_ERROR_CODE | LAST_ERROR_TIME | +|--------------------------|--------------------------|-----------------|--------------|-----------------|--------------|-------------|-------------|---------------------------|---------------------------|----------------------|-----------------|-----------------| +| 1 | PRIMARY | 192.168.10.11 | 10001 | 192.168.11.12 | 10001 | 4104 | 4104 | Thu Mar 27 15:05:16 JST 20 | Thu Mar 27 15:05:19 JST 20 | REPLICATION_REALTIME | | | +| 2 | PRIMARY | 192.168.10.12 | 10001 | 192.168.11.13 | 10001 | 7004 | 6900 | Thu Mar 27 15:05:16 JST 20 | Thu Mar 27 15:05:19 JST 20 | REPLICATION_REALTIME | | | + + +**注意事項** +- `replicationMember` には、**相手サイト** のクラスタを構成する **トランザクションサービス** のアドレスとポート番号を指定してください。 +- `heartbeatInterval` および `partitionCheckInterval` は、異常検知の速度に影響します。値を小さく設定すると異常検知が早くなりますが、システム負荷が増加する可能性があります。 +- `limitUpdateDelayTime` および `limitLsnDifference` は、スタンバイ側でのレプリケーション欠損を検知するためのパラメータです。過剰な検知を防ぐため、デフォルト値での運用を推奨します。ただし、検知速度を調整したい場合は適宜変更してください。 +- `keepLogFileCount` の設定は、レプリケーション欠損時の復旧可能な期間に影響します。運用開始時に、システム要件に応じた適切な値を設定してください。 +- レプリケーション欠損が発生し、必要なトランザクションログが削除されて以降のレプリケーションが継続できない場合、`#replication_stats` に `REPLICATION_LOSS` と表示されます。この場合、ベースDBを再生成しなおす必要があります。 + +#### 運用手順 + +以下の4つの運用について、メモリベース方式のサイト間データベースレプリケーションを用いた手順を示します。 + +1. **スタンバイ準備** +2. **定常運用** +3. **フェイルオーバ** +4. **スイッチオーバ** + +以下では、3台構成の例を用いて説明します。コマンド実行例では、`$` をプロンプトとして使用し、プライマリ側の操作を `[primary*]`、スタンバイ側の操作を `[standby*]` として表記します。 + +メモリベース方式では、トランザクションログが自動的にレプリケーションされるため、ここでは継続的なログ出力を行わずに運用する方式を示します。 + +
+サイト間データベースレプリケーション_メモリベース +
サイト間データベースレプリケーション(メモリベース)
+
+ +**ノード構成 (3台構成)** + +| **役割** | **ホスト名** | **IPアドレス** | +|----------------|--------------|-------------------| +| プライマリ | `primary0` | 192.168.10.11 | +| | `primary1` | 192.168.10.12 | +| | `primary2` | 192.168.10.13 | +| スタンバイ | `standby0` | 192.168.11.11 | +| | `standby1` | 192.168.11.12 | +| | `standby2` | 192.168.11.13 | + + +**ディレクトリ構成** + +***プライマリ側*** +``` +/primary/cluster/ + ├── conf + │ ├── gs_node.json + │ ├── (gs_stable_goal.json) # 自動生成 + │ └── (gs_standby.json) # 自動生成 + ├── data + │ ├── 0 + │ └── ... + ├── txnlog + │ ├── 0 + │ └── ... + └── backup + └── arch + ├── data # スタンバイで用いるベースDB + │ ├── 0 + │ └── ... + └── txnlog # メモリベースでは必須ではなくオプション + ├── 0 + └── ... +``` + +***スタンバイ側*** +``` +/standby/cluster/ + ├── conf + │ ├── gs_node.json + │ ├── (gs_stable_goal.json) # 自動生成 + │ └── (gs_standby.json) # 自動生成 + ├── data + │ ├── 0 + │ └── ... + ├── txnlog + │ ├── 0 + │ └── ... + ├── backup # スタンバイ時は不要 + └── tmp_txnlog # メモリベースではオプション + ├── 0 + └── ... +``` + +##### スタンバイ準備 + +スタンバイ準備の手順を以下に示します。以下の順序で実行してください。 + +| **順序** | **対象** | **手順** | +|----------|-------------------|--------------------------------------------| +| 1 | プライマリ
スタンバイ | ノード定義ファイルの設定 | +| 2 | プライマリ | ベースラインの生成 | +| 3 | スタンバイ | 転送先の決定 | +| 4 | プライマリ | ベースラインの転送 | +| 5 | スタンバイ | スタンバイクラスタの開始 | + +
+スタンバイ準備の手順_メモリベース +
スタンバイ準備の手順(メモリベース)
+
+ +1. 定義ファイルの設定\[プライマリ/スタンバイ\] + + 運用開始前に、プライマリ側およびスタンバイ側のクラスタ定義ファイル (`gs_cluster.json`) とノード定義ファイル (`gs_node.json`) に以下の設定を行ってください。 + + **クラスタ定義ファイル (`gs_cluster.json`) の設定** + + - **サイト間連携機能の有効化** + - サイト間連携機能を有効にします。 + ```json + "/transaction/siteReplication/enable": true + ``` + + - **サイト間接続用の接続キー設定** + - プライマリとスタンバイで共通の接続キーを設定します。 + ```json + "/transaction/siteReplication/siteConnectionId": "R3QGnWlGg6Lseujf0EtbNomgOB1P1wfo" + ``` + + - **トランザクションログの保持期間設定** + - 想定する障害発生期間に合わせて設定します。この値はオンラインで変更可能です。 + ```json + "/transaction/siteReplication/keepLogFileCount": 10 + ``` + + - **接続対象ノードのアドレスリスト設定** + - プライマリの場合はスタンバイのアドレスリストを、スタンバイの場合はプライマリのアドレスリストを設定します。 + + - **プライマリの設定例:** + ```json + "/transaction/siteReplication/replicationMember": [ + {"address": "192.168.11.11", "port": 10001}, + {"address": "192.168.11.12", "port": 10001}, + {"address": "192.168.11.13", "port": 10001} + ] + ``` + + - **スタンバイの設定例:** + ```json + "/transaction/siteReplication/replicationMember": [ + {"address": "192.168.10.11", "port": 10001}, + {"address": "192.168.10.12", "port": 10001}, + {"address": "192.168.10.13", "port": 10001} + ] + ``` + + - **その他の設定** + - 必要に応じて追加設定を行ってください。 + + 以下に上記設定を行った例を記載します。 + + **プライマリの設定** + ```json + "transaction": { + "siteReplication": { + "enable": true, + "siteConnectionId": "R3QGnWlGg6Lseujf0EtbNomgOB1P1wfo", + "keepLogFileCount": 10, + "replicationMember": [ + {"address": "192.168.11.11", "port": 10001}, + {"address": "192.168.11.12", "port": 10001}, + {"address": "192.168.11.13", "port": 10001} + ] + } + } + ``` + + **スタンバイの設定** + ```json + "transaction": { + "siteReplication": { + "enable": true, + "siteConnectionId": "R3QGnWlGg6Lseujf0EtbNomgOB1P1wfo", + "keepLogFileCount": 10, + "replicationMember": [ + {"address": "192.168.10.11", "port": 10001}, + {"address": "192.168.10.12", "port": 10001}, + {"address": "192.168.10.13", "port": 10001} + ] + } + } + ``` + + **ノード定義ファイル (`gs_node.json`) の設定** + + - **自動アーカイブ機能の有効化** + - メモリベース方式では必須ではありませんが、必要時に備えて設定します。 + ```json + "/dataStore/enableAutoArchive": true + "/dataStore/autoArchiveName": arch" + ``` + + - **スタンバイモード設定の有効化** + - スタンバイモードの設定を有効化します。 + ```json + "/cluster/enableStandbyMode": true + ``` + + - **クラスタパーティション配置固定化の有効化** + - クラスタパーティション配置固定化を有効化します。 + ```json + "/cluster/enableStableGoal": true + "/cluster/initialGenerateStableGoal": true + ``` + 以下に上記設定を行った例を記載します。 + + ```json + { + "dataStore": { + "enableAutoArchive": true, + "autoArchiveName": "arch" + }, + "cluster": { + "enableStandbyMode": true, + "enableStableGoal": true, + "initialGenerateStableGoal": true + } + } + ``` + +2. ベースラインの生成\[プライマリ\] + +プライマリのベースラインを生成するには、以下の手順を実行してください。 + +1. **ベースラインの生成** + 以下のコマンドを実行し、指定フォルダ(例: `/primary/cluster/backup/arch`)にベースラインとなるデータベースファイル(ベースDB)が出力されることを確認します。 + + ```bash + [primary*]$ gs_autoarchive -u admin/admin --start + ``` + +2. **ベースライン生成の確認** + ベースDBが正常に生成されたかを確認するには、以下のコマンドを実行してください。 + + ```bash + [primary*]$ gs_backuplist -u admin/admin + + BackupName Status StartTime EndTime + ------------------------------------------------------------------------ + arch OK 2014-09-25T05:30:02+0900 2014-09-25T05:59:03+0900 + ``` + +3. **アーカイブの停止** + メモリベース方式では、以降のトランザクションログファイルは自動的にレプリケーションされるため、この時点でアーカイブを停止します。以下のコマンドを実行してください。 + + ```bash + [primary*]$ gs_autoarchive -u admin/admin --stop + ``` + +以上の手順で、プライマリのベースライン生成が完了します。同様の手順はgs_backupでフルバックアップ生成でも可能です。 + +**3. 転送先の決定\[スタンバイ\]** + +**スタンバイクラスタの準備** + +スタンバイクラスタを構成するために、ベースラインの配置先を事前に準備します。配置先はgs_stableGoal.jsonを作成して起動することで固定化することができます。 +設定時にクラスタパーティション配置固定化を有効化した場合は以下のように容易にこのファイルを作成することができます。 + +1. **スタンバイ側ノードの起動とクラスタ構成** + + スタンバイ側のノードを起動し、クラスタを構成します。この際、スタンバイ側のデータは空の状態で起動します。以下のコマンドを実行してください。 + + ```bash + [standby*]$ gs_startnode -u admin/admin + [standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin + ``` + +2. **クラスタパーティション配置表の生成** + + クラスタ構成が成功すると、各ノードのノード定義ファイルと同じディレクトリに `gs_stable_goal.json` というファイルが自動生成されます。このファイルにはクラスタパーティションの配置情報が記録されています。**このファイルは削除せずに保存してください。** + +3. **クラスタの停止と不要データの削除** + + `gs_stable_goal.json` の生成を確認した後、以下のコマンドを実行してクラスタを停止し、不要なデータファイルを削除します。 + + ```bash + [standby*]$ gs_stopcluster -u admin/admin + [standby*]$ gs_stopnode -u admin/admin + [standby*]$ rm -r -f /standby/cluster/data + [standby*]$ rm -r -f /standby/cluster/txnlog + ``` + + この操作により、スタンバイ側ベースDBの配置準備が整います。 + +4. **`gs_stable_goal.json` の内容確認** + + `gs_stable_goal.json` ファイルには、各パーティションのオーナーおよびバックアップノードの情報が記録されています。以下はそのサンプルです。この例では、クラスタパーティション番号 0 のオーナーノードのアドレスは `192.168.11.10`、バックアップノードのアドレスは `192.168.11.11` です。 + + この情報を基に、オーナーノードに対応するデータフォルダへプライマリのベースラインを配置します。 + + ```json + [ + { + "backup": [{"address": "192.168.11.11", "port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0" + } + ] + ``` + +**4. ベースラインの転送\[プライマリ\]** + +スタンバイに必要なベースラインであるベースラインを転送します。クラスタパーティション0に対する一連の処理概略をまとめると以下のようになります。 + +
+ベースライン転送_メモリベース +
ベースライン転送(メモリベース)
+
+ +以下にその手順を示します。まず、転送元となる、プライマリにおける各クラスタパーティションのオーナノードを取得します。これはプライマリにおいてgs_partitionを実行します。 + +``` bash +[primary*]$ gs_partition -u admin/admin + [ + { + "backup": [{"address": "192.168.10.11","port": 10010}], + "owner": { + "address": "192.168.10.10", + "port": 10010 + }, + "pId": "0", + }, + : + ] +``` + +次に、転送先となる、スタンバイにおける各クラスタパーティションのオーナおよびバックアップを取得します。これは、3.で生成したgs_stale_goal.jsonを用います。スタンバイ準備フェーズではオーナだけでなく、ノードへの転送も必要となります。 + +``` bash +# スタンバイ側のgs_stable_goal.jsonの内容 + [ + { + "backup": [{"address": "192.168.11.11","port": 10010}], + "owner": { + "address": "192.168.11.10", + "port": 10010 + }, + "pId": "0", + }, + : + ] + +``` + +上記より、パーティション0に対する転送情報は以下の通りです。 + +- **転送元** + - **アドレス**: `192.168.10.10` (primary0, オーナーノード) + - **対象ディレクトリ**: `/primary/cluster/backup/arch/data/0`, `/primary/cluster/backup/arch/txnlog/0` + +- **転送先** + - **アドレス**: + - `192.168.11.10` (standby0, オーナーノード) + - `192.168.11.11` (standby1, バックアップノード) + - **対象ディレクトリ**: `/standby/cluster/data`, `/standby/cluster/txnlog` + +転送先情報に従い、以下のコマンドを使用してデータを転送してください。 + +```bash +# 192.168.10.10 (primary0) -> 192.168.11.10 (standby0, オーナーノード) +[primary*]$ rsync -avz user@primary0:/primary/cluster/backup/arch/data/0 user@standby0:/standby/cluster/data +[primary*]$ rsync -avz user@primary0:/primary/cluster/backup/arch/txnlog/0 user@standby0:/standby/cluster/txnlog + +# 192.168.10.10 (primary0) -> 192.168.11.11 (standby1, バックアップノード) +[primary*]$ rsync -avz user@primary0:/primary/cluster/backup/arch/data/0 user@standby1:/standby/cluster/data +[primary*]$ rsync -avz user@primary0:/primary/cluster/backup/arch/txnlog/0 user@standby1:/standby/cluster/txnlog +``` + +同様の手順をすべてのクラスタパーティションに対して実施してください。これにより、ベースDBの配置が完了します。 + +**5. スタンバイクラスタの開始\[スタンバイ\]** + +**スタンバイクラスタの開始手順** + +1. **各ノードの起動** + スタンバイクラスタを構成する各ノードを起動します。 + + ```bash + [standby*]$ gs_startnode + ``` + +2. **スタンバイモードの設定** + 各ノードをスタンバイモードに設定します。 + + ```bash + [standby*]$ gs_standby --true -u admin/admin + ``` + +3. **クラスタの稼働開始** + クラスタを稼働させます。これ以降は定常運用の手順に従って運用を行います。 + + ```bash + [standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin + ``` + +**GridDBサービスを利用したクラスタ構成手順** + +スタンバイモードの設定はクラスタ離脱状態で行う必要がありますが、GridDBサービス経由で起動する場合、クラスタが自動的に構成されるため、以下の手順を実施してください。 + +1. **`gs_standby.json` ファイルの作成** + 以下の内容で `gs_standby.json` ファイルを作成します。 + + ```json + {"standby": true} + ``` + +2. **ファイルの配置** + 作成したファイルをノード定義ファイルと同じディレクトリに配置します。 + + ```bash + cp gs_standby.json /standby/cluster/conf + ``` + +3. **GridDBサービスの起動** + GridDBサービスを利用してクラスタを構成します。 + + ```bash + [standby*]$ sudo systemctl start gridstore + ``` + + +##### 定常運用 + +定常運用時の手順を以下に示します。以下の順序で実行してください。 + +| **順序** | **対象** | **手順** | +|----------|-------------------|--------------------------------------------| +| 1 | プライマリ
スタンバイ | 定常時のレプリケーション状態を確認します。 | + +
+定常運用 +
定常運用
+
+ + +**1. 定常時のレプリケーション状態の確認\[プライマリ/スタンバイ\]** + +メモリベースレプリケーション方式では、定常時のレプリケーションが自動的に実行されます。以下のSQLを使用してレプリケーション状態を確認してください。 + +```sql +SELECT * FROM "#replication_stats"; +``` + +以下は出力例です: + +| CLUSTER_PARTITION_INDEX | CLUSTER_REPLICATION_ROLE | PRIMARY_ADDRESS | PRIMARY_PORT | STANDBY_ADDRESS | STANDBY_PORT | PRIMARY_LSN | STANDBY_LSN | PRIMARY_LAST_UPDATED_TIME | STANDBY_LAST_UPDATED_TIME | REPLICATION_STATUS | LAST_ERROR_CODE | LAST_ERROR_TIME | +|--------------------------|--------------------------|-----------------|--------------|-----------------|--------------|-------------|-------------|---------------------------|---------------------------|----------------------|-----------------|-----------------| +| 1 | PRIMARY | 192.168.10.11 | 10001 | 192.168.11.12 | 10001 | 4104 | 4104 | Thu Mar 27 15:05:16 JST 20 | Thu Mar 27 15:05:19 JST 20 | REPLICATION_REALTIME | | | +| 2 | PRIMARY | 192.168.10.12 | 10001 | 192.168.11.13 | 10001 | 7004 | 6900 | Thu Mar 27 15:05:16 JST 20 | Thu Mar 27 15:05:19 JST 20 | REPLICATION_REALTIME | | | + +**レプリケーション状態の確認** + +- **正常状態**: `REPLICATION_STATUS` が `REPLICATION_REALTIME` の場合、サイト間のレプリケーションは正常にリアルタイムで実行されています。 +- **同期中**: `REPLICATION_STATUS` が `REPLICATION_SYNC` の場合、直近のノード障害やネットワーク障害により欠損したデータを回復するための同期処理が実行中です。この状態は自動的に解消され、完了後に `REPLICATION_REALTIME` に戻ります。 +- **欠損状態**: `REPLICATION_STATUS` が `REPLICATION_LOSS` の場合、同期に必要なプライマリ側のトランザクションログが削除されており、同期が実行できない状態です。この場合、以下のいずれかの対応が必要です: + - 新たにベースラインを作成し、スタンバイを再構築した後に接続を再実施する。 + - 自動アーカイブ機能で出力されたトランザクションログを適用する。アーカイブ期間内のトランザクションログが残っている場合は、それを継続して適用します。 + +**レプリケーションラグの確認** + +- **レプリケーションラグ確認**: `PRIMARY_LAST_UPDATED_TIME` と `STANDBY_LAST_UPDATED_TIME` の差分がレプリケーションラグを示します。 +- **対応が必要な場合**: ラグが大きい場合は、スタンバイへの通信遅延やスタンバイ側の高負荷が原因の可能性があります。これらの要因を確認してください。 + +**障害時の対応** + +プライマリおよびスタンバイがクラスタ構成を取っている場合、通常の障害ではサイト間レプリケーションが継続されるため、特別な対応は不要です。 +ただし、プライマリサイト全体に障害が発生した場合は、必要に応じてフェイルオーバを実施し、スタンバイをプライマリに昇格させる必要があります。フェイルオーバは自動では実行されないため、事前にフェイルオーバの基準を設定し、必要に応じて以下の章で述べるフェイルオーバ手順に従って対応してください。 +また、障害復旧に必要なトランザクションログの保持期間を事前に設定しておくことが重要です。運用中はレプリケーション状態を定期的に確認し、問題が発生した場合には迅速に対応できるよう備えてください。 + +##### フェイルオーバ + +フェイルオーバ手順を以下に示します。 + + +| **順序** | **対象** | **手順** | +|----------|-----------|----------| +| 1 | プライマリ
アプリケーション | アプリケーションを停止します。 | +| 2 | スタンバイ | プライマリクラスタへの昇格を判定します。 | +| 3 | スタンバイ | スタンバイモードを解除します。 | +| 4 | スタンバイ→新プライマリ | 新プライマリクラスタを開始します。 | +| 5 | アプリケーション | アプリケーションを再開します。 | +| 6 | 新プライマリ
旧プライマリ→新スタンバイ | 旧プライマリクラスタをスタンバイとして準備し再開します。 | + +
+フェイルオーバ_メモリベース +
フェイルオーバ手順の概要(メモリベース)
+
+ +**1. アプリケーションの停止\[プライマリ/アプリケーション\]** + +プライマリクラスタが稼働していないことを確認し、可能であればアプリケーションをすべて停止してください。 + +**2. プライマリクラスタへの昇格判定\[スタンバイ\]** + +スタンバイをプライマリに昇格させるかどうかの判断は自動では行われません。そのため、サイト障害時のフェイルオーバを実施するかは運用者が基準を設けて判断する必要があります。 + +メモリベースレプリケーションの場合、プライマリ障害直前までのデータがスタンバイにレプリケーションされているため、これを基準に検討します。 + +**3. スタンバイモードの解除\[スタンバイ\]** + +スタンバイクラスタを一時的に離脱状態にするには、以下のコマンドを実行してください。 + +```bash +[standby*]$ gs_stopcluster -u admin/admin +``` + +その後、スタンバイ側の全ノードに対して以下のコマンドを実行し、スタンバイモードを解除します。 + +```bash +[standby*]$ gs_standby --false -u admin/admin +``` + +**4. 新プライマリクラスタの開始\[スタンバイ→新プライマリ\]** + +新しいプライマリクラスタの構成が完了したら、クラスタを再開してサービスを復旧させます。この手順では、アーカイブ機能(`gs_autoarchive` によるログの継続生成)を使用せず、旧プライマリサイトが復旧した際に新たにベースラインを生成する方式を採用します。そのため、クラスタを再開した時点でサービスを再開できます。なお、サイト障害の期間が短期間である場合は、障害復旧を見越して一時的にログ保持期間をオンラインで変更して運用することを推奨します。 + +以下のコマンドを実行して、新しいプライマリクラスタを稼働させてください: + +```bash +[standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +**5. アプリケーションの再開\[アプリケーション\]** + +アプリケーションの接続先を旧プライマリから新プライマリクラスタに変更し、アプリケーションを再起動します。この操作により、新プライマリクラスタでのサービスが稼働状態となります。 + +**6. 旧プライマリクラスタのスタンバイ準備と再開\[新プライマリ/旧プライマリ→新スタンバイ\]** + +アプリケーションの再開後、旧プライマリが復旧した場合は、旧プライマリに存在するデータファイルおよびトランザクションログファイルを削除し、新しいスタンバイとしての準備を行います。この準備手順は、\[1. スタンバイ準備\]の手順と同様であるため、詳細な説明は省略します。準備が完了すると、旧プライマリは新しいスタンバイとして、旧スタンバイは新しいプライマリとして運用を継続します。この状態で、通常の運用手順(\[2. 定常運用\])に戻ります。 + +なお、旧プライマリを再びプライマリとして復帰させる場合は、\[3. フェイルオーバ\]手順ではなく、\[4. スイッチオーバ\]手順を実施することを推奨します。 + +また、手順4でサイト障害復帰用にログ保持期間を一時的に延長していた場合は、レプリケーションが完了した時点で適切な値に再設定してください。これは、長期間のログ保持がトランザクションログファイルによるディスク容量の圧迫を引き起こす可能性があるためです。 + +以上の処理により、新しいプライマリへのスタンバイの昇格が完了し、サービスの再開が可能となります。また、旧プライマリを新しいスタンバイとして運用に組み込むことができます。 + +##### スイッチオーバ + +スイッチオーバ手順について以下に示します。 + +スイッチオーバは、予期せぬ障害に対応する「フェイルオーバ」とは異なり、計画的に実施することが可能です。そのため、プライマリとスタンバイのデータベース状態を完全に一致させた上で切り替えを行うことができます。 + +| **順序** | **対象** | **手順** | +|----------|-----------|----------| +| 1 | アプリケーション | アプリケーションを停止します。 | +| 2 | プライマリ | クラスタの状態が一致していることを確認します。 | +| 3 | プライマリ | プライマリクラスタを停止します。 | +| 4 | スタンバイ | スタンバイクラスタを停止します。 | +| 5 | プライマリ | プライマリクラスタをスタンバイクラスタへ移行する準備を行います。 | +| 6 | スタンバイ | スタンバイクラスタをプライマリクラスタへ移行する準備を行います。 | +| 7 | スタンバイ→新プライマリ | 新しいプライマリクラスタを稼働させます。 | +| 8 | プライマリ→新スタンバイ | 新しいスタンバイクラスタを稼働させます。 | +| 9 | アプリケーション | アプリケーションを再開します。 | + +
+スイッチオーバ_メモリベース +
スイッチオーバ手順の概要(メモリベース)
+
+ +**1. アプリケーションの停止\[アプリケーション\]** + +スイッチオーバ作業中は短時間のサービス停止が発生します。そのため、事前に利用者へ切替作業の実施を告知し、該当期間中はアプリケーションを一時停止してください。また、スイッチオーバ後はアプリケーションの接続先が旧スタンバイ側に変更されるため、事前に接続先の変更を行っておく必要があります。 + +**2. クラスタ一致の確認\[プライマリ\]** + +プライマリとスタンバイの状態が一致していることを確認します。以下のSQLを実行して、全パーティションのLSNが一致しているか確認してください。 + +```sql +SELECT COUNT(*) AS MATCHED_PARTITIONS +FROM "#replication_stats" +WHERE REPLICATION_STATUS = 'REPLICATION_REALTIME' + AND PRIMARY_LSN = STANDBY_LSN; +``` + +このクエリの結果がクラスタのパーティション数(デフォルトでは128)と一致している場合、プライマリとスタンバイの状態が完全に一致していることを示します。 + +**注意事項:** +- この確認はアプリケーションを停止した状態で実施してください。通常、短時間で完了します。 +- レプリケーションが進行中の場合があるため、状態が一致するまで繰り返し確認してください。 + +状態の一致が確認できたら、次の手順に進んでください。 + +**3. プライマリクラスタを停止\[プライマリ\]** + +プライマリクラスタを停止するには、以下のコマンドを実行してください。 + +```bash +[primary*]$ gs_stopcluster -u admin/admin +``` + +この操作により、プライマリクラスタを構成するすべてのノードがクラスタから切り離されます。 + +**4. スタンバイクラスタを停止\[スタンバイ\]** + +スタンバイクラスタを停止するには、以下のコマンドを実行してください: + +```bash +[standby*]$ gs_stopcluster -u admin/admin +``` + +この操作により、スタンバイクラスタを構成するすべてのノードがクラスタから切り離されます。 + +**5. プライマリクラスタのスタンバイクラスタへの移行準備\[プライマリ\]** + +スイッチオーバの場合、フェイルオーバとは異なり、スタンバイ側のデータファイルやトランザクションログファイルを削除する必要はありません。 + +プライマリクラスタにスタンバイモードを設定するには、以下のコマンドを実行してください: + +```bash +[primary*]$ gs_standby --true -u admin/admin +``` + +**6. スタンバイクラスタをプライマリクラスタへの移行準備\[スタンバイ\]** + +スタンバイクラスタのスタンバイモードを解除するには、以下のコマンドを実行してください。 + +```bash +[primary*]$ gs_standby --false -u admin/admin +``` + +この操作により、スタンバイクラスタがスタンバイモードから解除され、新しいプライマリクラスタとしての準備が整います。 + +**7. 新プライマリクラスタの稼働\[スタンバイ→新プライマリ\]** + +新しいプライマリクラスタを稼働させるには、以下のコマンドを実行してください。 + +```bash +[standby*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +このコマンドにより、スタンバイ側のクラスタが新しいプライマリクラスタとして稼働を開始します。以降は、アプリケーションの接続先を新しいプライマリクラスタに変更し、サービスを再開してください。 + +**8. 新スタンバイクラスタの稼働\[プライマリ→新スタンバイ\]** + +新しいスタンバイクラスタを稼働させるには、以下のコマンドを実行してください: + +```bash +[primary*]$ gs_joincluster -c cls1 -n -3 -u admin/admin +``` + +このコマンドにより、旧プライマリクラスタが新しいスタンバイクラスタとして稼働を開始します。 + +**9. アプリケーションの再開\[アプリケーション\]** + +アプリケーションの接続先を新しいプライマリクラスタに変更した後、アプリケーションを再起動してサービスを再開します。その後は、定常運用の手順に従って運用を継続してください。 + + +## 稼働状況の確認機能 + +### 性能・統計情報 + +GridDBの性能・統計情報は、運用コマンドのgs_statを利用して確認できます。gs_statはクラスタで共通の情報とノード独自の性能情報・統計情報を表示します。 + +gs_statコマンドでの出力のうち、performance構造が、性能・統計情報に関連する項目です。 + +出力例を以下に示します。出力される内容はバージョンによって異なります。 + +``` example +-bash-4.1$ gs_stat -u admin/admin -s 192.168.0.1:10040 +{ + : + "performance": { + "batchFree": 0, + "dataFileSize": 65536, + "dataFileUsageRate": 0, + "checkpointWriteSize": 0, + "checkpointWriteTime": 0, + "currentTime": 1428024628904, + "numConnection": 0, + "numTxn": 0, + "peakProcessMemory": 42270720, + "processMemory": 42270720, + "recoveryReadSize": 65536, + "recoveryReadTime": 0, + "sqlStoreSwapRead": 0, + "sqlStoreSwapReadSize": 0, + "sqlStoreSwapReadTime": 0, + "sqlStoreSwapWrite": 0, + "sqlStoreSwapWriteSize": 0, + "sqlStoreSwapWriteTime": 0, + "storeDetail": { + "batchFreeMapData": { + "storeMemory": 0, + "storeUse": 0, + "swapRead": 0, + "swapWrite": 0 + }, + "batchFreeRowData": { + "storeMemory": 0, + "storeUse": 0, + "swapRead": 0, + "swapWrite": 0 + }, + "mapData": { + "storeMemory": 0, + "storeUse": 0, + "swapRead": 0, + "swapWrite": 0 + }, + "metaData": { + "storeMemory": 0, + "storeUse": 0, + "swapRead": 0, + "swapWrite": 0 + }, + "rowData": { + "storeMemory": 0, + "storeUse": 0, + "swapRead": 0, + "swapWrite": 0 + } + }, + "storeMemory": 0, + "storeMemoryLimit": 1073741824, + "storeTotalUse": 0, + "swapRead": 0, + "swapReadSize": 0, + "swapReadTime": 0, + "swapWrite": 0, + "swapWriteSize": 0, + "swapWriteTime": 0, + "syncReadSize": 0, + "syncReadTime": 0, + "totalLockConflictCount": 0, + "totalReadOperation": 0, + "totalRowRead": 0, + "totalRowWrite": 0, + "totalWriteOperation": 0 + }, + : +} +``` + +性能・統計情報に関連する情報を説明します。storeDetail構造は、内部のデバッグ情報のため説明は省きます。 +- 種別は以下を示します + - CC:クラスタ全体の現在の値 + - c:指定ノードの現在の値 + - CS:クラスタ全体のサービス開始後の累積値 + - s:ノード全体のサービス開始後の累積値 + - CP:クラスタ全体のサービス開始後のピーク値 + - p:ノード全体のサービス開始後のピーク値 +- 監視すべき事象、数値を確認し、運用を継続するにあたり検討すべき項目を示します。 + +| 出力パラメータ | 種別 | 説明 | 監視すべき事象 | +|----------------------------|------|-----------------------------------------------------|-----| +| dataFileSize | c | データファイルサイズ(バイト) | | +| dataFileUsageRate | c | データファイル利用率 | | +| checkpointWrite | s | チェックポイント処理のデータファイルへの書き込み回数 | | +| checkpointWriteSize | s | チェックポイント処理のデータファイルへの書き込みサイズ(バイト) | | +| checkpointWriteTime | s | チェックポイント処理のデータファイルへの書き込み時間(ミリ秒) | | +| checkpointWriteCompressTime| s | チェックポイント処理のデータファイルへの書き込みデータ圧縮時間(ミリ秒) | | +| dataFileAllocateSize | c | データファイルに割り当てられたブロックの総サイズ(バイト) | | +| currentTime | c | 現在時刻 | | +| numConnection | c | 現在のコネクション数。トランザクション処理で使用している接続数であり、クラスタ処理で使用している接続数は含まれない。クライアントの数+保有するパーティション*レプリカ数の値となる。 | ログの監視でコネクション不足が発生している場合はノード構成のconnectionLimitの値を見直します。| +| numSession | c | 現在のセッション数 | | +| numTxn | c | 現在のトランザクション数 | | +| peakProcessMemory | p | プロセス最大使用メモリ量(バイト) storememoryの値を含め、GridDBサーバの利用したメモリのピーク値 | peakProcessMemory、processMemoryがノードの実装メモリより大きくOSのスワップが発生している場合、メモリの追加や一時的にstorememoryLimitの値を下げるなどの検討が必要 | +| processMemory | c | プロセス使用メモリ量(バイト) | | +| recoveryReadSize | s | リカバリ処理でデータファイルを読み込んだサイズ(バイト) | | +| recoveryReadTime | s | リカバリ処理でデータファイルを読み込んだ時間(ミリ秒) | | +| sqlStoreSwapRead | s | SQLストアスワップ処理のファイルからの読み込み回数 | | +| sqlStoreSwapReadSize | s | SQLストアスワップ処理のファイルからの読み込みサイズ(バイト) | | +| sqlStoreSwapReadTime | s | SQLストアスワップ処理のファイルからの読み込み時間(ミリ秒) | | +| sqlStoreSwapWrite | s | SQLストアスワップ処理のファイルへの書き込み回数 | | +| sqlStoreSwapWriteSize | s | SQLストアスワップ処理のファイルへの書き込みサイズ(バイト) | | +| sqlStoreSwapWriteTime | s | SQLストアスワップ処理のファイルへの書き込み時間(ミリ秒) | | +| storeMemory | c | インメモリデータベースでの使用メモリ量(バイト) | | +| storeMemoryLimit | c | インメモリデータベースでの使用メモリ量制限(バイト) | | +| storeTotalUse | c | データベースファイル内のデータ容量を含めたノードが保有する全データ容量(バイト) | | +| swapRead | s | スワップ処理のファイルからの読み込み回数 | | +| swapReadSize | s | スワップ処理のファイルからの読み込みサイズ(バイト) | | +| swapReadTime | s | スワップ処理のファイルからの読み込み時間(ミリ秒) | | +| swapWrite | s | スワップ処理のファイルへの書き込み回数 | | +| swapWriteSize | s | スワップ処理のファイルへの書き込みサイズ(バイト) | | +| swapWriteTime | s | スワップ処理のファイルへの書き込み時間(ミリ秒) | | +| swapWriteCompressTime | s | スワップ処理のファイルへの書き込みデータ圧縮時間(ミリ秒) | | +| syncReadSize | s | 同期処理データファイルからの読み込みサイズ(バイト) | | +| syncReadTime | s | 同期処理データファイルからの読み込み時間(ミリ秒) | | +| totalLockConflictCount | s | ロウロック競合発生回数 | | +| totalReadOperation | s | 検索処理回数 | | +| totalRowRead | s | ロウ読み出し回数 | | +| totalRowWrite | s | ロウ書き込み回数 | | +| totalWriteOperation | s | 登録更新処理回数 | | + +【メモ】 +- 集計単位はノード単位になります。データベース単位で集計を行いたい場合は、メタテーブル"#database_stats"に対してSQLを実行します。 + +### コンテナ(テーブル)の配置情報確認 + +GridDBクラスタ上のコンテナ(テーブル)は、各ノードに自動的に分散して配置されます。 運用機能やSQLを用いることで、コンテナ(テーブル)がどのノードに配置されているかを確認することができます。 + +この機能は次の場合に役立ちます。 +- ノードごとのデータベースサイズに偏りがあるときに、ノードに配置されているコンテナを調べたい。 +- 特定のコンテナを含むノードのバックアップを取得したい。 + +【メモ】 +- コンテナやパーティションなどデータ管理に関する説明は、[データモデル](#data_model)をご参照ください。 +- ノードの停止や障害などによって自律的データ配置が行われると、コンテナの配置が動的に変化する場合があります。コンテナ配置は恒久的なものではありません。 + +次の方法で、コンテナ(テーブル)が属するパーティションのオーナが配置されているノードを確認できます。 + +#### ノード上のコンテナ(テーブル)一覧確認【EE限定】 + +1つのノード上に配置されているコンテナ(テーブル)一覧を確認するには、統合運用管理GUI(gs_admin)のコンテナ一覧画面を使用します。 + +1. gs_adminにログインします。 + +2. 左画面のツリービューで「ClusterTree」タブを選択してノードを選択した後、右画面で「Container」タブをクリックします。 + +3. ノードに配置されているコンテナ一覧が表示されます。 + +【メモ】 +- パーティショニングされたコンテナ(テーブル)は、管理テーブルのみ表示されます。データパーティションは表示されません。 + +#### コンテナ(テーブル)配置ノードの確認 + +特定のコンテナ(テーブル)が配置されているノードを確認するには、gs_shとパーティション情報取得コマンド(gs_partition)を使用します。 + +1. gs_shのshowcontainerサブコマンドでコンテナが格納されているパーティションのIDを確認します。 パーティションIDが"Partition ID"に表示されます。 + +2. gs_shのconfigclusterサブコマンドでマスタノードを確認します。 "Role"に"M"と表示されるノードがマスタノードです。 + +3. マスタノードに対して、1で確認したパーティションIDを引数に指定してgs_partitionを実行します。 表示されたJSONの/owner/addressのノードが、コンテナが配置されているノードです。 + +【実行例】 +- 特定のパーティションの配置ノードを確認します。 + +``` example +$ gs_partition -u admin/admin -n 5 +[ + { + "backup": [], + "catchup": [], + "maxLsn": 300008, + "owner": { + "address": "192.168.11.10", -> IPアドレス:192.168.11.10のノードに格納されている + "lsn": 300008, + "port": 10010 + }, + "pId": "5", + "status": "ON" + } +] +``` + +【注意】 +- マスタノード以外にgs_partitionを実行した場合は、パーティション情報が正しくない場合があります。 + +【メモ】 +- パーティショニングされたコンテナ(テーブル)を指定した場合、管理テーブルの配置情報が表示されます。 データパーティションの配置情報は表示されません。 + +#### データパーティション配置ノードの確認 + +パーティショニングされたコンテナ(テーブル)は、複数の内部コンテナ(データパーティション)にデータを分割して格納します。 これらのデータパーティションがどのノードに配置されているかを確認することで、パーティショニングされたコンテナ(テーブル)のデータ配置を知ることができます。 + +配置確認の流れとしては、該当コンテナ(テーブル)のデータパーティションが格納されているパーティションのIDを調べて、そのIDを基にして配置されているノードを調べます。以下に手順を説明します。 + +1. 該当コンテナ(テーブル)のデータパーティションが格納されているパーティションのIDを確認する + +- データパーティションが格納されているパーティションのIDは、メタテーブル"\#table_partitions"を使って確認します。メタテーブル"\#table_partitions"には、全データパーティションのコンテナ名やパーティションIDなどの情報が格納されています。 +- 統合運用管理GUI(gs_admin)のSQL画面またはgs_shのsqlサブコマンドを使用し、メタテーブル"\#table_partitions"に検索を実行します。調べたいコンテナの名前を、where句で「TABLE_NAME」カラムの条件として指定します。 +- 指定したコンテナの複数のデータパーティション情報が表示されますので、「CLUSTER_PARTITION_INDEX」カラムでパーティションIDを確認します。 + +2. パーティションIDから、配置されているノードを確認する + +- パーティションIDから、配置されているノードを確認するためには、マスタノードに対してgs_partitionコマンドを実行する必要があります。 +- gs_shのconfigclusterサブコマンドでマスタノードを確認します。"Role"に"M"と表示されるノードがマスタノードです。 +- マスタノードに対して、1で確認したパーティションIDを引数-nに指定してgs_partitionを実行します。 表示されたJSONの/owner/addressのノードが、コンテナが配置されているノードです。 +- -nには、ひとつのパーティションIDしか指定できません。-nを指定しない場合、全パーティションの情報が表示されます。 + +【例】 +- 1 パーティショニングテーブル'hashTable1'のデータパーティションが格納されているパーティションIDを確認します。 + +``` example +select DATABASE_NAME, TABLE_NAME, CLUSTER_PARTITION_INDEX from "#table_partitions" where TABLE_NAME='hashTable1'; + +DATABASE_NAME,TABLE_NAME,CLUSTER_PARTITION_INDEX +public,hashTable1,1 +public,hashTable1,93 +public,hashTable1,51 +public,hashTable1,18 public,hashTable1,32 →'hashTable1'のデータパーティションは5個で、格納されているパーティションのIDは1, 93, 51, 18, 32。 ``` @@ -4352,14 +6385,14 @@ GridDBの運用動作を指示するコマンドには以下があります。Gr | | gs_passwd | 管理ユーザのパスワードの変更 | | ログ情報 | gs_logs | ノードのメモリに保持する最新のログ情報の表示 | | | gs_logconf | イベントログおよび監査ログの操作カテゴリと出力レベルの表示と変更 | -| バックアップ/リストア | gs_backup【EE限定】 | バックアップの取得指示 | -| | gs_backuplist【EE限定】 | バックアップデータの確認 | -| | gs_restore【EE限定】 | バックアップデータのリストア | +| バックアップ/リストア | gs_backup | バックアップの取得指示 | +| | gs_backuplist | バックアップデータの確認 | +| | gs_restore | バックアップデータのリストア | | インポート/エクスポート | gs_import | ディスクに保持しているコンテナやデータベースのexportデータを指定してインポート | | | gs_export | コンテナやデータベースを指定して、ディスク上にデータをCSV形式またはzip形式でエクスポート | | 保守 | gs_paramconf | 稼働パラメータの表示と稼働パラメータのオンライン変更 | | | gs_authcache【EE限定】 | 一般ユーザの認証やLDAP認証の高速化のためのユーザ情報キャッシュの一覧表示と削除 | -| | gs_rollingupgrade【EE限定】 | ローリングアップグレードを行う一連の処理手順の支援 | +| | gs_rollingupdate【EE限定】 | ローリングアップデートを行う一連の処理手順の支援 | ### 統合運用管理機能【EE限定】 @@ -4404,6 +6437,7 @@ gs_shでは、ノード起動やクラスタ開始などのクラスタ操作や - データ操作 - コンテナ作成、索引作成、TQL・SQLの実行など + ## 時系列データ自動集計 @@ -4419,8 +6453,8 @@ IoTの活用が広がる中で、時間とともに時系列データは大量 あらかじめ集計対象のコンテナと出力先のコンテナを作成し、作成した集計対象のコンテナに対して、 時系列データを登録します。登録した時系列データに対して集計を行い、出力先のコンテナに登録を行います。 -集計処理はクラスタ運用管理コマンド・インタプリタ(gs_sh)のバッチモードのスクリプトファイルを用いて実現します。 -自動集計はgs_shのスクリプトファイルを定期実行して実現します。 +集計処理はクラスタ運用管理コマンド・インタプリタ(gs_sh)のバッチモードを用いて実現します。 +自動集計はgs_shでスクリプトファイルを定期実行して実現します。 定期実行については、Linuxのcronを利用します。 処理の流れについて説明します。 @@ -4574,11 +6608,11 @@ INSERT INTO etl_output ts,value; gs_shで以下のようなバッチモードのスクリプトファイル(sample.gsh)を作成します。 -【例1】実行時刻に全データを処理対象にする +【例1】実行時点で未集計の全データを処理対象にする ``` example # gs_shスクリプトファイル(sample.gsh) -# 存在しない場合はインターバルパーティショニング30日の出力コンテナを作成する +# 存在しない場合はインターバルを30日としたパーティショニングテーブルを出力先として作成する CREATE TABLE IF NOT EXISTS etl_output (ts TIMESTAMP PRIMARY KEY, value DOUBLE) PARTITION BY RANGE (ts) EVERY (30, DAY); @@ -4705,10 +6739,21 @@ GridDBの動作を制御するパラメータについて説明します。GridD | /transaction/replicationTimeoutInterval | 10秒 | トランザクションが準同期レプリケーションでデータを同期する際のノード間通信のタイムアウト時間を指定します。1s以上、231s未満の値を指定します。 | 起動 | | /transaction/authenticationTimeoutInterval | 5秒 | 認証タイムアウト時間を指定します。 | 起動 | | /transaction/useMultitenantMode | false | データベース統計情報(#database_stats)におけるデータ管理情報に関する項目を表示させる場合に指定します。指定しない場合は該当項目は未設定値として表示されます。 | 起動 | +| /transaction/siteReplication/enable | false | サイト間レプリケーション連携機能を有効にするかを指定します | オンライン | +| /transaction/siteReplication/siteConnectionId | "" | サイト間レプリケーション連携機能のキーとなる接続IDを指定します | 起動 | +| /transaction/siteReplication/heartbeatInterval | 15秒 | サイト間接続のハートビート間隔(秒)を指定します | 起動 | +| /transaction/siteReplication/heartbeatRetryCount | 1 | ハートビートの再試行回数を指定します | 起動 | +| /transaction/siteReplication/partitionCheckInterval | 15秒 | 各パーティションの状態監視間隔(秒)を指定します | 起動 | +| /transaction/siteReplication/keepLogFileCount | 5 | トランザクションログファイルの保持数を指定します | オンライン | +| /transaction/siteReplication/syncWaitTime | 0ミリ秒 | ログ欠損時の同期処理実行間隔(ミリ秒)を指定します | 起動 | +| /transaction/siteReplication/limitUpdateDelayTime | 300秒 | スタンバイ側の更新異常判定時間(秒)を指定します | オンライン | +| /transaction/siteReplication/limitLsnDifference | 100000000 | スタンバイ側の更新異常判定のLSN差分閾値を指定します | オンライン | +| /transaction/siteReplication/replicationMember | "" | 相手サイトのノード構成情報(アドレスとポート番号リスト)を指定します | 起動 | | /sql/notificationAddress | 239.0.0.1 | JDBC/ODBCクライアントが初期に接続するマルチキャストアドレスです。クライアントにはマスタノードが通知されます。 | 起動 | | /sql/notificationPort | 41999 | JDBC/ODBCクライアントが初期に接続するマルチキャストポートです。ポート番号として指定可能な範囲の値を指定します。| 起動 | | /sql/notificationInterval | 5秒 |JDBC/ODBCクライアントへのマスタ通知用マルチキャスト周期です。1s以上、231s未満の値を指定します。 | 起動 | -| /sql/costBasedJoin | true | SQLプラン生成の際、ジョイン順序の決定にコストベースによる方法を用いるかどうかを指定します。用いない(false)場合は、ルールベースによる方法でジョイン順を決定します。 | 起動 | +| /sql/costBasedJoin | true | SQLプラン生成の際、ジョイン順序の決定にコストベースによる方法を用いるかどうかを指定します。用いない(false)場合は、ルールベースによる方法でジョイン順を決定します。 | 起動 | +| /sql/costBasedJoinDriving | true | SQLプラン生成の際、ジョイン駆動表の決定にコストベースによる方法を用いるかどうかを指定します。用いない(false)場合は、ルールベースによる方法で駆動表を決定します。 | 起動 | | /security/authentication | INTERNAL | 認証方式として、INTERNAL(内部認証) / LDAP(LDAP認証)のいずれかを指定。| 起動 | | /security/ldapRoleManagement | USER | GridDBのロールとマッピングする対象として、USER(LDAPユーザ名でマッピング) / GROUP(LDAPグループ名でマッピング)のいずれかを指定。| 起動 | | /security/ldapUrl | | LDAPサーバを次の形式で指定。ldaps://host[:port] | 起動 | @@ -4746,6 +6791,7 @@ GridDBの動作を制御するパラメータについて説明します。GridD | /dataStore/syncTempPath | sync | データ同期用一時ファイルの配置ディレクトリのパスを指定。 | 起動 | | /dataStore/storeMemoryLimit | 1024MB | データ管理用メモリの上限。 | オンライン | | /dataStore/concurrency | 4 | 処理の並列度を指定。 | 起動 | +| /dataStore/recoveryConcurrency | (上記concurrencyと同じ値)| リカバリ処理の並列度を指定。 | 起動 | | /dataStore/logWriteMode | 1 | ログ書き出しモード・周期を指定。 -1または0の場合トランザクション終了時にログ書き込み、1以上231未満の場合、秒単位の周期でログ書き込み | 起動 | | /dataStore/persistencyMode | 1(NORMAL) | 永続化モードでは、データ更新時の更新ログファイルの保持期間を指定する。1(NORMAL)、2(KEEP_ALL_LOG) のいずれかを指定。"NORMAL" は、チェックポイントにより、不要になったトランザクションログファイルは削除されます。"KEEP_ALL_LOG"は、全てのトランザクションログファイルを残します。 | 起動 | | /dataStore/affinityGroupSize | 4 | アフィニティグループ数 | 起動 | @@ -4754,7 +6800,7 @@ GridDBの動作を制御するパラメータについて説明します。GridD | /dataStore/autoArchiveName | "" | 自動アーカイブ名 | 起動 | | /dataStore/enableAutoArchiveOutputInfo | true | 自動アーカイブ実行時のクラスタやチェックポイント実行に付随するメタ情報を出力するか。自動アーカイブ有効な場合のみ有効化 | 起動 | | /dataStore/enableAutoArchiveOutputInfoPath | cluster | 自動アーカイブ実行時のクラスタやチェックポイント実行に付随するメタ情報を出力先フォルダ名 | 起動 | -| /checkpoint/checkpointInterval | 60秒 | メモリ上のデータ更新ブロックを永続化するチェックポイント処理の実行周期 | 起動 | +| /checkpoint/checkpointInterval | 300秒 | メモリ上のデータ更新ブロックを永続化するチェックポイント処理の実行周期 | 起動 | | /checkpoint/partialCheckpointInterval | 10 | チェックポイント実行時に、チェックポイントログファイルへブロック管理情報を書き込む処理の分割数 | 起動 | | /cluster/serviceAddress | 上位のserviceAddressに従う | クラスタ構成用待ち受けアドレス | 起動 | | /cluster/servicePort | 10010 | クラスタ構成用待ち受けポート | 起動 | @@ -4766,7 +6812,9 @@ GridDBの動作を制御するパラメータについて説明します。GridD | /sync/serviceAddress | 上位のserviceAddressに従う | クラスタ間でデータ同期のための受信アドレス | 起動 | | /sync/servicePort | 10020 | データ同期用待ち受けポート | 起動 | | /sync/redoLogErrorKeepInterval | 600s | REDOエラー発生時の表示内容の保持期間(この期間を過ぎると自動削除) -| /sync/redoLogMaxMessageSize | 2097152 | REDO分割実行となるファイルサイズ単位。指定サイズを超えるまで対象ファイルからログ読み出し、レプリケーション、REDOを行う操作手順が分割実行される +| /sync/redoLogMaxMessageSize | 2097152 | REDO分割実行となるファイルサイズ単位。指定サイズを超えるまで対象ファイルからログ読み出し、レプリケーション、REDOを行う操作手順が分割実行される | +| /sync/enableKeepLog | false | ノード障害発生後にトランザクションログを指定期間保持する機能を有効にするか| オンライン | +| /sync/keepLogInterval | 1200s | トランザクションログ保持期間の上限。| オンライン| | /system/serviceAddress | 上位のserviceAddressに従う | 運用コマンド用待ち受けアドレス | 起動 | | /system/servicePort | 10040 | 運用コマンド用待ち受けポート | 起動 | | /system/eventLogPath | log | イベントログファイルの配置ディレクトリのパス | 起動 | @@ -4785,6 +6833,7 @@ GridDBの動作を制御するパラメータについて説明します。GridD | /sql/publicServiceAddress | 上位のserviceAddressに従う | クライアント専用NewSQL I/Fアクセスの処理用待ち受けアドレス | 起動 | | /sql/servicePort | 20001 | NewSQL I/Fアクセスの処理用待ち受けポート | 起動 | | /sql/storeSwapFilePath | swap | SQL中間ストアのスワップファイルの配置ディレクトリのパス | 起動 | +| /sql/storeSwapFileSizeLimit | INT32_MAX (2PB) | SQL中間ストアのスワップファイルのサイズ上限値(単位:MB) | 起動 | | /sql/storeSwapSyncSize | 1024MB | SQL中間ストアのスワップファイルのsyncおよび物理メモリキャッシュ消去を行うサイズ | 起動 | | /sql/storeMemoryLimit | 1024MB | SQL処理でメモリ上に保持する中間データの最大値 | 起動 | | /sql/workMemoryLimit | 32MB | SQL処理でオペレータが使用するメモリの最大値 | 起動 | diff --git a/manuals/md_reference_jdbc/md_reference_jdbc.md b/manuals/md_reference_jdbc/md_reference_jdbc.md index 3be823b..5c34833 100644 --- a/manuals/md_reference_jdbc/md_reference_jdbc.md +++ b/manuals/md_reference_jdbc/md_reference_jdbc.md @@ -1128,7 +1128,7 @@ ResultSetMetaDataインターフェースで、カラムのデータ型を返す | int getColumnDisplaySize(int column) | 131072 | | String getColumnLabel(int column) | カラムのラベル名 | | String getColumnName(int column) | カラムの名前 | -| int getPrecision(int column) | TIMESTAMP型の場合は9(最大精度ナノ秒の小数部桁数)、他の型の場合は0 | +| int getPrecision(int column) | TIMESTAMP(3)の場合は3、TIMESTAMP(6)の場合は6、TIMESTAMP(9)の場合は9、他の型の場合は0 | | int getScale(int column) | 0 | | String getSchemaName(int column) | "" | | String getTableName(int column) | "" | @@ -1136,7 +1136,7 @@ ResultSetMetaDataインターフェースで、カラムのデータ型を返す | boolean isCaseSensitive(int column) | true | | boolean isCurrency(int column) | false | | boolean isDefinitelyWritable(int column) | true | -| int isNullable(int column) | カラムにNULL値を許可する定数ResultSetMetaData.columnNullable(=1)、またはカラムにNULL値を許可しない定数columnNoNulls(=0) | +| int isNullable(int column) | カラムにNULL値を許可する定数ResultSetMetaData.columnNullable(=1)、またはカラムにNULL値を許可しない定数columnNoNulls(=0) | | boolean isReadOnly(int column) | false | | boolean isSearchable(int column) | true | | boolean isSigned(int column) | false | diff --git a/manuals/md_reference_sql/md_reference_sql.md b/manuals/md_reference_sql/md_reference_sql.md index fe17776..46473ac 100644 --- a/manuals/md_reference_sql/md_reference_sql.md +++ b/manuals/md_reference_sql/md_reference_sql.md @@ -126,8 +126,7 @@ NoSQLインターフェースのクライアントで作成したコンテナを 【メモ】 - - TIMESTAMP型については、SQLの精度指定付きTIMESTAMP型の精度指定値(TIMESTAMP(p)のp)を確認したうえで、NoSQLのTIMESTAMP型の精度指定情報を設定する必要があります。精度情報の設定方法については『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』 -、もしくは『[GridDB C APIリファレンス](../md_reference_c_api/md_reference_c_api.html)』を参照してください。 + - TIMESTAMP型については、SQLの精度指定付きTIMESTAMP型の精度指定値(TIMESTAMP(p)のp)を確認したうえで、NoSQLのTIMESTAMP型の精度指定情報を設定する必要があります。精度情報の設定方法については『[GridDB Java APIリファレンス](../md_reference_java_api/md_reference_java_api.html)』、もしくは『[GridDB C APIリファレンス](../md_reference_c_api/md_reference_c_api.html)』を参照してください。 ### SQLでサポートしていないデータ型の扱い @@ -413,7 +412,7 @@ GridDBのユーザには、管理ユーザと一般ユーザの2種類があり 【メモ】 - 時系列コンテナの場合、ロウキーはミリ秒精度のTIMESTAMP型に固定されていて、他の精度のTIMESTAMP型には変更はできません。 -****データパーティション配置*** +***データパーティション配置*** - 各日付に対応するデータパーティションの配置先を決定するオプションを" WITH (プロパティキー=プロパティ値, ...)"の形式で以下の値で指定することができます。 | 機能 | 内容 | プロパティキー | プロパティ値の型 | 設定時の必須項目 | @@ -1201,10 +1200,36 @@ SELECT * FROM employees NATURAL INNER JOIN departments; | | |-----------------------------------| -| *関数* OVER ( \[PARTITION BY *式1* \] \[ORDER BY *式2* \] ) | +| *関数* OVER ( \[PARTITION BY *式1* \] \[ ORDER BY *式2* \] \[ FRAME句 \] ) | -**仕様** +ここで、FRAME句の構文は以下の通りです。 +| | +|-----------------------------------| +| {ROWS\|RANGE} *フレーム開始値*
\| {ROWS\|RANGE} BETWEEN *フレーム開始値* AND *フレーム終了値* | + +フレーム開始値・終了値の構文は以下の通りです。 +| | +|-----------------------------------| +| UNBOUNDED PRECEDING
\| UNBOUNDED FOLLOWING
\| CURRENT ROW
\| *フレーム境界値1* PRECEDING
\| *フレーム境界値2* FOLLOWING | + + - CURRENT ROW: 分析対象の現在位置のロウを示します + - UNBOUNDED: パーティションの先頭もしくは末端を示します + - PRECEDING/FOLLOWING: 前方もしくは後方を示します + - UNBOUNDEDは、始点・終点での前方・後方指定の組み合わせに制限があります (NG例: BETWEEN UNBOUNDED FOLLOWING AND ~、BETWEEN UNBOUNDED ~ AND PRECEDING) + +フレーム境界値の構文は以下の通りです。 + +| | +|-----------------------------------| +| *値1* \| ( *値2*, *単位* ) | + + - 以下の説明では前者を整数型境界値、後者を日時型境界値と呼びます + - 値1、値2として許されるのは、非負の整数値定数に暗黙キャスト可能な値のみです。日時型境界値ではHOUR~NANOSECONDまでのいずれかの単位を指定します + - ROWS指定の場合、非負の整数型境界値のみ指定可能です + - RANGE指定の場合、ソートキーは整数型または日時型の単一のキー限定とし、キーの型と対応する形式で境界値を指定します + +**仕様** - SELECT句で利用できます。 - 対応する関数は以下です。 @@ -1223,7 +1248,7 @@ SELECT * FROM employees NATURAL INNER JOIN departments; - VARIANCE()/VARIANCE0() - VAR_POP() - 関数の第一引数にDISTINCTを指定することはできません。 -- PARTITION BY句で問い合わせ結果を分割します。ORDER BY句でロウの並び替えを行います。 +- PARTITION BY句で問い合わせ結果を分割します。ORDER BY句でロウの並び替えを行います。FRAME句はパーティション全体ではなくフレーム上で作動するウィンドウ関数に対して、ウィンドウフレームを構成する行の集合を指定します。 - 同一SELECT句内でのWINDOW関数/OVER句の複数利用や、WINDOW関数/OVER句とMEDIAN関数の同時利用はできません。 - PARTITION BY句に、以下の式は指定できません。 - OVER句を含む式 @@ -1235,6 +1260,10 @@ SELECT * FROM employees NATURAL INNER JOIN departments; - 集計関数を含む式 - 列の別名を含む式 - サブクエリ +- 同名の集計関数と対応づく既存の分析関数すべてで、FRAME句を指定できます。 + - AVG、COUNT、MAX、MIN、SUM、TOTAL、STDDEV*、VAR* +- 同名の集計関数と対応付かない以下の分析関数では、FRAME句を指定できません。 + - ROW_NUMBER、LAG、LEAD ### GROUP BY RANGE @@ -1268,11 +1297,13 @@ GROUP BY RANGE句の仕様は以下となります。 - 結果集合の始点時刻を計算するときに用いる「時間の間隔」は、*時間間隔*と*単位*で指定されます。以下のように設定できます。 + *時間間隔*は、正の整数値を指定できます。定数値のみ指定可能です。 + *単位*には、以下のいずれかを指定できます。 - * DAY | HOUR | MINUTE | SECOND | MILLISECOND + * DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND + * ナノ秒精度の場合、約292年(2^63ナノ秒)以上の時間間隔は指定できません。 - 得られた結果集合内にひとつも値が含まれない場合、その区間の値を補間演算により求めることができます。値の求め方(補間演算の方法)は*補間方法*で指定します。 + *補間方法*には、以下のいずれかを指定できます。 * LINEAR :直近の前後の時刻のカラム値を用いて線形補間して出力します。 + ただし、数値演算できない型のカラムの場合は、以下のPREVIOUS演算と同じ補間を行います。 + + ナノ秒精度での演算結果として292年を超過する場合、関数実行のエラーになります。 * NONE  :ロウ全体を出力しません。 * NULL  :カラム値をNULLとします。 * PREVIOUS:直近の前の時刻のカラム値を出力します。 @@ -1503,6 +1534,9 @@ SQL文には以下の関数が用意されています。 | | [EXTRACT](#extract) | 時刻から特定のフィールドの値を取り出します | | | [STRFTIME](#strftime) | 時刻をフォーマット変換した文字列を返します | | | [MAKE_TIMESTAMP](#make_timestamp) | 時刻を生成します | +| | [MAKE_TIMESTAMP_MS](#make_timestamp_ms) | ミリ秒精度のTIMESTAMP(3)型の時刻を生成します | +| | [MAKE_TIMESTAMP_US](#make_timestamp_us) | マイクロ秒精度のTIMESTAMP(6)型の時刻を生成します | +| | [MAKE_TIMESTAMP_NS](#make_timestamp_ns) | ナノ秒精度のTIMESTAMP(9)型の時刻を生成します | | | [TIMESTAMP_TRUNC](#timestamp_trunc) | 時刻を切り捨てます | | [WINDOW](#window_function) | [ROW_NUMBER](#row_number) | 結果のロウに対して、一意となる連番値を割り振ります | | [その他](#other_function) | [COALESCE](#coalesce) | NULLではない最初の引数を返します | @@ -2865,7 +2899,7 @@ SELECT * FROM timeseries WHERE date > TIMESTAMP('2018-12-01T10:30:00Z'); - 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。*timestamp_string*にタイムゾーン情報が含まれる場合は指定する必要はありません。指定して矛盾がある場合はエラーが返ります。 - 接続時にタイムゾーンが指定されている場合、オフセット計算された値が返ります。 -- 結果の型はマイクロ秒精度のTIMESTAMP(9)型です。 +- 結果の型はナノ秒精度のTIMESTAMP(9)型です。 - TIMESTAMP_NS関数の逆変換(ナノ秒精度のTIMESTAMP(9)型から文字列型への変換)は、[CAST](#cast)を用いてください。 + CAST(*timestamp* AS STRING) @@ -2880,8 +2914,9 @@ SELECT * FROM timeseries WHERE date > TIMESTAMP('2018-12-01T10:30:00Z'); - 引数*timestamp*には、TIMESTAMP型の値を指定します。また、精度値指定付きTIMESTAMP型も指定できます。 - 引数*duration*には、整数を指定します。負の数を指定した場合は、時刻を減算します。 + - ナノ秒精度の場合、約292年(2^63ナノ秒)以上の日時間隔は指定できません。 - 引数*time_unit*には、次のいずれかの識別子を指定します。 - - YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND + - YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND - 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。 - 年もしくは月の加算によって算出された月に同一日が存在しない場合、日はその月の最終日に丸められます。例えば5月31日に1月加算すると、6月31日は存在しないため6月30日に丸められます。 - 接続時にタイムゾーンが指定されている場合、オフセット計算された値が返ります。 @@ -2902,8 +2937,6 @@ SELECT TIMESTAMP_ADD(MONTH, TIMESTAMP('2019-05-31T01:23:45.678Z'), 1, '-02:00'); ``` - - 時間単位*time_unit*の指定はMILLISECONDまでです。 - #### TIMESTAMP_DIFF @@ -2916,7 +2949,8 @@ SELECT TIMESTAMP_ADD(MONTH, TIMESTAMP('2019-05-31T01:23:45.678Z'), 1, '-02:00'); - 引数*timestamp1*と*timestamp2*には、TIMESTAMP型の値を指定します。また、精度値指定付きTIMESTAMP型も指定できます。 - 引数*time_unit*には、次のいずれかの識別子を指定します。識別子で指定の単位のみの差分を計算するのではなく、識別子未満の単位も計算に利用されます。例えばMONTH指定で2019/09/30と2019/10/02を比較する場合、0ヶ月2日が差分となるため、出力は1ではなく0となります。 - - YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND + - YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND + - 時間単位*time_unit*としてナノ秒単位の精度を指定した場合、計算結果が約292年(2^63ナノ秒)を超えると関数実行時にエラーが発生します。 - 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。 - 接続時にタイムゾーンが指定されている場合、オフセット計算された値が差分計算に利用されます。 - 結果の型はLONG型です。 @@ -2952,10 +2986,6 @@ SELECT TIMESTAMP_DIFF(MONTH, MAKE_TIMESTAMP(2019, 8, 1), MAKE_TIMESTAMP(2019, 6, ``` -【メモ】 -- 時間単位*time_unit*の指定は、MILLISECONDまでです。 - - #### TO_TIMESTAMP_MS | | | @@ -3017,7 +3047,7 @@ SELECT TO_EPOCH_MS(TIMESTAMP('2020-12-31T23:59:59.999+09:00')); - YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND | DAY_OF_WEEK | DAY_OF_YEAR - DAY_OF_WEEKは日曜が始点で0、土曜が終点で6となります。 - DAY_OF_YEARは1月1日が始点で1、12月31日が終点で365または366となります。 - - MILISECOND,MICROSECOND,NANOSECONDを指定した場合、いずれも時刻の小数部全てを含む値になります。 + - MILLISECOND,MICROSECOND,NANOSECONDを指定した場合、いずれも時刻の小数部全てを含む値になります。 - 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。 - 接続時にタイムゾーンが指定されている場合、オフセット計算された値が返ります。引数*timezone*と両方で指定されている場合は引数で指定したものが利用されます。 - 結果の型はLONG型です。 @@ -3100,7 +3130,7 @@ TIMESTAMP型の値を生成して返します。 - 引数*hour*, *min*, *sec*を指定しない場合は、全て0を指定したものとみなします。 - 引数*sec*には、ミリ秒単位の指定が可能です。ミリ秒未満は四捨五入した値に丸められますが、浮動小数点演算の仕組みに基づく誤差が生じる可能性があります。 -- 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。 +- 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。省略時は、クライアント接続設定のタイムゾーンに従います(デフォルト:UTC)。 - 結果の型はTIMESTAMP型(ミリ秒精度)です。 例) @@ -3114,6 +3144,42 @@ SELECT MAKE_TIMESTAMP(2019, 9, 19, 10, 30, 15.123, '+09:00'); ``` +#### MAKE_TIMESTAMP_MS + +| | | +|------|-------| +| 書式 | MAKE_TIMESTAMP_MS(year, month, day, sec, fraction [, timezone])| + +ミリ秒精度のTIMESTAMP(3)型の値を生成して返します。 + +- 引数*fraction*には、秒単位未満の小数部のフィールド値を指定します。指定可能な値の範囲は0~999です。 +- 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。省略時は、クライアント接続設定のタイムゾーンに従います(デフォルト:UTC)。 +- 結果の型はミリ秒精度のTIMESTAMP(3)型です。 + +#### MAKE_TIMESTAMP_US + +| | | +|------|-------| +| 書式 | MAKE_TIMESTAMP_US(year, month, day, sec, fraction [, timezone])| + +マイクロ秒精度のTIMESTAMP(6)型の値を生成して返します。 + +- 引数*fraction*には、秒単位未満の小数部のフィールド値を指定します。指定可能な値の範囲は0~999,999です。 +- 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。省略時は、クライアント接続設定のタイムゾーンに従います(デフォルト:UTC)。 +- 結果の型はマイクロ秒精度のTIMESTAMP(6)型です。 + +#### MAKE_TIMESTAMP_NS + +| | | +|------|-------| +| 書式 | MAKE_TIMESTAMP_NS(year, month, day, sec, fraction [, timezone])| + +ナノ秒精度のTIMESTAMP(9)型の値を生成して返します。 + +- 引数*fraction*には、秒単位未満の小数部のフィールド値を指定します。指定可能な値の範囲は0~999,999,999です。 +- 引数*timezone*には、タイムゾーン(Z|±hh:mm|±hhmm)を指定します。省略時は、クライアント接続設定のタイムゾーンに従います(デフォルト:UTC)。 +- 結果の型はナノ秒精度のTIMESTAMP(9)型です。 + #### TIMESTAMP_TRUNC | | | @@ -3842,6 +3908,7 @@ FROM employees; GridDBでは、実行計画を示すヒントをクエリに指定することで、SQL文を変えることなく実行計画を制御できます。 +『[GridDB SQLチューニングガイド](../md_sql_tuning_guide/md_sql_tuning_guide.md)』を参照して、ヒント句を用いたチューニングを行ってください。 @@ -4165,6 +4232,8 @@ CREATION_TIME NODE_ADDRESS NODE_PORT APPLICATION_NAME | SQL_TASK_COUNT | 実行中SQLタスク総数 | LONG | | SQL_PENDING_JOB_COUNT | 送信抑制により停止中のSQLジョブ数 | LONG | | SQL_SEND_MESSAGE_SIZE | SQL送信メッセージサイズ | LONG | +| SQL_TOTAL_REQUEST_COUNT | SQL累計リクエスト数 | LONG | +| TRANSACTION_TOTAL_REQUEST_COUNT | トランザクション累計リクエスト数 | LONG | 【メモ】 - データベース管理者は全てのデータベースを横断した情報を取得できます。 @@ -4173,6 +4242,91 @@ CREATION_TIME NODE_ADDRESS NODE_PORT APPLICATION_NAME - 各統計値の項目の詳細および設定方法については『[GridDB 機能リファレンス](../md_reference_feature/md_reference_feature.md)』を参照してください。 +## 実行中のステートメント(SQL)のリソース統計 + +実行中の処理のリソース消費統計値について、各ノードのステートメント(本バージョンではSQL限定)ごとに1つの行で示すメタテーブルとして取得できます。 + +**テーブル名** + +\#statement_resources + +**スキーマ** + +| 列名 | 内容 | 型 | +|------|-----------------------------------------------------|---------| +|REQUEST_ID|リクエストID(クエリID)|STRING| +|NODE_ADDRESS|処理実行中のノードのアドレス(system)|STRING| +|NODE_PORT|処理実行中のノードのポート(system)|INTEGER| +|CONNECTION_ADDRESS|クライアントのアドレス ※本バージョンでは常にNULL|STRING| +|CONNECTION_PORT|クライアントのポート ※本バージョンでは常にNULL|INTEGER| +|USER_NAME|ユーザ名|STRING| +|APPLICATION_NAME|アプリケーション名|STRING| +|STATEMENT_TYPE|ステートメント種別 ※本バージョンでは常に'SQL_EXECUTE'|STRING| +|START_TIME|処理開始時刻|TIMESTAMP| +|ACTUAL_TIME|実処理時間(単位:ミリ秒) ※本バージョンでは処理開始時刻から経過時刻と等価|LONG| +|MEMORY_USE|メモリ使用量(単位:バイト)|LONG| +|DATA_STORE_ACCESS|データストアのアクセス量(単位:バイト)|LONG| +|SQL_STORE_USE|SQL中間ストアの使用量(単位:バイト)|LONG| +|NETWORK_TRANSFER_SIZE|ネットワーク転送量(単位:バイト) ※本バージョンでは常に0|LONG| +|NETWORK_TIME|ネットワーク転送時間(単位:ミリ秒) ※本バージョンでは常に0|LONG| +|AVAILABLE_CONCURRENCY|処理に利用可能な並列スレッド数 ※本バージョンでは常に0|LONG| +|RESOURCE_RESTRICTIONS|リソース制限事項一覧 ※本バージョンでは常に空文字列|STRING| +|STATEMENT|ステートメント内容(例:SQL文) ※本バージョンでは常にNULL|STRING| + +## 実行中の分散タスクのリソース統計 + +実行中の処理のリソース消費統計値について、各ノードのステートメント(本バージョンではSQL限定)内の分散タスクごとに1つの行で示すメタテーブルとして取得できます。 + +**テーブル名** + +\#task_resources + +**スキーマ** + +| 列名 | 内容 | 型 | +|------|-----------------------------------------------------|---------| +|REQUEST_ID|リクエストID(クエリID)|STRING| +|JOB_ORDINAL|一つの要求IDに対応する、実行ジョブの順序番号|LONG| +|TASK_ORDINAL|一つの実行ジョブに対応する、分散タスクの順序番号|INTEGER| +|NODE_ADDRESS|処理実行中のノードのアドレス(system)|STRING| +|NODE_PORT|処理実行中のノードのポート(system)|INTEGER| +|TASK_TYPE|タスク種別(例:SCAN、JOINなど)|STRING| +|LEAD_TIME|実行開始後の経過時間(単位:ミリ秒)|LONG| +|ACTUAL_TIME|実処理時間(単位:ミリ秒)|LONG| +|MEMORY_USE|メモリ使用量(単位:バイト)|LONG| +|DATA_STORE_ACCESS|データストアのアクセス量(単位:バイト)|LONG| +|SQL_STORE_USE|SQL中間ストアの使用量(単位:バイト)|LONG| +|NETWORK_TRANSFER_SIZE|ネットワーク転送量(単位:バイト) ※本バージョンでは常に0|LONG| +|NETWORK_TIME|ネットワーク転送時間(単位:ミリ秒) ※本バージョンでは常に0|LONG| +|PLAN|プラン内容を示すJSON文字列 ※本バージョンでは常にNULL|STRING| + + +## サイト間レプリケーション状態 + +サイト間レプリケーション状態をメタテーブルとして取得できます。 + +**テーブル名** + +\#replication_stats + +**スキーマ** + +| 列名 | 内容 | 型 | +|------|-----------------------------------------------------|---------| +|CLUSTER_PARTITION_INDEX|クラスタパーティション番号|INTEGER| +|CLUSTER_REPLICATION_ROLE|サイト間レプリケーションのロール|STRING| +|PRIMARY_ADDRESS|プライマリのオーナーアドレス|STRING| +|PRIMARY_PORT|プライマリのオーナーポート|INTEGER| +|STANDBY_ADDRESS|スタンバイのオーナーアドレス|STRING| +|STANDBY_PORT|スタンバイのオーナーポート|INTEGER| +|PRIMARY_LSN|プライマリのLSN|LONG| +|STANDBY_LSN|スタンバイのLSN(ログシーケンス番号)|LONG| +|PRIMARY_LAST_UPDATED_TIME|プライマリの最終更新時刻|TIMESTAMP| +|STANDBY_LAST_UPDATED_TIME|スタンバイの最終更新時刻|TIMESTAMP| +|REPLICATION_STATUS|レプリケーション状態|STRING| +|LAST_ERROR_CODE|最後に発生したエラーコード|LONG| +|LAST_ERROR_TIME|最後に発生したエラー時刻|TIMESTAMP| + # 予約語 GridDBのSQLでは、以下の単語が予約語として定義されています。 diff --git a/manuals/md_reference_tql/md_reference_tql.md b/manuals/md_reference_tql/md_reference_tql.md index c44feba..22a95de 100644 --- a/manuals/md_reference_tql/md_reference_tql.md +++ b/manuals/md_reference_tql/md_reference_tql.md @@ -279,13 +279,69 @@ YYYY-MM-DDThh:mm:ss.SSSZ 表現範囲については付録の*値の範囲*を参照してください。 +#### TIMESTAMP_MS(str) + +時刻の文字列表現をミリ秒精度のTIMESTAMP(3)型に変換します。 + +時刻の文字列表現としては、西暦での次の形式のみをサポートします。タイムゾーン文字列(Z|±hh:mm|±hhmm)の指定が必須です。 + +``` example +YYYY-MM-DDThh:mm:ssZ +YYYY-MM-DDThh:mm:ss.SSSZ +``` + +上の形式のうち、英字の部分は10進数表現の整数値です。「SSS」以外はTIMESTAMP(str)を参照してください。 +- SSS: ミリ秒に相当する。常に3桁であり、0から999の範囲で指定する + +表現範囲については付録の*値の範囲*を参照してください。 + + +#### TIMESTAMP_US(str) + +時刻の文字列表現をマイクロ秒精度のTIMESTAMP(6)型に変換します。 + +時刻の文字列表現としては、西暦での次の形式のみをサポートします。タイムゾーン文字列(Z|±hh:mm|±hhmm)の指定が必須です。 + +``` example +YYYY-MM-DDThh:mm:ssZ +YYYY-MM-DDThh:mm:ss.SSSZ +YYYY-MM-DDThh:mm:ss.SSSSSSZ +``` + +上の形式のうち、英字の部分は10進数表現の整数値です。「SSS」「SSSSSS」以外はTIMESTAMP(str)を参照してください。 +- SSS: ミリ秒に相当する。常に3桁であり、0から999の範囲で指定する +- SSSSSS: マイクロ秒に相当する。常に6桁であり、0から999999の範囲で指定する + +表現範囲については付録の*値の範囲*を参照してください。 + +#### TIMESTAMP_NS(str) + +時刻の文字列表現をナノ秒精度のTIMESTAMP(9)型に変換します。 + +時刻の文字列表現としては、西暦での次の形式のみをサポートします。タイムゾーン文字列(Z|±hh:mm|±hhmm)の指定が必須です。 + +``` example +YYYY-MM-DDThh:mm:ssZ +YYYY-MM-DDThh:mm:ss.SSSZ +YYYY-MM-DDThh:mm:ss.SSSSSSZ +YYYY-MM-DDThh:mm:ss.SSSSSSSSSZ +``` + +上の形式のうち、英字の部分は10進数表現の整数値です。「SSS」、「SSSSSS」、「SSSSSSSSS」以外はTIMESTAMP(str)を参照してください。 +- SSS: ミリ秒に相当する。常に3桁であり、0から999の範囲で指定する +- SSSSSS: マイクロ秒に相当する。常に6桁であり、0から999,999の範囲で指定する +- SSSSSSSSS: ナノ秒に相当する。常に9桁であり、0から999,999,999の範囲で指定する + +表現範囲については付録の*値の範囲*を参照してください。 + +#### TIMESTAMP_ADD(time_unit, timestamp, duration) #### TIMESTAMPADD(time_unit, timestamp, duration) -指定の時刻に対し、指定した単位の特定の期間を加算します。期間には数値型の値を指定します。負の値の期間を指定した場合は、元の時刻より過去の時刻が求まります。現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。 +指定の時刻に対し、指定した単位の特定の期間を加算します。期間には数値型の値を指定します。負の値の期間を指定した場合は、元の時刻より過去の時刻が求まります。現バージョンでは、算出の際に使用されるタイムゾーンはクライアント接続設定に従います(デフォルト:UTC)。関数ごとの個別指定はできません。 第一引数time_unitには、次のいずれかの識別子を指定します。 -- YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND - +- YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND + - NANOSECONDを指定した場合、期間には約292年(2^63ナノ秒)以上の値は指定できません 例) 時刻型のカラムdateの値が、現在時刻から1時間前の時刻よりも前のデータを検索する @@ -294,12 +350,14 @@ SELECT * WHERE date < TIMESTAMPADD(HOUR, NOW(), -1) ``` +#### TIMESTAMP_DIFF(time_unit, timestamp1, timestamp2) #### TIMESTAMPDIFF(time_unit, timestamp1, timestamp2) -2つの時刻の差について、指定した単位で結果を求めます。結果は数値型の値となります。現バージョンでは、算出の際に使用されるタイムゾーンはUTCです。 +2つの時刻の差について、指定した単位で結果を求めます。結果は数値型の値となります。現バージョンでは、算出の際に使用されるタイムゾーンはクライアント接続設定に従います(デフォルト:UTC)。関数ごとの個別指定はできません。 第一引数time_unitには、次のいずれかの識別子を指定します。 -- YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND +- YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND | MICROSECOND | NANOSECOND + - NANOSECONDを指定した場合、計算結果が約292年(2^63ナノ秒)を超えると関数実行時にエラーが発生します。 例) 時刻型のカラムexpiredとissuedの差(=expired-issued)が3日以上のデータを検索する diff --git a/manuals/md_sql_tuning_guide/md_sql_tuning_guide.md b/manuals/md_sql_tuning_guide/md_sql_tuning_guide.md index c1089d3..55cb1b5 100644 --- a/manuals/md_sql_tuning_guide/md_sql_tuning_guide.md +++ b/manuals/md_sql_tuning_guide/md_sql_tuning_guide.md @@ -467,7 +467,7 @@ where col1 = 1 and (col3 >= 0 and col3 < 10) and ABS(col2) = 1 (col1,col2,col3 GridDBのSQL最適化において、複数テーブルのジョイン演算の実行の仕方を決定する方法について説明します。 - [ジョイン順序の決定方法](#join_order_selection_approach) - - 複数テーブルのジョインする順序を決定します。 + - 複数テーブルをジョインする順序を決定します。 - 順序の決め方にはコストベースによる方法とルールベースによる方法の2通りの方法があります。 - [索引適用の決定方法](#join_index_adaption_rule) @@ -522,7 +522,7 @@ SQL実行時、3つ以上のテーブルの結合がある場合、どのテー [メモ] -- もし絞込み度合いが同じジョイン演算の候補が複数あった場合、コスト(ロウ件数概算値)による順序決定ができないので、以下の優先度従いジョインを先に実行する順序にします。 +- もし絞込み度合いが同じジョイン演算の候補が複数あった場合、コスト(ロウ件数概算値)による順序決定ができないので、以下の優先度に従いジョインを先に実行する順序にします。 - ジョイン(部分木)に含まれるノードのロウ件数概算値の最大値が小さいほう - ジョイン(部分木)に含まれるノード数が少ないほう @@ -599,13 +599,49 @@ SQL実行時、3つ以上のテーブルの結合がある場合、どのテー - SQL構文のヒント「Leading」を用いると、ジョインの順序を入れ替えることができます。ヒントの詳細は[ヒント句](#label_hint)をご参照ください。 -#### 駆動表の選択 + +### 駆動表の選択 -結合処理において、最初にアクセスするテーブルを駆動表、次にアクセスして結合するテーブルを内部表といいます。 +結合処理において、最初にアクセスするテーブルを駆動表、次にアクセスして結合するテーブルを内部表といいます。駆動表の決め方には、コストベースによる方法とルールベースによる方法の2種類あります。いずれを用いるかは設定により選択できます。 + + +#### 駆動表の選択方法の設定 + +コストベースによる方法とルールベースによる方法のいずれを用いるかは切り替え可能で、以下のようにして設定できます。 + +- サーバのクラスタ設定(gs_cluster.json)にいずれの方法を用いるか設定できます。全てのSQLについて同じ決定方法になります。具体的な設定方法は『[GridDB 機能リファレンス](../md_reference_feature/md_reference_feature.md)』を参照してください。 +- ヒントを記述することでいずれの方法を用いるかを指定できます。ヒントを記述したSQL毎に決定方法を指定できます。具体的な記述方法は[ヒント句](#label_hint)を参照してください。 + +【メモ】 +- 駆動表の選択方法のデフォルトは、コストベースによる方法です。 + + +#### コストベースによる方法 + +コストベースによる駆動表の決定方法は、ジョイン演算を実行するコストが最も低いと推定される順序を決定する方法です。 +ここで用いるコストには、次の2種類があります。 + +- 中間出力コスト +ジョイン演算の入力となりうる各プランノードにおける、中間結果の出力ロウ件数の推定規模です。推定される下限値・上限値と、それらの推定値の確度(確定or概算)により示されます。 + +- スキャンコスト +ジョイン演算の内部表となりうる各スキャンプランのノードにおける、データ読み出し量の推定規模です。 + +※プランノード: SQL実行プランの構成要素です。このプランノードは、SQL実行の際に、分散処理の基本単位(タスク)と一対一で対応します。プランノードの演算の種別としてはスキャンやジョインなどがあり、それぞれの種別や演算内容に応じた負荷見積もりは、ジョイン方向を定めるための基本的な判断材料として用いられます。 + +対象のジョイン演算に関わる中間出力コスト・スキャンコストを合わせた総コストについて、(ジョイン方向を定めない場合対比で)その削減効果が一定程度見込まれる場合にのみジョイン方向を定めることとし、かつ、総コストがより低くなる方を駆動表側とするよう判定します。 + +【メモ】 +- この基準を用いることで、ジョイン演算や関係するスキャン演算の実コスト(処理時間・リソース量)を近似的に推定するものとします。絞り込み条件式や対応する索引、データ分布によって、推定コストと実コストの差異が変動することがあります。 +- ルールベースによる方法の場合に存在する制約条件(例:内部表側テーブルに対する索引有無)には依存しません。 + + + +#### ルールベースによる方法 ジョインの順序(駆動表と内部表)は次のルールで決まります。 -2つのテーブルの結合の場合、定数の等価絞込み条件があるテーブルが駆動表になります。 +2つのテーブルの結合の場合、定数の等価絞込み条件があるテーブルが駆動表になります。両テーブル共に満たす場合は、先に記述された方を駆動表として判定します。 例) ``` @@ -837,6 +873,21 @@ SELECT * - TableRowCount(テーブル ロウ件数) - コストベースによるジョイン順序決定のためのコスト計算に用いるロウ件数の概算値を与えます。(ただし、コストベースによるジョイン順決定を行う場合にのみ有効です) +#### ジョイン駆動表 + +ジョイン駆動表の決定方法を指定します。 + +- CostBasedJoinDriving() + - コストベースによる方法で駆動表を決定します。 +- NoCostBasedJoinDriving() + - コストベースによる方法を用いないで、ルールベースによる方法で駆動表を決定します。 + +【メモ】 +- 同一のSQL文内で、コストベースのジョイン駆動表最適化の有効化・無効化ヒント両方の指定、この種別のヒントの複数回の指定はできません。 +- コストベースのジョイン最適化全般に対するヒント指定(CostBasedJoin / NoCostBasedJoin)や関連するクラスタ設定が同時に設定された場合、コストベースのジョイン駆動表最適化の有効化・無効化ヒントの指定が優先されます。 +- ジョイン方向に関するヒント指定(方向指定のLeadingヒント)が同時に指定された場合、該当するジョイン演算についてのみ、その指定に従うルールベースの最適化が適用されます。 + + #### 結合方式 結合方式を指定します。 From 40b6343a21fd681240cec87fc828a4ae3e49a2e0 Mon Sep 17 00:00:00 2001 From: knonomura Date: Thu, 17 Jul 2025 18:48:56 +0900 Subject: [PATCH 2/2] Add for V5.8 --- .../img/cluster_replication_allm.png | Bin 0 -> 184458 bytes .../img/cluster_replication_operation_1m.png | Bin 0 -> 46898 bytes .../img/cluster_replication_operation_2m.png | Bin 0 -> 21221 bytes .../img/cluster_replication_operation_3m.png | Bin 0 -> 120632 bytes .../img/cluster_replication_operation_4m.png | Bin 0 -> 130028 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 manuals/md_reference_feature/img/cluster_replication_allm.png create mode 100644 manuals/md_reference_feature/img/cluster_replication_operation_1m.png create mode 100644 manuals/md_reference_feature/img/cluster_replication_operation_2m.png create mode 100644 manuals/md_reference_feature/img/cluster_replication_operation_3m.png create mode 100644 manuals/md_reference_feature/img/cluster_replication_operation_4m.png diff --git a/manuals/md_reference_feature/img/cluster_replication_allm.png b/manuals/md_reference_feature/img/cluster_replication_allm.png new file mode 100644 index 0000000000000000000000000000000000000000..c672502815939707e826e17650e9981d78353a58 GIT binary patch literal 184458 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 literal 0 HcmV?d00001 diff --git a/manuals/md_reference_feature/img/cluster_replication_operation_2m.png b/manuals/md_reference_feature/img/cluster_replication_operation_2m.png new file mode 100644 index 0000000000000000000000000000000000000000..fe8b8d4b16971be989e869499c0aa65a7b3156ec GIT binary patch literal 21221 zcmeIa2Q=JU+c)f-6d@5JLJ&lWF35})ExJ*IAWDc}WDvazb568~PPEaI7$%4kqeM># zqKq;VWiS!F6P;1!`;&8W=bZbz-&)W5*7rW|^R7E<$yzhB_tmd!|MtH2{~vx^M~#Y- ziIR+rj0&QztWQRE8be0*>)@Faz&B(DT8zN|zqsqGDUua+U6}(uoU~KWRv;sL8*_Hw z>J;#s>us$&Dx~9oO-)VV;o-m-H8r*F?(UeFn0xo`@$>VChK3Fd3@9il+`4rO4u?~p zCCd#UBfTeUXlNK28A(n~wzajrapOixN(u!9#r*udfq?-vHFa)oE;%`Qe0)5SNL*W6 zYiVgIDJjXw$cT%J3l0wU@$qqRaImzr)YsQnRaKRek`fXU;^E=p}L>fBp5>si~=tA3tViXFqxJ#LCJ_OG`^!T>R?Qs~Z~|ZEbC?uC4+C z0z*SX2n52$#zsU$q^72Zi;HV+ZZ0S&h?SM~%$YM_FjzxFzP`R$Sy=@I1@GRy z>+S8uIXOA&>+8b8 z!bl`CBqYS%-hOm+^wWg$){$pC^mPmlnI^~sfDaTd>L%`FWH;U){r$pgV>(PmcKaJd zS>cY4#S$UB1`IKrS)I!_tLu%@lAt>CD4S#a+1bJuP-b z?sRy9NtLpV3iOWcq}2AFFYDZ=Yd3C0KHVq0*{X~wr%39goeZPy7Bo(KJ~_SwSQ}9t1=XKwPJ=%_wwy;@*y-}XIH`$sSViG$fPs{z1F6T4du;%spbSj?fnJn1OH?syRWgQK^wcvt! zlZ|R;=$I>QV17SHQA$AxE%xq9qx-q(<{84ir#f|HFuKufpm6sB1YOZ{$Kg=oa7zsF z&c{m~gvP@9>(j%%Fkx78zcvTk16OHBWSLzov|9s;m=k15Kv#3FD$j=`AP33Ka9#!r z={wnPS3fqRl@O_kI%p^%Yl!@}Nys25`Fz?cMRj6NrUF7%AQhI&MvQ7R8Q_dC;7aFc zmc!^oz{k1mL{~F~0l`DS%tdwtu>|vVV#ypUvz35?4hJSPai6ifJi8eQS`;WM_-AfRCQ4)w$H0;Cw7Tz%G*RkhD|4GMpA=ImpPizuj=7{N zqUx3Wg@t~<1EpzIx+whwuz#20vsu-Z>GXH?nb)QvDG#b(Nz$%ki~!}kTWL7Ky;Pbm zEL(xIT-8_O%L{X@{x{=13dE>oWqCH+zKUQJrFQ8nAB;DGu$_s!XcaGI3>zmRq%w=b zZ~S2d*gq+hP0F&ZtM}X)e-9P1knWUXdv$Eh6w{9T(+8^ryGZVs; zNb8R_?7sE}aqr7~8Q{TW76W!|>6m+*@xW@pQ6s&`?h}&H{9y|8W`vTjz3=!qBRfW> zxAm!0cnJ@*Y^yjXcvk79??dfO=^!RRRaff9{w7iD1xdO-1HsP zr4Ud*@+V;bX?2h;2X!(qy<{saCU{UuAye>P`X+Tj*CNDoulE$2%?s2;?#0Jg7)@>z z-9=&J2jZS;!+DH3<#e#E&NyhM&Gq?j=Vo=Jqu40oh}H5k$>7eSV*7P9?RoqOyT&~n z7t&)UFHL;uF=YZ2_Mn}j3DkI=aJl=gr~ml4FFWQ+?~5u%&M{xk=H82Av;hw{2B;|d z<=^My#cvi0ZH+dTe7k+Q89zHGrU_yd>i#fW z?f_;#4G(|Qo0XhNt z?C9{E(_fqJ^N&13o3++xM(LcX3BBklbrAvrtAiLk3he|R2KapJu35d^Q+-xGOk%^x zr*x-}l>f>mqF(G8R7C=0AWBCCBIKDV3?}Zdhl7=Z!0Wfzcq^aezP+Me$x7+wQ8g`x`_e9| z%9l4~J3TG7PLD)0Y5(*xv3M4(iiAg4?CKPcGyt9Olqp*^ive}ebA+( z(3Nt}+D)LE;R}-19s$l?Ihom2*&A~ojgLQHSoCH83@nr$1|68qqcIuJSjAcM+23HL zBs8f?7%msSmt+~ob5UM=F&-NL2KUt}m@ zp)*{_UXw~ELuG>PMs>`u zX#*KH`i?s258V-m{F1-GoUO=V(6FK#D}XRLY~$g*Y#HGu4?UseHqs;G8+~us$twf( zeK5m8t*Kv--a}@C3JCnmf==nBrF&6<1+J`ic$l~kTUrBR6XQskt&qYZ)3w1`hx^ia z9@}}I3lMp~_^sMz zNyM{5mPhf5ZQ!)a!F^W;LKQX9$qi}MbPI^P@Q{N~RQ7ltlI%t}7~Mo-^1n^J_j-2y zVLW{mESDkP&Fra7bb86n$ZBavr?DMZ?roH9*8X-6&v!xCWfvQ~?_%>K(0U%WxvBkB z!Zu5)$k0spbyKAY>2nh9UnLWUaizM4{<8p*4ktz==Jfe`*xMtQ+HX+i+elw zXAQb!Wws%rk8#t_T!Hdj93v07%7=_% z7@?g?SLlu{>9xXIVG_qkf$EU#DT4LarQ6!!`7uH*mMqlFKaJXEwOEcjqg|A~K3dUV z&1J!&t40NyWINw z0YCmu()$ryqCnWZC-MGpSPF^N?<@TIkND_>Q_Fsn*ZAT6>4q@Y9ky#fg6;n!`?nJt z-#nZe9PUbpxTWj)(fyz+twp_QsVcoVFlc;@RNVVh{CTCYw#(n_ug$bQkQPCqI;Qp` zzf7D5X;4r6@UGgN)w+HE;mnmiyMifJHQ`5NS?hvC@*dU=-QVRxJ&b=2&^mwKf#Gki zR_hgg2Xb!gz$x1St7OD*A8VE=txwf77_+I){A|Ac2!L zMzeGj+EDmj_PLjyOaa2X(Ep*{6IiD zNsgO3v;sqQ|31|0!g+$4w*ywI!g|9;+?T~s`w3rWwV%Ev>}a_5--r7rGBSrs`f6Fh;owX4#w^<|23I^;V(FvTx^9DPO2S0a0;=gV>qAEc! z&3_~P5RqevS=$pO*6rgKy_|DQ;1?Zknkq8=rGTukwr}>MOm5aPWwV^MN+MAEmYc5g zSs|Y+V%=~Nt@X(AN21iOGT-adk^9qf@QSsN5Iy}*(Kd(>>fLG~{M`W3%l>^~9UhXt zhu|UNZrw6$c{a|MyRzW#w%2Ydpa_~oTkuDo?})yGm<#*OFVIIXP29UPe8$JN;HHR#9&w8HUH;gUG&^PZZYqLmSIbA;xK921|qv!NHb z_Oclwa`CtPcj8>RlLvlIfg=^U!)dUbhi?Y9xd^nSoS9H2=)s2)+3M0o2!&mAJ^7@m z^dcc18mBWd5F`vI`;ovv(P`go2`|}sL)|*bs{eZ!OK6}?PEyT%&VGkL5`K@1~IOE2-bh+*_zjsFa;>kF{&yOc% zd^a{1{+cxs&raeK>^Zl-aQnZ4apNVVY4b8}oJaOD{C>{e^V_(1tOlqs^<0f~?CG+< z=YrMO*$B;z6Ed;^v?og)T*71N-E<7DSV&)CT%IdR5z$WH`n6g(ou;V#I;OFA_1;Ko z*^9q>i7IoE2^wx!*U}<6Z!_>hQIgN5ZO30aR84&Tx+Jm8#SkIXx*4E;)^zJ%m2;V( zRP{y7EvZRMK0B>UxaPE2qnL-a^7)Z#Y8!H5CH+Xe8}*7ZqUZ09A*$8L%^Oh7_Cl_- z)hpcm5WBF;tISP>>l>atTH&{7~y#vy7O7#Xr zBM7OBY`*(EA$L0#AL1Vi{Wm{#6!HX+9smMWcXW2m3*X+d_gY3f?kdKCYm5ROrvOQJ z`(H^{^GtRwY&7m&%E^IsZasIZrdJ}&Huxxbh9d$Rgzyh$T&E#dIbP9@>){tcPMsNr z=PGiy7Sp?u74An~2c2ueSoND*3bQ+1!-`Rhqka7y8UvGhYO=>Rofk5qBQhxlavJuR82}^Rs2FzPPWK?=~UfzO>MY3A4ehO zOjjl$msQL5?}g7n`NpdpHRcEfksYBpyywO(qCxvP%>n1xx8W|+n*^6i!5R`TOU%!8 zo}Gu*q~Gqtt`SWz?$rQAGOreGmFk*!Q*WM2>1nIdFlu(~pOIaSKXn@FpplI`Bki)J zEtj6Vh5IX~$c)S`iKcJ4?(Vx$zR&B?tyO!xEYUx>{LjJz|IKjZe>ZzE|DAD7;RcSS zm8ryJOFzBg3YBGxADN!mKbQyGL{5u+cwTbz{4(?Ouh*sf@$uBeO1|n>2L`FXthr?)6ck zxw|&bpNre;cdJ0t>?m~D@#^Yy#Irtr^8}hYl+3b1QQ?h-# zDWa0|VNu2K+h;*;!=_yxF~0AfLv^Ov+kpk}jivP?8Zk|&$8_#kYCqa!bvYGoSZ*^8 zlEoNwGpLEM`jJ!MWue{}-`cA(vknFLrO8bcN;$Lbo`Y2Pz3DM7%#|)BIsoF{t!tTN zcbn_?)MVu{?Yg9kPLe}<2n6~J615+NQ0m4dBMGJ!*c!CXA0Hsviasl~ zv>PZR0{pPC_?U_UZȓ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 literal 0 HcmV?d00001 diff --git a/manuals/md_reference_feature/img/cluster_replication_operation_3m.png b/manuals/md_reference_feature/img/cluster_replication_operation_3m.png new file mode 100644 index 0000000000000000000000000000000000000000..48da34aa2ae8b6bd6d81b9ebeceec1cd562decd9 GIT binary patch literal 120632 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 RO?eg!sDM*QV8 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