Esempio n. 1
0
/*
 * Class:     amzi_ls_ARulesLogicServer
 * Method:    MakeFA
 * Signature: (Ljava/lang/String;I)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_ARulesLogicServer_MakeFA
  (JNIEnv * jenv, jobject jobj, jstring jstr, jint ja)
{
   RC     rc;
   TERM   t;
   aCHAR* str;

   GET_EID(e);
   str = JtoC(jenv, jstr);
   rc = lsMakeFA(e, &t, str, (ARITY)ja);
   delete[] str;

   if (rc != OK)
      amzi_error(jenv, e, "MakeFA");
   
   return (jlong)(ajptr)t;
}
void	prolog_printf ( ENGid		Engine,
		        char *		format, 
		        ... ) 
   {
	char		buffer [4096] ;
	va_list		list ;
	TERM		Write ;


	va_start ( list, format ) ;
	vsprintf( buffer, format, list ) ;
	va_end ( list ) ;

	// Don't call ExecStr directly because we would have problems with quoted
	// strings ; call lsMakeFA and lsUnifyArg instead before calling lsExec
	lsMakeFA ( Engine, & Write, "write", 1 ) ;
	lsUnifyArg ( Engine, & Write, 1, cATOM, buffer ) ;
	lsExec ( Engine, & Write ) ;

	//lsExecStr ( Engine, & Cmd, "nl" ) ;
     }
Esempio n. 3
0
TF EXPFUNC p_db_fetch(ENGid eid)
{
   QUERY* pq;
   HSTMT  hstmt;
   TERM   tcols;
   TERM   t;
   COL*   pCol;

#ifdef _DEBUG
TERM xt1, xt2;
char xbuf1[512], xbuf2[512];
#endif

   if (pVAR != lsGetParmType(eid, 2))
   {
      lsErrRaise(eid, "db_fetch instantiation error: arg 2 must be var");
      return FALSE;
   }

   g_lsRC = lsGetParm(eid, 1, cADDR, &pq);
   if (g_lsRC != OK) goto LS_ERROR;
   hstmt = pq->hstmt;
   
   /* set up error handler */
   g_hSTMT = hstmt;
   g_eid = eid;


   if ( SQL_NO_DATA_FOUND == (g_RC = SQLFetch(hstmt)) )
   {
      DUMPLOG("no data found");
      query_del(pq);
      return FALSE;
   }
   ERROR_CHK("SQLFetch");
   DUMPLOG("found data");

   g_lsRC = lsMakeList(eid, &tcols);
   if (g_lsRC != OK) goto LS_ERROR;

   for (pCol = pq->clist; pCol != NULL; pCol = pCol->next)
   {
      switch(pCol->pdtype)
      {
      case pdATOM:
         g_lsRC = lsMakeAtom(eid, &t, pCol->s);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdSTR:
         g_lsRC = lsMakeStr(eid, &t, pCol->s);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdINT:
         g_lsRC = lsMakeInt(eid, &t, pCol->i);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdFLOAT:
         g_lsRC = lsMakeFloat(eid, &t, pCol->f);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdDOUBLE:
         g_lsRC = lsMakeFloat(eid, &t, pCol->g);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdDATE:
         g_lsRC = lsMakeFA(eid, &t, "date", 3);
         if (g_lsRC != OK) goto LS_ERROR;
         lsUnifyArg(eid, &t, 1, cSHORT, &(pCol->d->year));
         lsUnifyArg(eid, &t, 2, cSHORT, &(pCol->d->month));
         lsUnifyArg(eid, &t, 3, cSHORT, &(pCol->d->day));
         break;
      case pdTIME:
         g_lsRC = lsMakeFA(eid, &t, "time", 3);
         if (g_lsRC != OK) goto LS_ERROR;
         lsUnifyArg(eid, &t, 1, cSHORT, &(pCol->t->hour));
         lsUnifyArg(eid, &t, 2, cSHORT, &(pCol->t->minute));
         lsUnifyArg(eid, &t, 3, cSHORT, &(pCol->t->second));
         break;
      default:
         messout("Unsupported Prolog type for ODBC fetch");
      }
      g_lsRC = lsPushList(eid, &tcols, t);
      if (g_lsRC != OK) return(lserror());
   }

/* #ifdef _DEBUG
lsGetParm(eid, 2, cTERM, &xt1);
lsTermToStrQ(eid, xt1, xbuf1, 500);
lsTermToStrQ(eid, xt2, xbuf2, 500);
#endif */

   lsUnifyParm(eid, 2, cTERM, &tcols);

   return TRUE;
LS_ERROR:
   return(lserror());
ODBC_ERROR:
   return FALSE;
}