trilogy_w_prepared_statements 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +80 -0
  4. data/Rakefile +22 -0
  5. data/ext/trilogy-ruby/cast.c +277 -0
  6. data/ext/trilogy-ruby/cext.c +1048 -0
  7. data/ext/trilogy-ruby/extconf.rb +17 -0
  8. data/ext/trilogy-ruby/inc/trilogy/blocking.h +281 -0
  9. data/ext/trilogy-ruby/inc/trilogy/buffer.h +64 -0
  10. data/ext/trilogy-ruby/inc/trilogy/builder.h +165 -0
  11. data/ext/trilogy-ruby/inc/trilogy/charset.h +277 -0
  12. data/ext/trilogy-ruby/inc/trilogy/client.h +760 -0
  13. data/ext/trilogy-ruby/inc/trilogy/error.h +44 -0
  14. data/ext/trilogy-ruby/inc/trilogy/packet_parser.h +34 -0
  15. data/ext/trilogy-ruby/inc/trilogy/protocol.h +1014 -0
  16. data/ext/trilogy-ruby/inc/trilogy/reader.h +216 -0
  17. data/ext/trilogy-ruby/inc/trilogy/socket.h +111 -0
  18. data/ext/trilogy-ruby/inc/trilogy/vendor/curl_hostcheck.h +29 -0
  19. data/ext/trilogy-ruby/inc/trilogy/vendor/openssl_hostname_validation.h +51 -0
  20. data/ext/trilogy-ruby/inc/trilogy.h +8 -0
  21. data/ext/trilogy-ruby/src/blocking.c +358 -0
  22. data/ext/trilogy-ruby/src/buffer.c +60 -0
  23. data/ext/trilogy-ruby/src/builder.c +236 -0
  24. data/ext/trilogy-ruby/src/charset.c +212 -0
  25. data/ext/trilogy-ruby/src/client.c +903 -0
  26. data/ext/trilogy-ruby/src/error.c +17 -0
  27. data/ext/trilogy-ruby/src/packet_parser.c +140 -0
  28. data/ext/trilogy-ruby/src/protocol.c +1175 -0
  29. data/ext/trilogy-ruby/src/reader.c +282 -0
  30. data/ext/trilogy-ruby/src/socket.c +623 -0
  31. data/ext/trilogy-ruby/src/vendor/curl_hostcheck.c +206 -0
  32. data/ext/trilogy-ruby/src/vendor/openssl_hostname_validation.c +175 -0
  33. data/ext/trilogy-ruby/trilogy-ruby.h +37 -0
  34. data/lib/trilogy/version.rb +3 -0
  35. data/lib/trilogy.rb +61 -0
  36. data/trilogy.gemspec +27 -0
  37. metadata +107 -0
@@ -0,0 +1,44 @@
1
+ #ifndef TRILOGY_ERROR_H
2
+ #define TRILOGY_ERROR_H
3
+
4
+ #define TRILOGY_ERROR_CODES(XX) \
5
+ XX(TRILOGY_OK, 0) \
6
+ XX(TRILOGY_ERR, -1) \
7
+ XX(TRILOGY_EOF, -2) \
8
+ XX(TRILOGY_SYSERR, -3) /* check errno */ \
9
+ XX(TRILOGY_UNEXPECTED_PACKET, -4) \
10
+ XX(TRILOGY_TRUNCATED_PACKET, -5) \
11
+ XX(TRILOGY_PROTOCOL_VIOLATION, -6) \
12
+ XX(TRILOGY_AUTH_PLUGIN_TOO_LONG, -7) \
13
+ XX(TRILOGY_EXTRA_DATA_IN_PACKET, -8) \
14
+ XX(TRILOGY_INVALID_CHARSET, -9) \
15
+ XX(TRILOGY_AGAIN, -10) \
16
+ XX(TRILOGY_CLOSED_CONNECTION, -11) \
17
+ XX(TRILOGY_HAVE_RESULTS, -12) \
18
+ XX(TRILOGY_NULL_VALUE, -13) \
19
+ XX(TRILOGY_INVALID_SEQUENCE_ID, -14) \
20
+ XX(TRILOGY_TYPE_OVERFLOW, -15) \
21
+ XX(TRILOGY_OPENSSL_ERR, -16) /* check ERR_get_error() */ \
22
+ XX(TRILOGY_UNSUPPORTED, -17) \
23
+ XX(TRILOGY_DNS_ERR, -18) \
24
+ XX(TRILOGY_AUTH_SWITCH, -19) \
25
+ XX(TRILOGY_UNKNOWN_TYPE, -20)
26
+
27
+ enum {
28
+ #define XX(name, code) name = code,
29
+ TRILOGY_ERROR_CODES(XX)
30
+ #undef XX
31
+ };
32
+
33
+ /* trilogy_error - Get the string version of an Trilogy error code.
34
+ *
35
+ * This can be useful for logging or debugging as printing the error value
36
+ * integer itself doesn't provide much context.
37
+ *
38
+ * error - An Trilogy error code integer.
39
+ *
40
+ * Returns an error name constant from TRILOGY_ERROR_CODES as a C-string.
41
+ */
42
+ const char *trilogy_error(int error);
43
+
44
+ #endif
@@ -0,0 +1,34 @@
1
+ #ifndef TRILOGY_PACKET_PARSER_H
2
+ #define TRILOGY_PACKET_PARSER_H
3
+
4
+ #include <stddef.h>
5
+ #include <stdint.h>
6
+
7
+ // Data between client and server is exchanged in packets of max 16MByte size.
8
+ #define TRILOGY_MAX_PACKET_LEN 0xffffff
9
+
10
+ typedef struct {
11
+ int (*on_packet_begin)(void *);
12
+ int (*on_packet_data)(void *, const uint8_t *, size_t);
13
+ int (*on_packet_end)(void *);
14
+ } trilogy_packet_parser_callbacks_t;
15
+
16
+ typedef struct {
17
+ void *user_data;
18
+ const trilogy_packet_parser_callbacks_t *callbacks;
19
+
20
+ uint8_t sequence_number;
21
+
22
+ // private:
23
+ unsigned bytes_remaining : 24;
24
+
25
+ unsigned state : 3;
26
+ unsigned fragment : 1;
27
+ unsigned deferred_end_callback : 1;
28
+ } trilogy_packet_parser_t;
29
+
30
+ void trilogy_packet_parser_init(trilogy_packet_parser_t *parser, const trilogy_packet_parser_callbacks_t *callbacks);
31
+
32
+ size_t trilogy_packet_parser_execute(trilogy_packet_parser_t *parser, const uint8_t *buf, size_t len, int *error);
33
+
34
+ #endif