module firebird_status; private import ibase; private import std.gc; private import std.string; private import std.stdio; // // Used to receive status info from API calls // /* final class STATUS { private int[] StatusVector; public: this() { StatusVector = cast(int[]) malloc(20*int.sizeof); hasNoPointers(&StatusVector); StatusVector[] = 0; } ~this() { StatusVector = null; } bool StatusErrors() { if((StatusVector[0] == 1) && (StatusVector[1] > 0)) return true; return false; } int StatusSqlCode() { return cast(int) isc_sqlcode(StatusVector.ptr); } int StatusEngineCode() { if(StatusVector[0] == 1) return StatusVector[1]; return 0; } void StatusReset() { StatusVector = null; StatusVector = cast(int[]) malloc(20*int.sizeof); hasNoPointers(&StatusVector); writefln(StatusVector); //for(int i=0; i < 20; i++) // StatusVector[i] = 0; StatusVector[] = 0; } int* StatusHandle() { return StatusVector.ptr; } override string toString() { string mMessage; ISC_LONG sqlcode; if(mMessage.length != 0) return mMessage; // If message compiled, returns it string message; sqlcode = isc_sqlcode(cast(int*) &StatusVector);// Compiles the message(SQL part) char tester[2048]; if(sqlcode != -999) { isc_sql_interprete(cast(short)sqlcode, tester.ptr, 2048); message = "SQL Message : " ~ std.string.toString(sqlcode) ~ "\n" ~ std.string.toString(cast(char *) tester) ~ "\n\n"; } message ~= "Engine Code : " ~ .toString((StatusVector[0] == 1) ? cast(int) StatusVector[1] : 0) ~ newline; ISC_STATUS* error = cast(ISC_STATUS *) &StatusVector[0];// Compiles the message(Engine part) message ~= "Engine Message :" ~ newline; tester[] = 0; fb_interpret(tester.ptr, 2048, &error); message ~= std.string.toString(cast(char*) tester); message ~= newline; tester[] = 0; while(fb_interpret(tester.ptr, 2048, &error)) { message ~= std.string.toString(cast(char *) tester); message ~= newline; tester[] = 0; } mMessage = message; // ~ newline; return mMessage; } } */ const char[] newline = "\n"; final class STATUS { private int[20] StatusVector; public: bool StatusErrors() { if((StatusVector[0] == 1) && (StatusVector[1] > 0)) return true; return false; } int StatusSqlCode() { return cast(int) isc_sqlcode(StatusVector.ptr); } int StatusEngineCode() { if(StatusVector[0] == 1) return StatusVector[1]; return 0; } void StatusReset() { for(int i=0; i < 20; i++) StatusVector[i] = 0; } int * StatusHandle() { return StatusVector.ptr; } override string toString() { string mMessage; ISC_LONG sqlcode; if(mMessage.length != 0) return mMessage; // If message compiled, returns it mMessage = ""; string message = ""; sqlcode = isc_sqlcode(cast(int*) &StatusVector);// Compiles the message(SQL part) char tester[2048]; if(sqlcode != -999) { isc_sql_interprete(cast(short)sqlcode, tester.ptr, 2048); message = "SQL Message : "; message ~= std.string.toString(sqlcode); message ~= newline; message ~= std.string.toString(tester.ptr); message ~= newline; message ~= newline; } message ~= "Engine Code : " ~ .toString((StatusVector[0] == 1) ? cast(int) StatusVector[1] : 0) ~ newline; ISC_STATUS* error = cast(ISC_STATUS *) &StatusVector[0];// Compiles the message(Engine part) message ~= newline ~ "Engine Message :" ~ newline; tester[] = 0; fb_interpret(tester.ptr, 2048, &error); message ~= std.string.toString(tester.ptr); message ~= newline; tester[] = 0; while(fb_interpret(tester.ptr, 2048, &error)) { message ~= std.string.toString(tester.ptr); message ~= newline; tester[] = 0; } mMessage ~= message.idup ~ newline; return mMessage.idup; } }