33.15. Режим ÑовмеÑÑимоÑÑи Ñ Informix
- 33.15.1. ÐополниÑелÑнÑе ÑипÑ
- 33.15.2. ÐополниÑелÑнÑе/недоÑÑаÑÑие опеÑаÑоÑÑ Ð²ÑÑÑаиваемого SQL
- 33.15.3. ÐблаÑÑи деÑкÑипÑоÑов SQLDA, ÑовмеÑÑимÑе Ñ Informix
- 33.15.4. ÐополниÑелÑнÑе ÑÑнкÑии
- 33.15.5. ÐополниÑелÑнÑе конÑÑанÑÑ
- 33.15.2. ÐополниÑелÑнÑе/недоÑÑаÑÑие опеÑаÑоÑÑ Ð²ÑÑÑаиваемого SQL
ÐÑепÑоÑеÑÑÐ¾Ñ ecpg Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð² Ñак назÑваемом Ñежиме ÑовмеÑÑимоÑÑи Ñ Informix. ÐÑли ÑÑÐ¾Ñ Ñежим вклÑÑÑн, ecpg ÑÑаÑаеÑÑÑ ÑабоÑаÑÑ ÐºÐ°Ðº пÑедкомпилÑÑÐ¾Ñ Informix Ð´Ð»Ñ ÐºÐ¾Ð´Ð° Informix E/SQL. ÐообÑе говоÑÑ, ÑÑо позволÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð²ÑÑÑаиваемÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL, иÑполÑзÑÑ Ð·Ð½Ð°Ðº доллаÑа вмеÑÑо Ñлов EXEC SQL:
$int j = 3; $CONNECT TO :dbname; $CREATE TABLE test(i INT PRIMARY KEY, j INT); $INSERT INTO test(i, j) VALUES (7, :j); $COMMIT;
ÐÑимеÑание
ÐÐµÐ¶Ð´Ñ $ и поÑледÑÑÑей диÑекÑивой пÑепÑоÑеÑÑоÑа (в ÑаÑÑноÑÑи, include, define, ifdef и Ñ. п.) не должно бÑÑÑ Ð¿ÑобелÑнÑÑ
Ñимволов. РпÑоÑивном ÑлÑÑае пÑепÑоÑеÑÑÐ¾Ñ Ð²Ð¾ÑпÑÐ¸Ð¼ÐµÑ ÑледÑÑÑее Ñлово как Ð¸Ð¼Ñ Ð¿ÐµÑеменной ÑÑедÑ.
ÐоддеÑживаÑÑÑÑ Ð´Ð²Ð° Ñежима ÑовмеÑÑимоÑÑи: INFORMIX и INFORMIX_SE
ÐÑи компоновке пÑогÑамм, иÑполÑзÑÑÑиÑ
ÑÑÐ¾Ñ Ñежим ÑовмеÑÑимоÑÑи, обÑзаÑелÑно подклÑÑиÑе библиоÑÐµÐºÑ libcompat, поÑÑавлÑемÑÑ Ñ ECPG.
Ðомимо Ñанее ÑпомÑнÑÑого ÑинÑакÑиÑеÑкого ÑÐ°Ñ Ð°Ñа, Ñежим ÑовмеÑÑимоÑÑи Ñ Informix пÑиноÑÐ¸Ñ Ð¸Ð· E/SQL в ECPG Ð½Ð°Ð±Ð¾Ñ ÑÑнкÑий Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð°, вÑвода и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , а Ñакже вÑÑÑаиваемÑе опеÑаÑоÑÑ SQL.
Режим ÑовмеÑÑимоÑÑи Ñ Informix ÑеÑно ÑвÑзан Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой pgtypeslib из ECPG. ÐиблиоÑека pgtypeslib ÑопоÑÑавлÑÐµÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
SQL Ñ Ñипами даннÑÑ
в ведÑÑей пÑогÑамме на C, а болÑÑинÑÑво дополниÑелÑнÑÑ
ÑÑнкÑий Ñежима ÑовмеÑÑимоÑÑи Ñ Informix позволÑÑÑ ÑабоÑаÑÑ Ñ ÑÑими Ñипами C. ÐамеÑÑÑе, однако, ÑÑо ÑÑÐµÐ¿ÐµÐ½Ñ ÑовмеÑÑимоÑÑи огÑаниÑена. ECPG не пÑÑаеÑÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ Informix; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполнÑÑÑ Ð¿ÑимеÑно Ñе же опеÑаÑии и полÑзоваÑÑÑÑ ÑÑнкÑии Ñ Ñеми же именами и Ñ Ñем же поведением, но еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Informix, пÑоÑÑо замениÑÑ Ð¾Ð´Ð½Ð¾ ÑÑедÑÑво дÑÑгим на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½ÐµÐ»ÑзÑ. Ðолее Ñого, еÑÑÑ ÑазлиÑÐ¸Ñ Ð¸ в ÑипаÑ
даннÑÑ
. Ð ÑаÑÑноÑÑи, ÑÐ¸Ð¿Ñ Ð´Ð°ÑÑ Ð¸ инÑеÑвала в Postgres Pro не воÑпÑинимаÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ñ, как напÑимеÑ, YEAR TO MINUTE, Ñак ÑÑо и в ECPG ÑÑо не бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ.
33.15.1. ÐополниÑелÑнÑе ÑипÑ
ТепеÑÑ Ð² Ñежиме Informix без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ typedef поддеÑживаеÑÑÑ ÑпеÑиалÑнÑй пÑевдоÑип Informix "string" Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑимволÑной ÑÑÑоки, обÑезаемой ÑпÑава. Ðа Ñамом деле, в Ñежиме Informix ECPG оÑкажеÑÑÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¸ÑÑ
однÑе ÑайлÑ, ÑодеÑжаÑие опÑеделение Ñипа typedef некоÑоÑÑй_Ñип string;
EXEC SQL BEGIN DECLARE SECTION; string userid; /* ÑÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑезаннÑе даннÑе */ EXEC SQL END DECLARE SECTION; EXEC SQL FETCH MYCUR INTO :userid;
33.15.2. ÐополниÑелÑнÑе/недоÑÑаÑÑие опеÑаÑоÑÑ Ð²ÑÑÑаиваемого SQL
CLOSE DATABASEÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ ÑекÑÑее подклÑÑение. ФакÑиÑеÑки ÑÑо Ñиноним командÑ
DISCONNECT CURRENTв ECPG:$CLOSE DATABASE; /* закÑÑÑÑ ÑекÑÑее подклÑÑение */ EXEC SQL CLOSE DATABASE;
FREE имÑ_кÑÑÑоÑаÐз-за ÑазлиÑий в Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð°Ñ ECPG и ESQL/C Informix (Ñ. е. дÑÑгого ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° ÑиÑÑо гÑаммаÑиÑеÑкие пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вÑÐ·Ð¾Ð²Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей библиоÑеки вÑемени вÑполнениÑ), в ECPG Ð½ÐµÑ Ð¾Ð¿ÐµÑаÑоÑа
FREE имÑ_кÑÑÑоÑа. ÐÑо ÑвÑзано Ñ Ñем, ÑÑо в ECPG командаDECLARE CURSORне ÑводиÑÑÑ Ðº вÑÐ·Ð¾Ð²Ñ ÑÑнкÑии в библиоÑеке вÑемени вÑполнениÑ, коÑоÑÐ°Ñ Ð±Ñ Ð¿Ñинимала Ð¸Ð¼Ñ ÐºÑÑÑоÑа. ÐÑо знаÑиÑ, ÑÑо кÑÑÑоÑÑ SQL в библиоÑеке ECPG не ÑÑебÑÑÑ Ð¾Ð±ÑлÑживаниÑ, оно ÑÑебÑеÑÑÑ ÑолÑко на ÑÑовне ÑеÑвеÑа Postgres Pro.FREE имÑ_опеÑаÑоÑаÐоманда
FREE имÑ_опеÑаÑоÑаÑвлÑеÑÑÑ Ñинонимом командÑDEALLOCATE PREPARE имÑ_опеÑаÑоÑа.
33.15.3. ÐблаÑÑи деÑкÑипÑоÑов SQLDA, ÑовмеÑÑимÑе Ñ Informix
Режим ÑовмеÑÑимоÑÑи Ñ Informix поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑÑÑкÑÑÑÑ, оÑлиÑнÑÑ Ð¾Ñ Ð¾Ð¿Ð¸Ñанной в ÐодÑазделе 33.7.2. См. ниже:
struct sqlvar_compat
{
short sqltype;
int sqllen;
char *sqldata;
short *sqlind;
char *sqlname;
char *sqlformat;
short sqlitype;
short sqlilen;
char *sqlidata;
int sqlxid;
char *sqltypename;
short sqltypelen;
short sqlownerlen;
short sqlsourcetype;
char *sqlownername;
int sqlsourceid;
char *sqlilongdata;
int sqlflags;
void *sqlreserved;
};
struct sqlda_compat
{
short sqld;
struct sqlvar_compat *sqlvar;
char desc_name[19];
short desc_occ;
struct sqlda_compat *desc_next;
void *reserved;
};
typedef struct sqlvar_compat sqlvar_t;
typedef struct sqlda_compat sqlda_t;ÐлобалÑнÑе ÑвойÑÑва:
sqldЧиÑло полей в деÑкÑипÑоÑе
SQLDA.sqlvarУказаÑÐµÐ»Ñ Ð½Ð° ÑвойÑÑва по полÑм.
desc_nameÐе иÑполÑзÑеÑÑÑ, заполнÑеÑÑÑ Ð½ÑлÑми.
desc_occÐ Ð°Ð·Ð¼ÐµÑ ÑÑÑÑкÑÑÑÑ Ð² памÑÑи.
desc_nextУказаÑÐµÐ»Ñ Ð½Ð° ÑледÑÑÑÑÑ ÑÑÑÑкÑÑÑÑ SQLDA, еÑли Ð½Ð°Ð±Ð¾Ñ ÑезÑлÑÑаÑов ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÑÑе одной запиÑи.
reservedÐеиÑполÑзÑемÑй ÑказаÑелÑ, ÑодеÑÐ¶Ð¸Ñ NULL. Ð¡Ð¾Ñ ÑанÑеÑÑÑ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ Informix.
СвойÑÑва, оÑноÑÑÑиеÑÑ Ðº полÑм, опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ, они Ñ
ÑанÑÑÑÑ Ð² маÑÑиве sqlvar:
sqltypeТип полÑ. СооÑвеÑÑÑвÑÑÑие конÑÑанÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð²
sqltypes.hsqllenÐлина даннÑÑ Ð¿Ð¾Ð»Ñ.
sqldataУказаÑÐµÐ»Ñ Ð½Ð° даннÑе полÑ. ÐÑÐ¾Ñ ÑказаÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ñип
char *, но он ÑказÑÐ²Ð°ÐµÑ Ð½Ð° даннÑе в двоиÑном ÑоÑмаÑе. ÐапÑимеÑ:int intval; switch (sqldata->sqlvar[i].sqltype) { case SQLINTEGER: intval = *(int *)sqldata->sqlvar[i].sqldata; break; ... }sqlindУказаÑÐµÐ»Ñ Ð½Ð° индикаÑÐ¾Ñ NULL. ÐÑли возвÑаÑаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ DESCRIBE или FETCH, ÑÑо вÑегда дейÑÑвиÑелÑнÑй ÑказаÑелÑ. ÐÑли пеÑедаÑÑÑÑ Ð½Ð° Ð²Ñ Ð¾Ð´ команде
EXECUTE ... USING sqlda;, NULL вмеÑÑо ÑказаÑÐµÐ»Ñ Ð¾Ð·Ð½Ð°ÑаеÑ, ÑÑо знаÑение ÑÑого Ð¿Ð¾Ð»Ñ Ð¾ÑлиÑно Ð¾Ñ NULL. ЧÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑиÑÑ NULL в поле, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ коÑÑекÑно ÑÑÑановиÑÑ ÑÑÐ¾Ñ ÑказаÑÐµÐ»Ñ Ð¸sqlitype. ÐапÑимеÑ:if (*(int2 *)sqldata->sqlvar[i].sqlind != 0) printf("value is NULL\n");sqlnameÐÐ¼Ñ Ð¿Ð¾Ð»Ñ, в виде ÑÑÑоки Ñ Ð·Ð°Ð²ÐµÑÑаÑÑим 0.
sqlformatÐаÑезеÑвиÑовано в Informix, знаÑение
PQfformat()Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ полÑ.sqlitypeТип даннÑÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа NULL. ÐÑи полÑÑении даннÑÑ Ñ ÑеÑвеÑа ÑÑо вÑегда SQLSMINT. Ðогда
SQLDAиÑполÑзÑеÑÑÑ Ð² паÑамеÑÑизованном запÑоÑе, даннÑе индикаÑоÑа обÑабаÑÑваÑÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ ÑказаннÑм здеÑÑ Ñипом.sqlilenÐлина даннÑÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑа NULL.
sqlxidРаÑÑиÑеннÑй Ñип полÑ, ÑезÑлÑÑÐ°Ñ ÑÑнкÑии
PQftype().sqltypenamesqltypelensqlownerlensqlsourcetypesqlownernamesqlsourceidsqlflagssqlreservedÐе иÑполÑзÑÑÑÑÑ.
sqlilongdataÐ¡Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ
sqldata, еÑлиsqllenпÑевÑÑÐ°ÐµÑ 32 ÐбайÑа.
ÐапÑимеÑ:
EXEC SQL INCLUDE sqlda.h;
sqlda_t *sqlda; /* ÐÑо обÑÑвление не обÑзаÑелÑно должно бÑÑÑ Ð²Ð½ÑÑÑи DECLARE SECTION */
EXEC SQL BEGIN DECLARE SECTION;
char *prep_stmt = "select * from table1";
int i;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL PREPARE mystmt FROM :prep_stmt;
EXEC SQL DESCRIBE mystmt INTO sqlda;
printf("# of fields: %d\n", sqlda->sqld);
for (i = 0; i < sqlda->sqld; i++)
printf("field %d: \"%s\"\n", sqlda->sqlvar[i]->sqlname);
EXEC SQL DECLARE mycursor CURSOR FOR mystmt;
EXEC SQL OPEN mycursor;
EXEC SQL WHENEVER NOT FOUND GOTO out;
while (1)
{
EXEC SQL FETCH mycursor USING sqlda;
}
EXEC SQL CLOSE mycursor;
free(sqlda); /* ÐÑвобождаÑÑ Ð½Ñжно ÑолÑко оÑновнÑÑ ÑÑÑÑкÑÑÑÑ,
* sqlda и sqlda->sqlvar наÑ
одÑÑÑÑ Ð² одной вÑделенной облаÑÑи. */ ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ найÑи в заголовоÑном Ñайле sqlda.h и в ÑегÑеÑÑионном ÑеÑÑе src/interfaces/ecpg/test/compat_informix/sqlda.pgc.
33.15.4. ÐополниÑелÑнÑе ÑÑнкÑии
decaddСкладÑÐ²Ð°ÐµÑ Ð´Ð²Ð° знаÑÐµÐ½Ð¸Ñ Ñипа decimal.
int decadd(decimal *arg1, decimal *arg2, decimal *sum);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑвÑй опеÑанд Ñипа decimal (
arg1), ÑказаÑÐµÐ»Ñ Ð½Ð° вÑоÑой опеÑанд Ñипа decimal (arg2) и ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа decimal, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñана ÑÑмма (sum). Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0.ECPG_INFORMIX_NUM_OVERFLOWвозвÑаÑаеÑÑÑ Ð² ÑлÑÑае пеÑеполнениÑ, аECPG_INFORMIX_NUM_UNDERFLOWв ÑлÑÑае анÑипеÑеполнениÑ. ÐÑи лÑбÑÑ Ð´ÑÑÐ³Ð¸Ñ Ð¾ÑÐ¸Ð±ÐºÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ -1, а вerrnoÑÑÑанавливаеÑÑÑ ÐºÐ¾Ð´errnoиз pgtypeslib.deccmpСÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ð´Ð²Ð° знаÑÐµÐ½Ð¸Ñ Ñипа decimal.
int deccmp(decimal *arg1, decimal *arg2);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑвое знаÑение Ñипа decimal (
arg1), ÑказаÑÐµÐ»Ñ Ð½Ð° вÑоÑое знаÑение Ñипа decimal (arg2) и возвÑаÑÐ°ÐµÑ Ñелое, оÑÑажаÑÑее ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ ÑиÑел.1, еÑли знаÑение, на коÑоÑое ÑказÑваеÑ
arg1, болÑÑе знаÑениÑ, на коÑоÑое ÑказÑваеÑvar2-1, еÑли знаÑение, на коÑоÑое ÑказÑваеÑ
arg1, менÑÑе знаÑениÑ, на коÑоÑое ÑказÑваеÑarg20, еÑли знаÑение, на коÑоÑое ÑказÑваеÑ
arg1, Ñавно знаÑениÑ, на коÑоÑое ÑказÑваеÑarg2
deccopyÐопиÑÑÐµÑ Ð·Ð½Ð°Ñение Ñипа decimal.
void deccopy(decimal *src, decimal *target);
ФÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
src) ÑказаÑÐµÐ»Ñ Ð½Ð° знаÑение decimal, коÑоÑое должно бÑÑÑ ÑкопиÑовано, а во вÑоÑом аÑгÑменÑе (target) пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÑкÑÑÑÑ Ñипа decimal Ð´Ð»Ñ ÑкопиÑованного знаÑениÑ.deccvascÐÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение из пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ASCII в Ñип decimal.
int deccvasc(char *cp, int len, decimal *np);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑÑÑоковое пÑедÑÑавление ÑиÑла, коÑоÑое нÑжно пÑеобÑазоваÑÑ, (
cp), а Ñакже его длинÑlen. ÐnpпеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа decimal, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¿ÑеобÑазованиÑ.ÐопÑÑÑимÑми ÑвлÑÑÑÑÑ, напÑÐ¸Ð¼ÐµÑ ÑледÑÑÑие ÑоÑмаÑÑ:
-2,.794,+3.44,592.49E07или-32.84e-4.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0. ÐÑи пеÑеполнении или анÑипеÑеполнении возвÑаÑаеÑÑÑ
ECPG_INFORMIX_NUM_OVERFLOWилиECPG_INFORMIX_NUM_UNDERFLOW, ÑооÑвеÑÑÑвенно. ÐÑли ÑазобÑаÑÑ ASCII-пÑедÑÑавление не ÑдаÑÑÑÑ, возвÑаÑаеÑÑÑECPG_INFORMIX_BAD_NUMERICилиECPG_INFORMIX_BAD_EXPONENT, еÑли не ÑдаÑÑÑÑ ÑазобÑаÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑкÑпоненÑÑ.deccvdblÐÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение double в знаÑение Ñипа decimal.
int deccvdbl(double dbl, decimal *np);
ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
dbl) пеÑеменнÑÑ Ñипа double, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð¿ÑеобÑазована. Ðо вÑоÑом аÑгÑменÑе (np) она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ decimal, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, либо оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ.
deccvintÐÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение int в знаÑение Ñипа decimal.
int deccvint(int in, decimal *np);
ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
in) пеÑеменнÑÑ Ñипа int, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð¿ÑеобÑазована. Ðо вÑоÑом аÑгÑменÑе (np) она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ decimal, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, либо оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ.
deccvlongÐÑеобÑазÑÐµÑ Ð·Ð½Ð°Ñение long в знаÑение Ñипа decimal.
int deccvlong(long lng, decimal *np);
ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
lng) пеÑеменнÑÑ Ñипа long, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð¿ÑеобÑазована. Ðо вÑоÑом аÑгÑменÑе (np) она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ decimal, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, либо оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ.
decdivÐÐµÐ»Ð¸Ñ Ð¾Ð´Ð½Ñ Ð¿ÐµÑеменнÑÑ Ñипа decimal на дÑÑгÑÑ.
int decdiv(decimal *n1, decimal *n2, decimal *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑели на пеÑеменнÑе (
n1иn2) и вÑÑиÑлÑÐµÑ ÑаÑÑноеn1/n2. ÐresultпеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а пÑи оÑибке â оÑÑиÑаÑелÑное знаÑение. Ð ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ анÑипеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑ
ECPG_INFORMIX_NUM_OVERFLOWилиECPG_INFORMIX_NUM_UNDERFLOW, ÑооÑвеÑÑÑвенно. ÐÑи попÑÑке Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° Ð½Ð¾Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑECPG_INFORMIX_DIVIDE_ZERO.decmulÐеÑÐµÐ¼Ð½Ð¾Ð¶Ð°ÐµÑ Ð´Ð²Ð° знаÑÐµÐ½Ð¸Ñ Ñипа decimal.
int decmul(decimal *n1, decimal *n2, decimal *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑели на пеÑеменнÑе (
n1иn2) и вÑÑиÑлÑÐµÑ Ð¿Ñоизведениеn1*n2. ÐresultпеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а пÑи оÑибке â оÑÑиÑаÑелÑное знаÑение. Ð ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ анÑипеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑ
ECPG_INFORMIX_NUM_OVERFLOWилиECPG_INFORMIX_NUM_UNDERFLOW, ÑооÑвеÑÑÑвенно.decsubÐÑÑиÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ знаÑение Ñипа decimal из дÑÑгого.
int decsub(decimal *n1, decimal *n2, decimal *result);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑели на пеÑеменнÑе (
n1иn2) и вÑÑиÑлÑÐµÑ ÑазноÑÑÑn1-n2. ÐresultпеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а пÑи оÑибке â оÑÑиÑаÑелÑное знаÑение. Ð ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ анÑипеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑ
ECPG_INFORMIX_NUM_OVERFLOWилиECPG_INFORMIX_NUM_UNDERFLOW, ÑооÑвеÑÑÑвенно.dectoascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal в пÑедÑÑавление ASCII (в ÑÑÑÐ¾ÐºÑ C char*).
int dectoasc(decimal *np, char *cp, int len, int right)
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа decimal (
np), коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑеобÑазована в ÑекÑÑовое пÑедÑÑавление. ÐÑгÑменÑcpÑказÑÐ²Ð°ÐµÑ Ð½Ð° бÑÑеÑ, в коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии. ÐÑгÑменÑrightопÑеделÑеÑ, ÑколÑко должно вÑводиÑÑÑÑ ÑиÑÑ Ð¿Ñавее деÑÑÑиÑной ÑоÑки. РезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¾ÐºÑÑглÑн до ÑÑого ÑиÑла деÑÑÑиÑнÑÑ ÑиÑÑ. ÐнаÑениеright, Ñавное -1, ÑказÑваеÑ, ÑÑо вÑводиÑÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ñе имеÑÑиеÑÑ Ð´ÐµÑÑÑиÑнÑе ÑиÑÑÑ. ÐÑли длина вÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ бÑÑеÑа, коÑоÑÑÑ Ð·Ð°Ð´Ð°ÑÑlen, недоÑÑаÑоÑна Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð² него ÑекÑÑового пÑедÑÑавлениÑ, вклÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑаÑÑий нÑлевой байÑ, в бÑÑеÑе ÑÐ¾Ñ ÑанÑеÑÑÑ Ð¾Ð´Ð¸Ð½ знак*и возвÑаÑаеÑÑÑ -1.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ -1, еÑли бÑÑеÑ
cpÑлиÑком мал, либоECPG_INFORMIX_OUT_OF_MEMORYпÑи Ð½ÐµÑ Ð²Ð°Ñке памÑÑи.dectodblÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal в Ñип double.
int dectodbl(decimal *np, double *dblp);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ (
np) на знаÑение decimal, коÑоÑое нÑжно пÑеобÑазоваÑÑ, и ÑказаÑÐµÐ»Ñ (dblp) на пеÑеменнÑÑ double, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, или оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ.
dectointÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal в Ñип integer.
int dectoint(decimal *np, int *ip);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ (
np) на знаÑение decimal, коÑоÑое нÑжно пÑеобÑазоваÑÑ, и ÑказаÑÐµÐ»Ñ (ip) на ÑелоÑиÑленнÑÑ Ð¿ÐµÑеменнÑÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, или оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ. Ð ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ
ECPG_INFORMIX_NUM_OVERFLOW.ÐамеÑÑÑе, ÑÑо ÑеализаÑÐ¸Ñ ECPG оÑлиÑаеÑÑÑ Ð¾Ñ ÑеализаÑии Informix. Ð Informix Ñелое огÑаниÑиваеÑÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ -32767 .. 32767, Ñогда как в ECPG огÑаниÑение завиÑÐ¸Ñ Ð¾Ñ Ð°ÑÑ Ð¸ÑекÑÑÑÑ (
INT_MIN .. INT_MAX).dectolongÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа decimal в Ñип long.
int dectolong(decimal *np, long *lngp);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ (
np) на знаÑение decimal, коÑоÑое нÑжно пÑеобÑазоваÑÑ, и ÑказаÑÐµÐ»Ñ (lngp) на пеÑеменнÑÑ Ñипа long, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, или оÑÑиÑаÑелÑное знаÑение, еÑли вÑполниÑÑ Ð¿ÑеобÑазование не ÑдалоÑÑ. Ð ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ
ECPG_INFORMIX_NUM_OVERFLOW.ÐамеÑÑÑе, ÑÑо ÑеализаÑÐ¸Ñ ECPG оÑлиÑаеÑÑÑ Ð¾Ñ ÑеализаÑии Informix. Ð Informix длинное Ñелое огÑаниÑено диапазоном -2 147 483 647 .. 2 147 483 647, Ñогда как в ECPG огÑаниÑение завиÑÐ¸Ñ Ð¾Ñ Ð°ÑÑ Ð¸ÑекÑÑÑÑ (
-LONG_MAX .. LONG_MAX).rdatestrÐÑеобÑазÑÐµÑ Ð´Ð°ÑÑ Ð² ÑÑÑÐ¾ÐºÑ C char*.
int rdatestr(date d, char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð²Ð° аÑгÑменÑа. РпеÑвом (
d) пеÑедаÑÑÑÑ Ð´Ð°Ñа, коÑоÑÑÑ Ð½Ñжно пÑеобÑазоваÑÑ, а во вÑоÑом ÑказаÑÐµÐ»Ñ Ð½Ð° ÑелевÑÑ ÑÑÑокÑ. РезÑлÑÑÐ°Ñ Ð²Ñегда вÑводиÑÑÑ Ð² ÑоÑмаÑеyyyy-mm-dd, Ñак ÑÑо Ð´Ð»Ñ ÑÑой ÑÑÑоки нÑжно вÑделиÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм 11 Ð±Ð°Ð¹Ñ (вклÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑаÑÑий нÑлевой байÑ).ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
ÐамеÑÑÑе, ÑÑо ÑеализаÑÐ¸Ñ ECPG оÑлиÑаеÑÑÑ Ð¾Ñ ÑеализаÑии Informix. Ð Informix ÑоÑÐ¼Ð°Ñ Ð²Ñвода можно измениÑÑ Ð¿ÐµÑеменнÑми окÑÑжениÑ, а в ECPG он ÑикÑиÑован.
rstrdateРазбиÑÐ°ÐµÑ ÑекÑÑовое пÑедÑÑавление даÑÑ.
int rstrdate(char *str, date *d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑекÑÑовое пÑедÑÑавление (
str) даÑÑ, коÑоÑÑÑ Ð½Ñжно пÑеобÑазоваÑÑ, и ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа date (d). ÐÐ»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑнкÑии нелÑÐ·Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¼Ð°ÑÐºÑ ÑоÑмаÑа. Ðна иÑполÑзÑÐµÑ ÑÑандаÑÑнÑÑ Ð¼Ð°ÑÐºÑ ÑоÑмаÑа Informix, а именно:mm/dd/yyyy. ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑrdefmtdate. Таким обÑазом,rstrdateне бÑÐ´ÐµÑ Ð±ÑÑÑÑее, и еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð²ÑбоÑ, иÑполÑзÑйÑе ÑÑнкÑиÑrdefmtdate, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ñвно задаÑÑ Ð¼Ð°ÑÐºÑ ÑоÑмаÑа.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ñе же знаÑениÑ, ÑÑо и
rdefmtdate.rtodayÐÑдаÑÑ ÑекÑÑÑÑ Ð´Ð°ÑÑ.
void rtoday(date *d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ (
d) Ñипа date, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñана ÑекÑÑÐ°Ñ Ð´Ð°Ñа.ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑ
PGTYPESdate_today.rjulmdyÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð½Ñ, меÑÑÑа и года из пеÑеменной Ñипа date.
int rjulmdy(date d, short mdy[3]);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð´Ð°ÑÑ
dи ÑказаÑÐµÐ»Ñ Ð½Ð° 3 коÑоÑÐºÐ¸Ñ ÑелоÑиÑленнÑÑ Ð·Ð½Ð°ÑениÑmdy. ÐÐ¼Ñ Ð¿ÐµÑеменной ÑказÑÐ²Ð°ÐµÑ Ð½Ð° поÑÑдок знаÑений: вmdy[0]запиÑÑваеÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа, вmdy[1]â Ð½Ð¾Ð¼ÐµÑ Ð´Ð½Ñ, а вmdy[2]â год.Ð ÑекÑÑем ÑоÑÑоÑнии ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ñегда возвÑаÑÐ°ÐµÑ 0.
ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑ
PGTYPESdate_julmdy.rdefmtdateÐÑеобÑазÑÐµÑ ÑимволÑнÑÑ ÑÑÑÐ¾ÐºÑ Ð² знаÑение Ñипа date по маÑке ÑоÑмаÑа.
int rdefmtdate(date *d, char *fmt, char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа date (
d), в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии, маÑÐºÑ ÑоÑмаÑа Ð´Ð»Ñ ÑазбоÑа даÑÑ (fmt) и ÑÑÑÐ¾ÐºÑ C char*, ÑодеÑжаÑÑÑ ÑекÑÑовое пÑедÑÑавление даÑÑ (str). ÐжидаеÑÑÑ, ÑÑо ÑекÑÑовое пÑедÑÑавление бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð¼Ð°Ñке ÑоÑмаÑа. Ðднако ÑÑо ÑооÑвеÑÑÑвие не обÑзаÑелÑно должно бÑÑÑ ÑоÑнÑм. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÐµÑ ÑолÑко поÑÑдок ÑлеменÑов и иÑÐµÑ Ð² нÑм подÑÑÑокиyyилиyyyy, обознаÑаÑÑие позиÑÐ¸Ñ Ð³Ð¾Ð´Ð°, подÑÑÑокÑmm, обознаÑаÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¼ÐµÑÑÑа, иdd, обознаÑаÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð´Ð½Ñ.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑледÑÑÑие знаÑениÑ:
0 â ФÑнкÑÐ¸Ñ Ð²Ñполнена ÑÑпеÑно.
ECPG_INFORMIX_ENOSHORTDATEâ ÐаÑа не ÑодеÑÐ¶Ð¸Ñ ÑазделиÑелей Ð¼ÐµÐ¶Ð´Ñ Ð´Ð½Ñм, меÑÑÑем и годом. С Ñаким ÑоÑмаÑом Ð²Ñ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока должна бÑÑÑ Ð´Ð»Ð¸Ð½Ð¾Ð¹ Ñовно 6 или 8 байÑ, но ÑÑо не Ñак.ECPG_INFORMIX_ENOTDMYâ СÑÑока ÑоÑмаÑа не опÑеделÑÐµÑ ÐºÐ¾ÑÑекÑно поÑледоваÑелÑнÑй поÑÑдок года, меÑÑÑа и днÑ.ECPG_INFORMIX_BAD_DAYâ Ðо Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоке оÑÑÑÑÑÑвÑÐµÑ ÐºÐ¾ÑÑекÑное Ñказание днÑ.ECPG_INFORMIX_BAD_MONTHâ Ðо Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоке оÑÑÑÑÑÑвÑÐµÑ ÐºÐ¾ÑÑекÑное Ñказание меÑÑÑа.ECPG_INFORMIX_BAD_YEARâ Ðо Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоке оÑÑÑÑÑÑвÑÐµÑ ÐºÐ¾ÑÑекÑное Ñказание года.
Ð ÑеализаÑии ÑÑой ÑÑнкÑии вÑзÑваеÑÑÑ
PGTYPESdate_defmt_asc. ÐÑимеÑÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼ÑÑ ÑÑÑок пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÑаблиÑе в ÐµÑ Ð¾Ð¿Ð¸Ñании.rfmtdateÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа date в ÑекÑÑовое пÑедÑÑавление по маÑке ÑоÑмаÑа.
int rfmtdate(date d, char *fmt, char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð°ÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ (
d), маÑÐºÑ ÑоÑмаÑа (fmt) и ÑÑÑокÑ, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑено ÑекÑÑовое пÑедÑÑавление даÑÑ (str).Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑ
PGTYPESdate_fmt_asc, пÑимеÑÑ ÑоÑмаÑов можно найÑи в ÐµÑ Ð¾Ð¿Ð¸Ñании.rmdyjulÐбÑазÑÐµÑ Ð·Ð½Ð°Ñение даÑÑ Ð¸Ð· маÑÑива 3 коÑоÑÐºÐ¸Ñ ÑелÑÑ , задаÑÑÐ¸Ñ Ð´ÐµÐ½Ñ, меÑÑÑ Ð¸ год даÑÑ.
int rmdyjul(short mdy[3], date *d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² пеÑвом аÑгÑменÑе маÑÑив из 3 коÑоÑÐºÐ¸Ñ ÑелÑÑ (
mdy), а во вÑоÑом ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа date, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии.РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ñегда возвÑаÑÐ°ÐµÑ 0.
Ð ÑеализаÑии ÑÑой ÑÑнкÑии вÑзÑваеÑÑÑ
PGTYPESdate_mdyjul.rdayofweekÐозвÑаÑÐ°ÐµÑ ÑиÑло, пÑедÑÑавлÑÑÑее Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ даÑÑ.
int rdayofweek(date d);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² единÑÑвенном аÑгÑменÑе пеÑеменнÑÑ
dÑипа date и возвÑаÑÐ°ÐµÑ Ñелое ÑиÑло, вÑÑажаÑÑее Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ Ð´Ð»Ñ ÑÑой даÑÑ.0 â ÐоÑкÑеÑенÑе
1 â ÐонеделÑник
2 â ÐÑоÑник
3 â СÑеда
4 â ЧеÑвеÑг
5 â ÐÑÑниÑа
6 â СÑббоÑа
Ð ÑеализаÑии ÑÑой ÑÑнкÑии вÑзÑваеÑÑÑ
PGTYPESdate_dayofweek.dtcurrentÐолÑÑÐ°ÐµÑ ÑекÑÑее вÑемÑ.
void dtcurrent(timestamp *ts);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑекÑÑее вÑÐµÐ¼Ñ Ð¸ ÑÐ¾Ñ ÑанÑÐµÑ ÐµÐ³Ð¾ в пеÑеменной Ñипа timestamp, на коÑоÑÑÑ ÑказÑваеÑ
ts.dtcvascРазбиÑÐ°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¸Ð· ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² пеÑеменнÑÑ Ñипа timestamp.
int dtcvasc(char *str, timestamp *ts);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ (
str), коÑоÑÑÑ Ð½Ñжно ÑазобÑаÑÑ, и ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа timestamp, в коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑÑн ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии (ts).ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑ
PGTYPEStimestamp_from_asc. ÐÑимеÑÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼ÑÑ ÑÑÑок пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÑаблиÑе в ÐµÑ Ð¾Ð¿Ð¸Ñании.dtcvfmtascРазбиÑÐ°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¸Ð· ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² пеÑеменнÑÑ Ñипа timestamp по маÑке ÑоÑмаÑа.
dtcvfmtasc(char *inbuf, char *fmtstr, timestamp *dtvalue)
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ (
inbuf), коÑоÑÑÑ Ð½Ñжно ÑазобÑаÑÑ, маÑÐºÑ ÑоÑмаÑа (fmtstr) и ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ timestamp, в коÑоÑой бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии (dtvalue).Ð ÑеализаÑии ÑÑой ÑÑнкÑии иÑполÑзÑеÑÑÑ
PGTYPEStimestamp_defmt_asc. СпиÑок допÑÑÑимÑÑ ÐºÐ¾Ð´Ð¾Ð² ÑоÑмаÑа пÑиведÑн в ÐµÑ Ð¾Ð¿Ð¸Ñании.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ 0 в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
dtsubÐÑÑиÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ знаÑение вÑемени из дÑÑгого и возвÑаÑÐ°ÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval.
int dtsub(timestamp *ts1, timestamp *ts2, interval *iv);
ÐÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑÐ°ÐµÑ Ð·Ð½Ð°Ñение timestamp, на коÑоÑое ÑказÑваеÑ
ts2, из знаÑÐµÐ½Ð¸Ñ timestamp, на коÑоÑое ÑказÑваеÑts1, и ÑÐ¾Ñ ÑанÑÐµÑ ÑезÑлÑÑÐ°Ñ Ð² пеÑеменной Ñипа interval, на коÑоÑÑÑ ÑказÑваеÑiv.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
dttoascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа timestamp в ÑÑÑÐ¾ÐºÑ C char*.
int dttoasc(timestamp *ts, char *output);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ (
ts) на пеÑеменнÑÑ Ñипа timestamp, коÑоÑÑÑ Ð½Ñжно пÑеобÑазоваÑÑ, и ÑÑÑÐ¾ÐºÑ (output) Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа опеÑаÑии. Ðна пÑеобÑазÑеÑtsв ÑекÑÑовое пÑедÑÑавление ÑоглаÑно ÑÑандаÑÑÑ SQL, Ñо еÑÑÑ Ð¿Ð¾ маÑкеYYYY-MM-DD HH:MM:SS.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
dttofmtascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа timestamp в ÑÑÑÐ¾ÐºÑ C char* по маÑке ÑоÑмаÑа.
int dttofmtasc(timestamp *ts, char *output, int str_len, char *fmtstr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
ts) ÑказаÑÐµÐ»Ñ Ð½Ð° пеÑеменнÑÑ Ñипа timestamp, а в поÑледÑÑÑÐ¸Ñ ÑказаÑÐµÐ»Ñ Ð½Ð° бÑÑÐµÑ Ð²Ñвода (output), макÑималÑнÑÑ Ð´Ð»Ð¸Ð½Ñ ÑÑÑоки, коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ Ð±ÑÑÐµÑ (str_len), и маÑÐºÑ ÑоÑмаÑа, Ñ ÐºÐ¾ÑоÑой бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿ÑеобÑазование (fmtstr).Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
ÐнÑÑÑи ÑÑа ÑÑнкÑÐ¸Ñ Ð¸ÑполÑзÑеÑ
PGTYPEStimestamp_fmt_asc. ÐÑимеÑÑ Ð´Ð¾Ð¿ÑÑÑимÑÑ Ð¼Ð°Ñок ÑоÑмаÑа можно найÑи в ÐµÑ Ð¾Ð¿Ð¸Ñании.intoascÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñипа interval в ÑÑÑÐ¾ÐºÑ C char*.
int intoasc(interval *i, char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ (
i) на пеÑеменнÑÑ Ñипа interval, коÑоÑÑÑ Ð½Ñжно пÑеобÑазоваÑÑ, и ÑÑÑÐ¾ÐºÑ (str) Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа опеÑаÑии. Ðна пÑеобÑазÑеÑiв ÑекÑÑовое пÑедÑÑавление ÑоглаÑно ÑÑандаÑÑÑ SQL, Ñо еÑÑÑ Ð¿Ð¾ маÑкеYYYY-MM-DD HH:MM:SS.Ð ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° возвÑаÑаеÑÑÑ 0, а в ÑлÑÑае оÑибки â оÑÑиÑаÑелÑное знаÑение.
rfmtlongÐÑеобÑазÑÐµÑ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñелое в ÑекÑÑовое пÑедÑÑавление по маÑке ÑоÑмаÑа.
int rfmtlong(long lng_val, char *fmt, char *outbuf);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение Ñипа long (
lng_val), маÑÐºÑ ÑоÑмаÑа (fmt) и ÑказаÑÐµÐ»Ñ Ð½Ð° вÑÑ Ð¾Ð´Ð½Ð¾Ð¹ бÑÑÐµÑ (outbuf). Ðна пÑеобÑазÑÐµÑ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñелое в его ÑекÑÑовое пÑедÑÑавление ÑоглаÑно заданной маÑке ÑоÑмаÑа.ÐаÑÐºÑ ÑоÑмаÑа можно ÑоÑÑавиÑÑ Ð¸Ð· ÑледÑÑÑÐ¸Ñ Ñимволов, опÑеделÑÑÑÐ¸Ñ ÑоÑмаÑ:
*(звÑздоÑка) â еÑли в данной позиÑии бÑÐ´ÐµÑ Ð¿ÑÑÑо, заполниÑÑ ÐµÑ Ð·Ð²ÑздоÑкой.&(ампеÑÑанд) â еÑли в данной позиÑии бÑÐ´ÐµÑ Ð¿ÑÑÑо, заполниÑÑ ÐµÑ Ð½ÑлÑм.#â замениÑÑ Ð²ÐµÐ´ÑÑие нÑли пÑобелами.<â вÑÑовнÑÑÑ ÑиÑло в ÑÑÑоке по левой ÑÑоÑоне.,(запÑÑаÑ) â ÑгÑÑппиÑоваÑÑ ÑиÑла, ÑодеÑжаÑие ÑеÑÑÑе и более ÑиÑÑ, в гÑÑÐ¿Ð¿Ñ Ð¿Ð¾ ÑÑи ÑиÑÑÑ ÑеÑез запÑÑÑÑ..(ÑоÑка) â ÑÑÐ¾Ñ Ñимвол оÑделÑÐµÑ ÑелÑÑ ÑаÑÑÑ ÑиÑла Ð¾Ñ Ð´Ñобной.-(минÑÑ) â Ñ Ð¾ÑÑиÑаÑелÑнÑм ÑиÑлом должен вÑводиÑÑÑÑ Ð·Ð½Ð°Ðº минÑÑ.+(плÑÑ) â Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм ÑиÑлом должен вÑводиÑÑÑÑ Ð·Ð½Ð°Ðº плÑÑ.(â ÑÑо Ñимвол заменÑÐµÑ Ð·Ð½Ð°Ðº минÑÑ Ð¿ÐµÑед оÑÑиÑаÑелÑнÑм ÑиÑлом. Сам знак минÑÑ Ð²ÑводиÑÑÑÑ Ð½Ðµ бÑдеÑ.)â ÑÑÐ¾Ñ Ñимвол заменÑÐµÑ Ð¼Ð¸Ð½ÑÑ Ð¸ вÑводиÑÑÑ Ð¿Ð¾Ñле оÑÑиÑаÑелÑного ÑиÑла.$â Ñимвол денежной ÑÑммÑ.
rupshiftÐÑÐ¸Ð²Ð¾Ð´Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ðº веÑÑ Ð½ÐµÐ¼Ñ ÑегиÑÑÑÑ.
void rupshift(char *str);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÐ¾ÐºÑ Ð¸ пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð² ней каждÑй Ñимвол в нижнем ÑегиÑÑÑе к веÑÑ Ð½ÐµÐ¼Ñ ÑегиÑÑÑÑ.
bylengÐозвÑаÑÐ°ÐµÑ ÑиÑло Ñимволов в ÑÑÑоке, не ÑÑиÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑаÑÑÐ¸Ñ Ð¿Ñобелов.
int byleng(char *str, int len);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² пеÑвом аÑгÑменÑе (
str) ÑÑÑÐ¾ÐºÑ ÑикÑиÑованной длинÑ, а во вÑоÑом (len) ÐµÑ Ð´Ð»Ð¸Ð½Ñ. Ðна возвÑаÑÐ°ÐµÑ ÑиÑло знаÑимÑÑ Ñимволов, Ñо еÑÑÑ Ð´Ð»Ð¸Ð½Ñ ÑÑÑоки без завеÑÑаÑÑÐ¸Ñ Ð¿Ñобелов.ldcharÐопиÑÑÐµÑ ÑÑÑÐ¾ÐºÑ ÑикÑиÑованной Ð´Ð»Ð¸Ð½Ñ Ð² ÑÑÑÐ¾ÐºÑ Ñ Ð·Ð°Ð²ÐµÑÑаÑÑим нÑлÑм.
void ldchar(char *src, int len, char *dest);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ ÑикÑиÑованной Ð´Ð»Ð¸Ð½Ñ (
src), коÑоÑÑÑ Ð½Ñжно ÑкопиÑоваÑÑ, ÐµÑ Ð´Ð»Ð¸Ð½Ñ (len) и ÑказаÑÐµÐ»Ñ Ð½Ð° Ñелевой бÑÑÐµÑ Ð² памÑÑи (dest). УÑÑиÑе, ÑÑо Ð´Ð»Ñ Ð±ÑÑеÑа, на коÑоÑÑй ÑказÑваеÑdest, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑделиÑÑ ÐºÐ°Ðº минимÑмlen+1байÑ. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÐµÑ Ð² новÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð½Ðµ болÑÑеlenÐ±Ð°Ð¹Ñ (менÑÑе, еÑли в иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоке еÑÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑие пÑобелÑ) и добавлÑÐµÑ Ð·Ð°Ð²ÐµÑÑаÑÑий 0.rgetmsgint rgetmsg(int msgnum, char *s, int maxsize);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾Ð¿Ñеделена, но не Ñеализована на даннÑй моменÑ!
rtypalignint rtypalign(int offset, int type);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾Ð¿Ñеделена, но не Ñеализована на даннÑй моменÑ!
rtypmsizeint rtypmsize(int type, int len);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾Ð¿Ñеделена, но не Ñеализована на даннÑй моменÑ!
rtypwidthint rtypwidth(int sqltype, int sqllen);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾Ð¿Ñеделена, но не Ñеализована на даннÑй моменÑ!
rsetnullÐÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑеменной NULL.
int rsetnull(int t, char *ptr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ñелое, опÑеделÑÑÑее Ñип пеÑеменной, и ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÐ°Ð¼Ñ Ð¿ÐµÑеменнÑÑ, пÑиведÑннÑй к ÑказаÑÐµÐ»Ñ C char*.
ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑледÑÑÑие ÑипÑ:
CCHARTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной Ñипаcharилиchar*CSHORTTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной Ñипаshort intCINTTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаintCBOOLTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаbooleanCFLOATTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаfloatCLONGTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаlongCDOUBLETYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаdoubleCDECIMALTYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаdecimalCDATETYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной ÑипаdateCDTIMETYPEâ Ð´Ð»Ñ Ð¿ÐµÑеменной Ñипаtimestamp
ÐÑимеÑÑ Ð²Ñзова ÑÑой ÑÑнкÑии:
$char c[] = "abc "; $short s = 17; $int i = -74874; rsetnull(CCHARTYPE, (char *) c); rsetnull(CSHORTTYPE, (char *) &s); rsetnull(CINTTYPE, (char *) &i);
risnullÐÑовеÑÑÐµÑ ÑодеÑжимое пеÑеменной на NULL.
int risnull(int t, char *ptr);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ñип пÑовеÑÑемой пеÑеменной (
t), а Ñакже ÑказаÑÐµÐ»Ñ Ð½Ð° Ð½ÐµÑ (ptr). ÐамеÑÑÑе, ÑÑо ÑÑÐ¾Ñ ÑказаÑÐµÐ»Ñ Ð½Ñжно пÑивеÑÑи к char*. СпиÑок возможнÑÑ Ñипов пеÑеменнÑÑ Ð¿ÑиведÑн в опиÑании ÑÑнкÑииrsetnull.ÐÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑой ÑÑнкÑии:
$char c[] = "abc "; $short s = 17; $int i = -74874; risnull(CCHARTYPE, (char *) c); risnull(CSHORTTYPE, (char *) &s); risnull(CINTTYPE, (char *) &i);
33.15.5. ÐополниÑелÑнÑе конÑÑанÑÑ
ÐамеÑÑÑе, ÑÑо вÑе ÑÑи конÑÑанÑÑ Ð¾ÑноÑÑÑÑÑ Ðº оÑибкам и вÑе они пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¾ÑÑиÑаÑелÑнÑми знаÑениÑми. Ðз опиÑаний ÑазлиÑнÑÑ ÐºÐ¾Ð½ÑÑÐ°Ð½Ñ Ð²Ñ Ñакже можеÑе ÑзнаÑÑ, какими именно ÑиÑлами они пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² ÑекÑÑей ÑеализаÑии. Ðднако полагаÑÑÑÑ Ð½Ð° ÑÑи ÑиÑла не ÑледÑеÑ. Тем не менее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо вÑе ÑÑи знаÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¾ÑÑиÑаÑелÑнÑми.
ECPG_INFORMIX_NUM_OVERFLOWФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи вÑÑиÑлении пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеполнение. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1200 (опÑеделение Informix).
ECPG_INFORMIX_NUM_UNDERFLOWФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи вÑÑиÑлении пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð°Ð½ÑипеÑеполнение. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1201 (опÑеделение Informix).
ECPG_INFORMIX_DIVIDE_ZEROФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение пÑи попÑÑке Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° нолÑ. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1202 (опÑеделение Informix).
ECPG_INFORMIX_BAD_YEARФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи ÑазбоÑе даÑÑ Ð²ÑÑÑеÑилоÑÑ Ð½ÐµÐºÐ¾ÑÑекÑное Ñказание года. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1204 (опÑеделение Informix).
ECPG_INFORMIX_BAD_MONTHФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи ÑазбоÑе даÑÑ Ð²ÑÑÑеÑилоÑÑ Ð½ÐµÐºÐ¾ÑÑекÑное Ñказание меÑÑÑа. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1205 (опÑеделение Informix).
ECPG_INFORMIX_BAD_DAYФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи ÑазбоÑе даÑÑ Ð²ÑÑÑеÑилоÑÑ Ð½ÐµÐºÐ¾ÑÑекÑное Ñказание днÑ. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1206 (опÑеделение Informix).
ECPG_INFORMIX_ENOSHORTDATEФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑе ÑазбоÑа даÑÑ ÑÑебÑеÑÑÑ ÐºÐ¾ÑоÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð°ÑÑ, но ÑÑÑока даÑÑ Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÑÑ Ð´Ð»Ð¸Ð½Ñ. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1209 (опÑеделение Informix).
ECPG_INFORMIX_DATE_CONVERTФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑи ÑоÑмаÑиÑовании даÑÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1210 (опÑеделение Informix).
ECPG_INFORMIX_OUT_OF_MEMORYФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли им не Ñ Ð²Ð°ÑÐ°ÐµÑ Ð¿Ð°Ð¼ÑÑи Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1211 (опÑеделение Informix).
ECPG_INFORMIX_ENOTDMYФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑа ÑазбоÑа должна бÑла полÑÑиÑÑ Ð¼Ð°ÑÐºÑ ÑоÑмаÑа (напÑимеÑ,
mmddyy), но не вÑе Ð¿Ð¾Ð»Ñ Ð±Ñли запиÑÐ°Ð½Ñ Ð¿ÑавилÑно. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1212 (опÑеделение Informix).ECPG_INFORMIX_BAD_NUMERICФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑа ÑазбоÑа не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑиÑловое знаÑение из ÑекÑÑового пÑедÑÑавлениÑ, поÑÐ¾Ð¼Ñ ÑÑо оно некоÑÑекÑно, либо еÑли пÑоÑедÑÑа вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизвеÑÑи опеÑаÑÐ¸Ñ Ñ ÑиÑловÑми пеÑеменнÑми из-за недопÑÑÑимого знаÑÐµÐ½Ð¸Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ñм одной из ÑÑÐ¸Ñ Ð¿ÐµÑеменнÑÑ . ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1213 (опÑеделение Informix).
ECPG_INFORMIX_BAD_EXPONENTФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑа ÑазбоÑа не Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾ÑпÑинÑÑÑ ÑкÑпоненÑÑ Ð² ÑиÑле. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1216 (опÑеделение Informix).
ECPG_INFORMIX_BAD_DATEФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑа ÑазбоÑа не Ð¼Ð¾Ð¶ÐµÑ ÑазобÑаÑÑ Ð´Ð°ÑÑ. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1218 (опÑеделение Informix).
ECPG_INFORMIX_EXTRA_CHARSФÑнкÑии возвÑаÑаÑÑ ÑÑо знаÑение, еÑли пÑоÑедÑÑе ÑазбоÑа пеÑедаÑÑÑÑ Ð¿Ð¾ÑÑоÑонние ÑимволÑ, коÑоÑÐ°Ñ Ð¾Ð½Ð° не Ð¼Ð¾Ð¶ÐµÑ ÑазобÑаÑÑ. ÐнÑÑÑи оно пÑедÑÑавлÑеÑÑÑ ÑиÑлом -1264 (опÑеделение Informix).