Guest User

Untitled

a guest
Jan 16th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.04 KB | None | 0 0
  1. #library("psql");
  2.  
  3. #import("dart-ext:libpsql_dart");
  4.  
  5. class Database {
  6. var mDb;
  7. var mUser;
  8. var mDbname;
  9. var mPasswd;
  10. var mHost;
  11. var mPort;
  12. var mTable;
  13.  
  14. //String toString() => "<PostgreSQL: $user@$_host:$_port/$_table>";
  15. Database(host,user,passwd,dbname) : this.mUser = user, this.mHost = host, this.mPasswd = passwd, this.mDbname = dbname {
  16. mDb = _connect(host,user,passwd,dbname);
  17. }
  18.  
  19. }
  20. _connect(host,user,passwd,dbname) native 'Connect';
  21.  
  22. #include <string.h>
  23. #include <stdio.h>
  24. #include <libpq-fe.h>
  25. #include "dart_api.h"
  26.  
  27. Dart_NativeFunction ResolveName(Dart_Handle name, int argc);
  28.  
  29. DART_EXPORT Dart_Handle psql_dart_Init(Dart_Handle parent_library) {
  30. if (Dart_IsError(parent_library)) return parent_library;
  31.  
  32. Dart_Handle result_code =
  33. Dart_SetNativeResolver(parent_library, ResolveName);
  34. if (Dart_IsError(result_code)) return result_code;
  35.  
  36. return Dart_Null();
  37. }
  38.  
  39. Dart_Handle HandleError(Dart_Handle handle) {
  40. if (Dart_IsError(handle)) Dart_PropagateError(handle);
  41. return handle;
  42. }
  43. void Connect(Dart_NativeArguments args) {
  44. Dart_EnterScope();
  45. PGconn *conn;
  46. const char *conninfo = "user=postgres;password=postgres;host=localhost;port=5432;dbname=reviewdb";
  47. conn = PQconnectdb(conninfo);
  48.  
  49. /* Check to see that the backend connection was successfully made */
  50. if (PQstatus(conn) != CONNECTION_OK)
  51. {
  52. fprintf(stderr, "Connection to database failed: %s",
  53. PQerrorMessage(conn));
  54. PQfinish(conn);
  55. }
  56.  
  57. Dart_Handle result = HandleError(Dart_NewInteger((int64_t) conn));
  58. Dart_SetReturnValue(args, result);
  59.  
  60. Dart_ExitScope();
  61. }
  62.  
  63. Dart_NativeFunction ResolveName(Dart_Handle name, int argc) {
  64. assert(Dart_IsString8(name));
  65. const char* cname;
  66. Dart_Handle check_error = Dart_StringToCString(name, &cname);
  67. if (Dart_IsError(check_error)) Dart_PropagateError(check_error);
  68. Dart_NativeFunction result = NULL;
  69. if (strcmp("Connect", cname) == 0) result = Connect;
  70. Dart_ExitScope();
  71. return result;
  72. }
  73.  
  74. <script type="application/dart" src="web/lib/psql.dart"></script>
  75. <script type="application/dart" src="web/test_dart.dart"></script>
  76.  
  77. g++ -fPIC --verbose -I/home/{linux user}/Documents/dart/dart-sdk/include/ -lpq -I/usr/include/postgresql -c psql_dart.cc
  78.  
  79. gcc -shared -Wl,-soname,libpsql.so -o libpsql.so psql_dart.o
  80.  
  81. void Connect(Dart_NativeArguments args) {
  82. Dart_EnterScope();
  83. // PGconn *conn;
  84. // const char *conninfo = "user=postgres password=postgres host=localhost port=5432";
  85. // conn = PQconnectdb(conninfo);
  86. //
  87. // /* Check to see that the backend connection was successfully made */
  88. // if (PQstatus(conn) != CONNECTION_OK)
  89. // {
  90. // fprintf(stderr, "Connection to database failed: %s",
  91. // PQerrorMessage(conn));
  92. // PQfinish(conn);
  93. // exit(1);
  94. // }
  95. // PQfinish(conn);
  96.  
  97. Dart_Handle result = HandleError(Dart_NewInteger( 0));
  98. Dart_SetReturnValue(args, result);
  99.  
  100. Dart_ExitScope();
  101. }
  102.  
  103. worked?
  104. Segmentation fault (core dumped)
  105.  
  106. Starting program: /home/<user>/Documents/dart/dart-sdk/bin/dart test_dart.dart
  107. [Thread debugging using libthread_db enabled]
  108. Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
  109. worked?
  110.  
  111. Program received signal SIGSEGV, Segmentation fault.
  112. dart::Api::NewHandle (isolate=0x948a40, raw=0x7ffff7f80021) at runtime/vm/dart_api_impl.cc:114
  113. 114 runtime/vm/dart_api_impl.cc: No such file or directory.
  114. (gdb) bt
  115. #0 dart::Api::NewHandle (isolate=0x948a40, raw=0x7ffff7f80021) at runtime/vm/dart_api_impl.cc:114
  116. #1 0x000000000042e121 in dart::Dart_Invoke (target=<optimized out>, name=0x959b90, number_of_arguments=<optimized out>, arguments=<optimized out>) at runtime/vm/dart_api_impl.cc:3543
  117. #2 0x00000000004097ee in main (argc=<optimized out>, argv=<optimized out>) at runtime/bin/main.cc:724
  118.  
  119. // libpsql.cc
  120. #include <string.h>
  121. #include <stdio.h>
  122. #include <libpq-fe.h>
  123. #include "dart_api.h"
  124.  
  125. Dart_NativeFunction ResolveName(Dart_Handle name, int argc);
  126.  
  127. DART_EXPORT Dart_Handle psql_Init(Dart_Handle parent_library) {
  128. if (Dart_IsError(parent_library)) return parent_library;
  129.  
  130. Dart_Handle result_code =
  131. Dart_SetNativeResolver(parent_library, ResolveName);
  132. if (Dart_IsError(result_code)) return result_code;
  133.  
  134. return Dart_Null();
  135. }
  136.  
  137. Dart_Handle HandleError(Dart_Handle handle) {
  138. if (Dart_IsError(handle)) Dart_PropagateError(handle);
  139. return handle;
  140. }
  141.  
  142. void Connect(Dart_NativeArguments args) {
  143. Dart_EnterScope();
  144. PGconn *conn;
  145. const char *conninfo = "user=postgres;password=postgres;host=localhost;port=5432;dbname=reviewdb";
  146. conn = PQconnectdb(conninfo);
  147.  
  148. /* Check to see that the backend connection was successfully made */
  149. if (PQstatus(conn) != CONNECTION_OK)
  150. {
  151. fprintf(stderr, "Connection to database failed: %s",
  152. PQerrorMessage(conn));
  153. PQfinish(conn);
  154. }
  155.  
  156. Dart_Handle result = HandleError(Dart_NewInteger((int64_t) conn));
  157. Dart_SetReturnValue(args, result);
  158.  
  159. Dart_ExitScope();
  160. }
  161.  
  162. Dart_NativeFunction ResolveName(Dart_Handle name, int argc) {
  163. assert(Dart_IsString8(name));
  164. const char* cname;
  165. Dart_Handle check_error = Dart_StringToCString(name, &cname);
  166. if (Dart_IsError(check_error)) Dart_PropagateError(check_error);
  167. Dart_NativeFunction result = NULL;
  168. if (strcmp("Connect", cname) == 0) result = Connect;
  169. Dart_ExitScope();
  170. return result;
  171. }
  172.  
  173. // psql.dart
  174. #library("psql");
  175.  
  176. #import("dart-ext:psql");
  177.  
  178. class Database {
  179. var mDb;
  180. var mUser;
  181. var mDbname;
  182. var mPasswd;
  183. var mHost;
  184. var mPort;
  185. var mTable;
  186.  
  187. //String toString() => "<PostgreSQL: $user@$_host:$_port/$_table>";
  188. Database(host,user,passwd,dbname) : this.mUser = user, this.mHost = host, this.mPasswd = passwd, this.mDbname = dbname {
  189. mDb = _connect(host,user,passwd,dbname);
  190. }
  191.  
  192. }
  193. _connect(host,user,passwd,dbname) native 'Connect';
  194.  
  195. // test.dart
  196. #import('psql.dart');
  197.  
  198. main() {
  199. var database = new Database('localhost', 'mbutler', 'test', 'test');
  200.  
  201. if(database != null) {
  202. print('worked?');
  203. }
  204. }
  205.  
  206. g++ -O2 -DDART_SHARED_LIB -I/home/<user>/dart/dart-sdk/include -rdynamic -fPIC -shared libpsql.cc -lpq -I/usr/include/postgresql -o libpsql.so
Add Comment
Please, Sign In to add comment