Struttura C Interval

Ogni tipo di dati intervallo C elencato nella sezione Tipi di dati C usa la stessa struttura per contenere i dati intervallo. Quando viene chiamato SQLFetch, SQLFetchScroll o SQLGetData , il driver restituisce i dati nella struttura SQL_INTERVAL_STRUCT, usa il valore specificato dall'applicazione per i tipi di dati C (nella chiamata a SQLBindCol, SQLGetData o SQLBindParameter) per interpretare il contenuto di SQL_INTERVAL_STRUCT e popola il campo interval_type della struttura con il valore enumerazione corrispondente al tipo C. Si noti che i driver non leggono il campo interval_type per determinare il tipo dell'intervallo. Recuperano il valore del campo descrittore SQL_DESC_CONCISE_TYPE. Quando la struttura viene usata per i dati dei parametri, il driver usa il valore specificato dall'applicazione nel campo SQL_DESC_CONCISE_TYPE del APD per interpretare il contenuto di SQL_INTERVAL_STRUCT, anche se l'applicazione imposta il valore del campo interval_type su un valore diverso.

Questa struttura è definita come segue:

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;  

Il campo interval_type del SQL_INTERVAL_STRUCT indica all'applicazione quale struttura è contenuta nell'unione e quali membri della struttura sono rilevanti. Il campo interval_sign ha il valore SQL_FALSE se il campo iniziale dell'intervallo non è firmato; se è SQL_TRUE, il campo iniziale è negativo. Il valore nel campo iniziale stesso è sempre senza segno, indipendentemente dal valore di interval_sign. Il campo interval_sign funge da bit di segno.