# See the License for the specific language governing permissions and
# limitations under the License.
+# A native wrapper ove the postgres c api
module native_postgres is pkgconfig("libpq")
in "C header" `{
new nonfatal_error `{ return PGRES_NONFATAL_ERROR; `}
new fatal_error `{ return PGRES_FATAL_ERROR; `}
- fun is_ok: Bool `{return self == PGRES_TUPLES_OK || self == PGRES_COMMAND_OK; `}
+ fun is_ok: Bool `{
+ return !(self == PGRES_BAD_RESPONSE || self == PGRES_NONFATAL_ERROR || self == PGRES_FATAL_ERROR);
+ `}
- redef fun to_s import NativeString.to_s `{
+ redef fun to_s import CString.to_s `{
char * err = PQresStatus(self);
if(err == NULL) err = "";
- return NativeString_to_s(err);
+ return CString_to_s(err);
`}
end
fun is_ok: Bool `{return self == CONNECTION_OK; `}
end
-extern class PGResult `{PGresult *`}
+extern class NativePGResult `{PGresult *`}
# Frees the memory block associated with the result
fun clear `{PQclear(self); `}
fun status: ExecStatusType `{ return PQresultStatus(self); `}
# Returns the field name of a given column_number
- fun fname(column_number:Int):String import NativeString.to_s `{
- return NativeString_to_s( PQfname(self, column_number));
+ fun fname(column_number:Int):String import CString.to_s `{
+ return CString_to_s( PQfname(self, column_number));
`}
# Returns the column number associated with the column name
`}
# Returns a single field value of one row of the result at row_number, column_number
- fun value(row_number:Int, column_number:Int):String import NativeString.to_s `{
- return NativeString_to_s(PQgetvalue(self, row_number, column_number));
+ fun value(row_number:Int, column_number:Int):String import CString.to_s `{
+ return CString_to_s(PQgetvalue(self, row_number, column_number));
`}
# Tests wether a field is a null value
extern class NativePostgres `{PGconn *`}
# Connect to a new database using the conninfo string as a parameter
- new connectdb(conninfo: String) import String.to_cstring `{
+ new connectdb(conninfo: Text) import Text.to_cstring `{
PGconn * self = NULL;
- self = PQconnectdb(String_to_cstring(conninfo));
+ self = PQconnectdb(Text_to_cstring(conninfo));
return self;
`}
# Submits a query to the server and waits for the result returns the ExecStatustype of the query
- fun exec(query: String): PGResult import String.to_cstring `{
- PGresult *res = PQexec(self, String_to_cstring(query));
+ fun exec(query: Text): NativePGResult import Text.to_cstring `{
+ PGresult *res = PQexec(self, Text_to_cstring(query));
return res;
`}
# Prepares a statement with the given parameters
- fun prepare(stmt: String, query: String, nParams: Int):PGResult import String.to_cstring `{
+ fun prepare(stmt: String, query: String, nParams: Int): NativePGResult import String.to_cstring `{
const char * stmtName = String_to_cstring(stmt);
const char * queryStr = String_to_cstring(query);
PGresult * res = PQprepare(self, stmtName, queryStr, nParams, NULL);
return res;
`}
- fun exec_prepared(stmt: String, nParams: Int, values: Array[String], pLengths: Array[Int], pFormats: Array[Int], resultFormat: Int):PGResult import String.to_cstring, Array[String].[], Array[Int].[] `{
+ fun exec_prepared(stmt: String, nParams: Int, values: Array[String], pLengths: Array[Int], pFormats: Array[Int], resultFormat: Int): NativePGResult import String.to_cstring, Array[String].[], Array[Int].[] `{
const char * stmtName = String_to_cstring(stmt);
const char * paramValues[nParams];
int paramLengths[nParams];
`}
# Returns the error message of the last operation on the connection
- fun error: String import NativeString.to_s `{
+ fun error: String import CString.to_s `{
char * error = PQerrorMessage(self);
- return NativeString_to_s(error);
+ return CString_to_s(error);
`}
# Returns the status of this connection