xlang v5.1 Release
程序设计语言基础库文档
载入中...
搜索中...
未找到
AdoConnector.xcsm
浏览该文件的文档.
1//xlang Source, Name:SqlServer.xcsm
2//Date: Sat Sep 12:06:04 2019
3
4class AdoConnector : Sql.Connection{
5
6 long hAdo;
7
8 int port = 1433;
9 int timeout = 0;
10
11 public enum MysqlOption{
15 SELECTDB
16 };
17
18 public AdoConnector(){
19 if (_system_.getPlatformId() != 0){
20 throw new IllegalArgumentException("ADO not support this Operating System!");
21 }
22 }
23 /*static class MysqlRegister : Sql.ConnectionRegister{
24 Sql.Connection allocConnection(String drivername){
25 if (drivername.equals("mysql")){
26 return new AdoConnector();
27 }
28 return nilptr;
29 }
30 };
31
32 static bool registry(){
33 if (Helper.init()){
34 Sql.Database.reigstry(DRIVERNAME, new MysqlRegister());
35 return true;
36 }
37 return false;
38 }
39 */
40 protected static class Helper :Library {
41 static bool bloaded = false;
42 public static bool init(){
43
44 if (bloaded == false){
45 try{
46 loadLibrary("adohelper");
47 bloaded = true;
48 }catch(Exception e){
50 }
51 }
52 return bloaded;
53 }
54
55 public import{
56 Pointer cdecl ado_alloc(String driver, String host, int port, String name, String pwd, int timeout, ObjectPtr, ObjectRef);
57 void cdecl ado_delloc(Pointer);
58 Pointer cdecl ado_execute(Pointer, String sql, bool needrs, ObjectPtr, ObjectRef);
59 void cdecl ado_delloc_rs(Pointer);
60
61 bool cdecl ado_rs_next(Pointer);
62 bool cdecl ado_rs_prev(Pointer);
63
64 bool cdecl ado_rs_first(Pointer);
65 bool cdecl ado_rs_last(Pointer);
66 int cdecl ado_rs_column_count(Pointer);
67 Object cdecl ado_rs_column_name(Pointer, int );
68 int cdecl ado_rs_count(Pointer);
69 bool cdecl ado_rs_iseof(Pointer);
70
71 Object cdecl ado_rs_getValue(Pointer, String);
72 int cdecl ado_rs_getValueI(Pointer, String);
73 long cdecl ado_rs_getValueL(Pointer, String);
74 double cdecl ado_rs_getValueD(Pointer, String);
75
76 Object cdecl ado_rs_getIValue(Pointer, int);
77 int cdecl ado_rs_getIValueI(Pointer, int);
78 long cdecl ado_rs_getIValueL(Pointer, int);
79 double cdecl ado_rs_getIValueD(Pointer, int);
80 };
81 };
82
83 public static class AdoResultSet : Sql.ResultSet{
84 long hres;
85
86 public AdoResultSet(long r){
87 hres = r;
88 }
89
90 public bool first()override{
91 return Helper.ado_rs_first(hres);
92 }
93
94 public bool last()override{
95 return Helper.ado_rs_last(hres);
96 }
97
98 public bool next()override{
99 return Helper.ado_rs_next(hres);
100 }
101
102 public bool previous()override{
103 return Helper.ado_rs_prev(hres);
104 }
105
106 public bool isFirst()override{
107 throw new Sql.DatabaseNotSupportException("isFirst");
108 return false;
109 }
110
111 public bool isLast()override{
112 throw new Sql.DatabaseNotSupportException("isLast");
113 return false;
114 }
115
116 public bool isEof()override{
117 return Helper.ado_rs_iseof(hres);
118 }
119
120 public bool isValid()override{
121 return hres != 0;
122 }
123
124 public int getInt(String columnlabel)override{
125 return Helper.ado_rs_getValueI(hres, columnlabel);
126 }
127
128 public long getLong(String columnlabel)override{
129 return Helper.ado_rs_getValueL(hres, columnlabel);
130 }
131
132 public float getFloat(String columnlabel)override{
133 return getString(columnlabel).parseFloat();
134 }
135
136 public double getDouble(String columnlabel)override{
137 return Helper.ado_rs_getValueD(hres, columnlabel);
138 }
139
140 public byte getByte(String columnlabel)override{
141 return Helper.ado_rs_getValueI(hres, columnlabel);
142 }
143
144 public bool getBoolean(String columnlabel)override{
145 return Helper.ado_rs_getValueI(hres, columnlabel) != 0;
146 }
147
148 public String getString(String columnlabel)override{
149 return (String)Helper.ado_rs_getValue(hres, columnlabel);
150 }
151
152 public int getInt(int columnIndex)override{
153 return Helper.ado_rs_getIValueI(hres, columnIndex);
154 }
155
156 public long getLong(int columnIndex)override{
157 return Helper.ado_rs_getIValueL(hres, columnIndex);
158 }
159
160 public float getFloat(int columnIndex)override{
161 return getString(columnIndex).parseFloat();
162 }
163
164 public double getDouble(int columnIndex)override{
165 return Helper.ado_rs_getIValueD(hres, columnIndex);
166 }
167
168 public byte getByte(int columnIndex)override{
169 return Helper.ado_rs_getIValueI(hres, columnIndex);
170 }
171
172 public bool getBoolean(int columnIndex)override{
173 return Helper.ado_rs_getIValueI(hres, columnIndex) != 0;
174 }
175
176 public String getString(int columnIndex)override{
177 return (String)Helper.ado_rs_getIValue(hres, columnIndex);
178 }
179
180 public int findColumn(String name)override{
181 for (int i = 0, c = getColumnCount();i < c; i++){
182 if (getColumnName(i) == name){
183 return i;
184 }
185 }
186 return -1;
187 }
188
189 public int getColumnCount()override{
190 return Helper.ado_rs_column_count(hres);
191 }
192
193 public String getColumnName(int i)override{
194 return (String)Helper.ado_rs_column_name(hres,i);
195 }
196
197 public long getRowCount()override{
198 return Helper.ado_rs_count(hres);
199 }
200
201 public int getRow()override{
202 throw new Sql.DatabaseNotSupportException("getRow");
203 return 0;
204 }
205
206 public void close()override{
207 if (hres != 0){
208 Helper.ado_delloc_rs(hres);
209 hres = 0;
210 }
211 }
212
213 void finalize(){
214 close();
215 }
216 };
217
218 static class AdoStatement : Sql.Statement{
220
222 __ado = m;
223 }
224
225 public int execute(String sql)override{
226 int errcode = 0;
227 String errmsg = "OK";
228
229 long hrs = Helper.ado_execute(__ado.hAdo,sql, false, errcode, errmsg);
230 if (0 == hrs){
231 throw new Sql.SqlException(errcode, errmsg);
232 }else{
233 Helper.ado_delloc_rs(hrs);
234 }
235 return 0;
236 }
237 public int get_changes()override{
238 throw new Sql.SqlException(-1, "get_changes");
239 return 0;
240 }
241 public Sql.ResultSet executeQuery(String sql)override{
242 int errcode = 0;
243 String errmsg = "OK";
244 long hrs = Helper.ado_execute(__ado.hAdo,sql, true, errcode, errmsg);
245 if (0 == hrs){
246 throw new Sql.SqlException(errcode, errmsg);
247 }
248 return new AdoResultSet(hrs);
249 }
250
251 public int executeUpdate(String sql)override{
252 int errcode = 0;
253 String errmsg = "OK";
254 long hrs = Helper.ado_execute(__ado.hAdo,sql, false, errcode, errmsg);
255 if (0 == hrs){
256 throw new Sql.SqlException(errcode, errmsg);
257 }else{
258 Helper.ado_delloc_rs(hrs);
259 }
260 return 0;
261 }
262
263 public Sql.ResultSet getResult()override{ throw new Sql.DatabaseNotSupportException("getResult"); return nilptr; }
264
265 public void close()override{ }
266 };
267
268
269 public class AdoPreparedStatement : Sql.PreparedStatement{
271
273 super(sql);
274 __ado = m;
275 }
276
277 public int execute(String sql)override{
278 int errcode = 0;
279 String errmsg = "OK";
280 long hrs = Helper.ado_execute(__ado.hAdo,sql, false, errcode, errmsg);
281 if (0 == hrs){
282 throw new Sql.SqlException(errcode, errmsg);
283 }else{
284 Helper.ado_delloc_rs(hrs);
285 }
286 return 0;
287 }
288
289 public Sql.ResultSet executeQuery(String sql)override{
290 int errcode = 0;
291 String errmsg = "OK";
292 long hrs = Helper.ado_execute(__ado.hAdo,sql, false, errcode, errmsg);
293 if (0 == hrs){
294 throw new Sql.SqlException(errcode, errmsg);
295 }
296 return new AdoResultSet(hrs);
297 }
298
299 public int executeUpdate(String sql)override{
300 int errcode = 0;
301 String errmsg = "OK";
302 long hrs = Helper.ado_execute(__ado.hAdo,sql, false, errcode, errmsg);
303 if (0 == hrs){
304 throw new Sql.SqlException(errcode, errmsg);
305 }else{
306 Helper.ado_delloc_rs(hrs);
307 }
308 return 0;
309 }
310
311 public Sql.ResultSet getResult()override{ throw new Sql.DatabaseNotSupportException("getResult"); return nilptr; }
312
313 public void close()override{
314
315 }
316 };
317
318
319 public void close() override {
320 //TODO:
321 if (hAdo != 0){
322 Helper.ado_delloc(hAdo);
323 hAdo = 0;
324 }
325 }
326
327 void finalize(){
328 close();
329 }
330
332
333 public void setDriver(String strDrv){
334 driver = strDrv;
335 }
336
337 public void create(String uri, String username, String pwd) override {
338
339 if (driver == nilptr){
340 throw new Sql.SqlException(-1, "driver is nilptr");
341 }
342 int errcode = 0;
343 String errmsg = "OK";
344
345 hAdo = Helper.ado_alloc(driver, uri, port, username, pwd, timeout, errcode, errmsg);
346
347 if (0l == hAdo){
348 throw new Sql.SqlException(errcode, errmsg);
349 }
350 }
351
352 public bool isClosed() override {
353 //TODO:
354 return hAdo != 0;
355 }
356
357
358 public int getErrorCode()override{
359 //throw new Sql.DatabaseNotSupportException("getErrorCode");
360 return 0;
361 }
362
363 public String getError()override{
364 throw new Sql.DatabaseNotSupportException("getError");
365 return nilptr;
366 }
367
369 throw new Sql.DatabaseNotSupportException("getSqlState");
370 return nilptr;
371 }
372
373 public String getInfo(){
374 throw new Sql.DatabaseNotSupportException("getInfo");
375 return nilptr;
376 }
377
378 public Object getOption(int opt) override {
379 //TODO:
380 throw new Sql.DatabaseNotSupportException("getOption");
381 return nilptr;
382 }
383
384 public void setOption(int opt, Object option) override {
385 switch(opt){
386 case MysqlOption.PORT:
387 port = (int)option;
388 break;
389 case MysqlOption.TIMEOUT:
390 timeout = (int)option;
391 break;
392 default:
393 throw new Sql.DatabaseNotSupportException("getOption");
394 break;
395 }
396 }
397
398 public Sql.Statement createStatement() override {
399 return new AdoStatement(this);
400 }
401
403 return new AdoPreparedStatement(this, sql);
404 }
405};
static final int getPlatformId()
static final void output(String)
int execute(String sql) override
AdoPreparedStatement(AdoConnector m, String sql)
Sql.ResultSet executeQuery(String sql) override
int executeUpdate(String sql) override
Sql.ResultSet getResult() override
String getString(int columnIndex) override
String getString(String columnlabel) override
bool getBoolean(int columnIndex) override
int getColumnCount() override
double getDouble(String columnlabel) override
float getFloat(String columnlabel) override
long getRowCount() override
int getInt(String columnlabel) override
float getFloat(int columnIndex) override
int findColumn(String name) override
long getLong(int columnIndex) override
String getColumnName(int i) override
double getDouble(int columnIndex) override
byte getByte(String columnlabel) override
long getLong(String columnlabel) override
bool getBoolean(String columnlabel) override
byte getByte(int columnIndex) override
int getInt(int columnIndex) override
int execute(String sql) override
Sql.ResultSet executeQuery(String sql) override
int executeUpdate(String sql) override
Sql.ResultSet getResult() override
static bool init()
int getErrorCode() override
void close() override
void create(String uri, String username, String pwd) override
Object getOption(int opt) override
void setDriver(String strDrv)
bool isClosed() override
String getSqlState()
Sql.Statement createStatement() override
Sql.PreparedStatement prepareStatement(String sql) override
void setOption(int opt, Object option) override
String getError() override
final String getMessage()
static final void loadLibrary(String)
Definition Object.x:1
Definition String.x:5
float parseFloat()
Definition xsql.xcs:3