Bagikan melalui


Struktur Interval C

Setiap jenis data interval C yang tercantum di bagian Tipe Data C menggunakan struktur yang sama untuk berisi data interval. Ketika SQLFetch, SQLFetchScroll, atau SQLGetData dipanggil, driver mengembalikan data ke dalam struktur SQL_INTERVAL_STRUCT, menggunakan nilai yang ditentukan oleh aplikasi untuk jenis data C (dalam panggilan ke SQLBindCol, SQLGetData, atau SQLBindParameter) untuk menafsirkan konten SQL_INTERVAL_STRUCT, dan mengisi bidang interval_type struktur dengan nilai enum yang sesuai dengan jenis C. Perhatikan bahwa driver tidak membaca bidang interval_type untuk menentukan jenis interval; mereka mengambil nilai bidang deskriptor SQL_DESC_CONCISE_TYPE. Ketika struktur digunakan untuk data parameter, driver menggunakan nilai yang ditentukan oleh aplikasi di bidang SQL_DESC_CONCISE_TYPE APD untuk menginterpretasikan konten SQL_INTERVAL_STRUCT, bahkan jika aplikasi menetapkan nilai bidang interval_type ke nilai yang berbeda.

Struktur ini didefinisikan sebagai berikut:

typedef struct tagSQL_INTERVAL_STRUCT  
{  
   SQLINTERVAL interval_type;   
   SQLSMALLINT interval_sign;  
   union {  
         SQL_YEAR_MONTH_STRUCT   year_month;  
         SQL_DAY_SECOND_STRUCT   day_second;  
         } intval;  
} SQL_INTERVAL_STRUCT;  
typedef enum   
{  
   SQL_IS_YEAR = 1,  
   SQL_IS_MONTH = 2,  
   SQL_IS_DAY = 3,  
   SQL_IS_HOUR = 4,  
   SQL_IS_MINUTE = 5,  
   SQL_IS_SECOND = 6,  
   SQL_IS_YEAR_TO_MONTH = 7,  
   SQL_IS_DAY_TO_HOUR = 8,  
   SQL_IS_DAY_TO_MINUTE = 9,  
   SQL_IS_DAY_TO_SECOND = 10,  
   SQL_IS_HOUR_TO_MINUTE = 11,  
   SQL_IS_HOUR_TO_SECOND = 12,  
   SQL_IS_MINUTE_TO_SECOND = 13  
} SQLINTERVAL;  
  
typedef struct tagSQL_YEAR_MONTH  
{  
   SQLUINTEGER year;  
   SQLUINTEGER month;   
} SQL_YEAR_MONTH_STRUCT;  
  
typedef struct tagSQL_DAY_SECOND  
{  
   SQLUINTEGER day;  
   SQLUINTEGER hour;  
   SQLUINTEGER minute;  
   SQLUINTEGER second;  
   SQLUINTEGER fraction;  
} SQL_DAY_SECOND_STRUCT;  

Bidang interval_type SQL_INTERVAL_STRUCT menunjukkan kepada aplikasi struktur apa yang dipegang dalam serikat dan juga anggota struktur apa yang relevan. Bidang interval_sign memiliki nilai SQL_FALSE jika bidang terdepan interval tidak ditandatangani; jika SQL_TRUE, bidang di depan negatif. Nilai di bidang utama itu sendiri selalu tidak ditandatangani, terlepas dari nilai interval_sign. Bidang interval_sign bertindak sebagai bit tanda.