/* %% %% This is part of Andrew Sadler's Database packYKIBIHۛX BIHH RR'VW'""RR'7F&U&W7VB"ɕ}ɕձЈİ(э}ɽ܈İ(tch_fields" ,1,1 */ /* %%% %%% Authors: %%% Lars R\]\ۈ \˔\]\ېX˜JBIIBIIH\YIR'2&6W76RRPRRR7B6vSRRRDFє̼Ȁ̀䀑ѡ聝(evision: 1.2 $ %%% %%% This file is part of Mozart, an[\[Y[][ۂIIHوވ ‰IIH˛[ޘ\ [&pRRPRRR6VRFRfR$Ĕ4T4R" RRRGGwܹе蹽ɜ1% 9Mѵ(ȁɵѥge and redistribution %%% of this file, and for a DISCRSQTшSIIHTSQT˂IIB‚[YHX66VFR7FF66VFR72FR66VFRɥ̹(Ցɥ((Ց5Mű1(// include stuff for MySQL //#include "libpq-fe.h" //#YY\\[Y\\[Y[YH^\[ח7 7FF27G'V7BFW&&sFW&&(=i}Qɴɥ(=i}Qɴչѥ((=i}Qɴ5AQe}UERY; OZ_Term COMMAND_OK; OZ_Term TUPLES_OK; OZ_\HWUˆ֗\HWSˆ֗\HQԑTӔSFW&dDU%$#FW&dDU%$#eME1}х()хѥ=i}Qɴ5eME1}ɥ((ѡnection between PostgreSQL types and MySQL types #defiH\]\^\[\‚Y[]]\ HˆVTFw2&rF҂'&r"&FV7BbՕ5F̹ɽܤ(5eME1}х̹=i}ѽ쀀=i}otect(&(MYSQL_tags.bid)); MYSQL_tags.price = OZ_atomXHN֗X VTSY˜XJJNˆVTSw2VFF҂'VF"&FV7BbՕ5Fw2ѥ((5eME1}х̹5AQe}EUId=i}ѽ5eME1}5AY_QUERY"); OZ_protect(&(MYSQL_tags.EMPTY_QUERJJNˆVTSYːSPSH֗]JVTSSPSӲ"&FV7BbՕ5Fw24E5eME1}х̹QUA1M}=,=i}ѽ5eME1}QUA1M}=,쀀 OZ_protect(&(MYSQL_tags.TUPLES_OK)); MYSQLYːWUH֗]JVTSWUN&FV7BbՕ5Fw24UBՕ5Fw24Ae}%8=i}ѽ5eME1} =Ae}%8쀀=i}rotect(&(MYSQL_tags.COPY_IN)); MYSQL_tags.BAD_RESPONHH֗]JVTSАQԑTӔHN֗X Օ5Fw2$E$U54RՕ5Fw2dDU%$=i}ѽ5eME1}9=9Q1}II=H쀀=i}ɽѕР5eQL_tags.NONFATAL_ERROR)); MYSQL_tags.FATAL_ERROR = O]JVTSѐUSTԈN֗X VTFw2dDU%$"РՕ5Օ5Uu4ₐeME0􁹕܁5eME0(ű}Р(ɕrn conn ; } void MYSQL_FREE_CONN( MYSQL * conn ) { []HۛŸBVTS ֗VTS ֗\HHˆ]&Օ5¢vWDf&VvFW"2РՕ5$U25eME1}IL=i}Qɴ )(ɕɸ5eME1}IL=i}reignPointer(C); } OZ_Term MYSQL_toTerm(MYSQL *conn) ˆ]\֗XZQܙZY۔[\ۛNŸB֗\HVT$U5FFW&҄Օ5$U2&W2&WGW&Tf&VAѕȡɕ̤)(((5eME0Ѐ!ЀU͕ȀAswd +DBName +Port +ClienFlag -Conn} // opens a connect[ۈ^TSZ\^\[Y[]\ۙK‚$FVfRՕ56V7BbBf#v5eME1}q((ѡɅѕȁ C strings // if the strings are "" then they shouldHS\ ˆ[‚ H]\HH\wVVG2FFR7F66FW&RBFW7G&V@̀=i}٥ՅMɥQ =i}مȤ(ɱ(s); char sHost[l+1]; strcpy( sHost, s ); char H OH  H \SS‚H֗ݚ'GV7G&uF2gf"7G&V26ȁU͕mt쀀ɍ䠁U͕Ȱ̀(Ȁ͕Ȁ l != 0 ) ? sUser : (char*)NULL; s = OZ_virtualStri֗[ H  \NˆH[Nˆ\\E³Ӳ7G&7577vB26"77vB„Aݐ耡Ȩ9U10((̀=i}٥ՅMɥToC( OZ_in(3) , &var); l = strlen(s); char sDBName WNJ[YK Nˆ\ [YHH 4D$R6"TðFV6&TBBЀ((=i}ɕ%Р԰љ((=i}݅ɹng( "host=%s\n" , host ); //OZ_warning( "user=\ \\ Nˆ ֗\[\I\77vBv&r&F&SW5"F&ր(=i}݅ɹqЀ(=iwarning( "clientflag=%d\n" , clientflag ); // turٙ[\\ˆ[H][\U[Y\[\[ Nˆ56WD&FW"6V7@Օ56ՕE1}9]} =98(5eME0ɕ̀ű}ɕ}С, host, user, passwd, dbname, port, NULL, clientflag); ֗\[ۛX[ۈۛI\ ۛ Nˆ v&r&6V7F&W7VCW"&W2ɸѕ(MɵQȡФ((hat the connection was ok, if not, return if ( reOHۛ H‚^\[Jۛ HˆVTSєQ46&WGW&&6TW'&$2$ו5""=i}ѽ =99 Q%=8%1 OZ_atom( mysql_error( conn H JNˆH[Hˆ֗ԑUTVTS\JۛH NЧФ$V@Օ566R6Т66W2ѡѥѼѝɕ(()=i} %}5eME1}e,1,0) { MYSQL *conn = OZ_toMYSQL( OZ_in(0) ); my[Jۛ HˆVTSєQWӓۛ Hˆ]\$4TTCФ$V@Օ5VW'67G"I(ᕍѕ́ѡME0ɥ(Iɹ́ѡɽȁode // OZ_BI_define(MYSQL_query,2,1) { int var; XZHH\[Y]\[ˆ YH[&R""FVFW6VB&RTՕ56i}ѽ5eME0=i}(ȀȀ=i}٥ՅMingToC( OZ_in(1) , &var); // turn off interrupts [H][\U[Y\[\[ Nˆ][\U[Y\ v&r%VW'7G&sW2"7G"B̀ű}Օ䡍Ȥ((ɸѕ(osSetAlarmTimer(t); OZ_RETURN_INT( res ); } OZ_BI_e‹VTS ܙWܙ\[ ۛ T\B]\R6WFR&W7VBbFR7B5VW'$FVf5eME1}ѽɕ}ɕձаİĤ)(5eME0=i}ѽ5SQL( OZ_in(0) ) ; MYSQL_RES * res = mysql_store_res[ ۛ HˆY \OSS Hˆ]\֗ܘZ\Q\$2$ו5""F҂%5D}IMU1P(=i}ѽnsert reason here." )); } OZ_RETURN ( MYSQL_RES_to\J\ H HŸB֗ВW[‹VTS YWܙ\[ &W7Тg&VRw2FR&W7VBbVW'$FVfRME1}ɕ}ɕձаİ)(ű}ɕ}ɕձР=i}ѽ5eME1RES( OZ_in(0) ) ) ; return PROCEED ; } OZ_BI_end /‹֗\H\JVTSԑT \VTSԓr&WGW&2FW&'VBg&FR&rbFRvfVձЁ͕()=i}Qɴɽ}ѽ}ѕɴ5eME1}ILɕ̰5eML_ROW row ) { if ( row != NULL ) { unYۙY[ٚY[H^\[۝[WٚY[\N‚V6vVBrVwF2ח7fWF6VwF2&W2ȁمՕMlt((5eME1}%1s = mysql_fetch_fields( res ) ; OZ_Term * valu\H ֗\J[X[ ٚY[ ^[ي֗\JH HWBFRfVW2FFR'&ȀЁ쁤յ}̀쁤(( // Feature value = right if (row[i]!SS Hˆ HH[YFfVU7G FSF2G'V6FW2FمՔЁѡЀpɅѕ(ٽ)strncpy( &(valueStr[0]), row[i], (int)lengths[i] ) ; [YT[ [[WWHH ˆ&Fb&fVBfVRW5B"fVU7G"ݥэmt( case FIELD_TYPE_TINY: \HQSTWԕ\HQSUs66RdTEEUC#C͔%1}QeA}1=91=9(ase FIELD_TYPE_FLOAT: case FIELD_TYPEPN ܙ\XH[H\[\rrvFwpf"6"bfVUlt쀠p(( if ( (*p)=='-' )  OI߉ˆТТٕЁѼ=hյ(alues[i] = OZ_CStringToNumber( valueStr ) ; XZˆ\HQSTWSQNWG&7BFRW'2֖2B6V6́ɽѡѥɥ(9=QQormat is HH:MM:SS or HHH:MM:SS { [Lˆ[OB3ٽ͍مՕMȰ蕐蕐 4L( values[i] = OZ_int( (((H*60)+M)*60)+S ) ; BXZˆFVfVCW6R&u7FVمՕM(͔ѡمՔn contain '\0' characters values[i]H֗ZО]T[WK [ [[WH HˆТТV6P(ɥјمՔ9U10( values[i] = OZ_atom( "NULL" ) ; BB XZHHֈ\֗\fVW4Ɨ7BFƗ7BVfVG2fVW2ɕمՕ̀(ɕɸمՕ1Ѐ(􁕱 { return MYSQL_tags.EMPTY_QUERY ; }B‹VTS ]ܛ ԙ\ TB]\HB&rg&&W7VB6W@$FVfRՕ5fWF6&ܰİĤ)(5eME1}ILɕ̀=i}ѽ5eME1}IL=i}) ; OZ_RETURN ( row_to_term( res, mysql_fetch_row( r\ H H HŸB֗ВW[‹VTS ]ٚY[ ԙ\fVG7Т&WGW&2FRfVG2W2b&W7VB6W@)=i} %}5eME1}э}̰İĤ)(5eME1}ILes = OZ_toMYSQL_RES( OZ_in(0) ) ; unsigned int num_Y[H^\[۝[WٚY[\Nˆ֗\H \H FW&Ң2VfVG26VbFW&ՕE1}%1̀ű}э}̠ɕ̀(Ȁ int i = 0 ; i < num_fields ; i++ ) { names[WHH֗]JY[WK[YH HˆB֗\H\Ɨ7BFƗ7BVfVG2W2g&VRW2(=i}IQUI8ͱЀ))=i} %}(((5eQL.errno +Conn -ErrNo} // Returns the error number of HۛX[ۋ܈ Y\H\\܋“֗ВWVfRՕ5W'&Օ56FՕ5‚i}(=i}IQUI9}%9Pű}ɹ))Z_BI_end // // {MYSQL.errmsg +Conn -ErrMsg} // ReturnH\܈Y\YHوHۛX[ۋ܈Y\v2W'&"$FVfRՕ5W'&"ME0=i}ѽ5eME0=i}(Ȁɵ͜mysql_error( conn ); OZ_RETURN( OZ_mkByteString( err\[\\H H HŸB֗ВW[\ٙ[Y"B&WGW&FRBfVPB4vWD&FW$FW'f¤)( U}P(ɕɸ(((]%9=] /* NOT IMPLEMENTED! SEE os.cc AND osSetAlarmTimeԈQHS ˆ]\ L ˆ[BX][Y'fECbvWFFW"DU%$TfEB݅ɹѥѥȈ(((Ё͕􀁽P}nterval.tv_sec; int usec = oldT.it_interval.tv_usec;[HXʌL \X‚]\ˆ[YBVBg&260wBr2֖Ɨ6V6G3fB56WDɵQȡЁФ)(( U}P(ɕɸ((#ifdef WINDOWS if (timerthread==NULL) { unsigneYˆ[Y\XYH][Y\XY  NˆBYC7W7VEF&VBFW'F&VBF&BV6(ѥѡɕ݅Ѐ(IյQɕѥѡead->thrd); } #else struct itimerval newT; int XH L ˆ[\XH  L ILL ˆ] ]FW'fGe6V26V3WuBEFW'fGeW6V2͕(P}مՔ}͕͕(P}مՔtv_usec = usec; if (setitimer(ITIMER_REAL,&newT,S H Hˆޜ\[]][Y\NˆB[YBWFW&$2"5&5FW&f6REGVRٽ((хѥ=i} }ɽ}ѕə}хmt {"connect" ,6,1,MYSQL_connect KȘH K VTSH'VW'""Օ5VW'(ѽɕ}ɕձЈİı5eME1}ѽɕ}ɕձЀ }, {"free_result" ,1,0,MYSQL_free_result Kș]ܛȈ K KVTSٙ]ܛ&fWF6fVG2"Օ5fWF6fV̀(쉕ɹİı5eME1}ɹ }, {"error" ,1,1,MYSQL_erroK H ʈ]\[]fW"W&2ӰB7GVfbE̠(5eME1}ɥ=i}̡5eME1}х̹ɥ=i}ons(MYSQL_tags.until, OZ_nil())); OZ_protect(&MYSQ\]JN‚]\WXNˆBH ʈ^\Ȉ ‚