1 module gdaDemo.TestGda; 2 3 import gdac.gdatypes; 4 import gda.Gda; 5 import gda.Client; 6 import gda.Config; 7 import gda.Connection; 8 import gda.Command; 9 import gda.DataModel; 10 import gda.DataSourceInfo; 11 import gda.ProviderInfo; 12 import gda.Value; 13 import gda.ErrorGda; 14 import glib.ListG; 15 16 import std.stdio; 17 import std.c.process; 18 19 void main (string[] args) 20 { 21 Gda.init("TestGDA", "0.1", args); 22 save_ds(); 23 do_stuff(); 24 } 25 26 void save_ds () 27 { 28 Config.saveDataSource("calvaris", "MySQL", "DATABASE=calvaris", "cosa de calvaris", null, null); 29 } 30 31 void do_stuff () 32 { 33 list_providers (); 34 list_datasources (); 35 36 Client client = new Client(); 37 Connection connection = client.openConnection("calvaris", null, null, GdaConnectionOptions.READ_ONLY); 38 if (!connection) { 39 writefln("Connection failed!"); 40 exit(1); 41 } 42 if (!connection.isOpen()) { 43 writefln("no connection?"); 44 get_errors(connection); 45 exit(1); 46 } 47 writefln("about to do some queries"); 48 execute_some_queries (connection); 49 50 //process_accounts(connection); 51 client.closeAllConnections(); 52 53 //gda_main_quit(); 54 } 55 56 void execute_some_queries (Connection connection) 57 { 58 execute_sql_non_query (connection, "DELETE FROM cliente"); 59 execute_sql_non_query (connection, 60 "INSERT INTO cliente(cd_cli, dni, nombr, direc, telef) " 61 "VALUES ('1', '1234', 'Xabier'," 62 "'Rua Unha calquera', '123')" 63 "; INSERT INTO cliente(cd_cli, dni, nombr, direc, telef) " 64 "VALUES ('2', '2345', 'Rodriguez'," 65 "'Rua Outra calquera', '234')"); 66 execute_sql_non_query (connection, 67 "INSERT INTO cliente(cd_cli, dni, nombr, direc, telef) " 68 "VALUES ('1', '1234', 'Xabier'," 69 "'Rua Unha calquera', '123')" 70 "; INSERT INTO cliente(cd_cli, dni, nombr, direc, telef) " 71 "VALUES ('2', '2345', 'Rodriguez'," 72 "'Rua Outra calquera', '234')"); 73 execute_sql_command (connection, "SELECT * FROM cliente"); 74 75 76 execute_sql_non_query (connection, 77 "DELETE FROM accounts;" 78 "INSERT INTO accounts" 79 "(client_code, account_code, balance)" 80 "VALUES (123, 456, 1000);" 81 "INSERT INTO accounts" 82 "(client_code, account_code, balance)" 83 "VALUES (789, 012, 5000);"); 84 85 execute_sql_command (connection, "SELECT * FROM Client"); 86 } 87 88 void list_datasources () 89 { 90 ListG ds_list = Config.getDataSourceList(); 91 92 writef("\n"); 93 94 for (int n=0;n<ds_list.length();n++) 95 { 96 ListG node = ds_list.nth(n); 97 98 DataSourceInfo info = new DataSourceInfo(node); 99 100 writefln("NAME: %s PROVIDER: %s CNC: %s DESC: %s USER: %s PASSWORD: %s\n", 101 info.name, info.provider, info.cncString, info.description, 102 info.username, info.password); 103 } 104 105 //gda_config_free_data_source_list (ds_list); 106 } 107 108 void list_providers () 109 { 110 ListG prov_list = Config.getProviderList(); 111 112 for (int n =0; n < prov_list.length(); n++) 113 { 114 ListG node = prov_list.nth(n); 115 116 ProviderInfo info = new ProviderInfo(node); 117 118 writefln("ID: %s", info.id); 119 } 120 121 //gda_config_free_provider_list (prov_list); 122 } 123 124 int execute_sql_non_query (Connection connection, string buffer) 125 { 126 writefln("execute_sql_non_query %s", buffer); 127 int number; 128 auto command = new Command(buffer, GdaCommandType.TYPE_SQL, GdaCommandOptions.STOP_ON_ERRORS); 129 130 number = connection.executeNonQuery(command, null); 131 132 return number; 133 } 134 135 bool execute_sql_command (Connection connection, string buffer) 136 { 137 writefln("execute_sql_command %s", buffer); 138 bool errors=false; 139 140 auto command = new Command(buffer, GdaCommandType.TYPE_SQL, GdaCommandOptions.STOP_ON_ERRORS); 141 ListG list = connection.executeCommand(command, null); 142 143 if (list is null) 144 { 145 writefln("no data"); 146 return true; 147 } 148 149 writefln("got %d datamodels", list.length()); 150 get_errors(connection); 151 for (int n=0; n<list.length();n++) 152 { 153 // one for the wrapper? 154 155 DataModel dm= new DataModel( list.nth(n)); 156 157 if (dm is null) 158 { 159 errors=true; 160 continue; 161 } 162 163 show_table (dm); 164 //g_object_unref(dm); 165 } 166 167 //gda_command_free (command); 168 169 return errors; 170 } 171 172 void show_table (DataModel dm) 173 { 174 int row_id; 175 int column_id; 176 177 for (column_id = 0; column_id < dm.getNColumns(); column_id++) 178 { 179 writef("%s\t", dm.getColumnTitle(column_id)); 180 } 181 182 writef("\n"); 183 184 for (row_id = 0; row_id < dm.getNRows(); row_id++) 185 { 186 for (column_id = 0; column_id < dm.getNColumns(); column_id++) 187 { 188 Value value = dm.getValueAt(column_id, row_id); 189 writefln("%s\t", value.stringify()); 190 } 191 writef("\n"); 192 } 193 } 194 195 bool get_errors (Connection connection) 196 { 197 ListG list = connection.getErrors(); 198 bool ret=false; 199 200 for (int n = 0; n<list.length(); n++) 201 { 202 ListG node = list.nth(n); 203 204 ErrorGda error = new ErrorGda(node); 205 206 writefln("Error no: %d\tdesc: %s\t source: %s\tsqlstate: %s ", 207 error.getNumber(), 208 error.getDescription(), 209 error.getSource(), 210 error.getSqlstate()); 211 } 212 213 ret = true; 214 215 return ret; 216 }