mysql-simple.ecl 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. IMPORT mysql;
  2. /*
  3. This example illustrates various calls to embdded MySQL code
  4. */
  5. // This is the record structure in ECL that will correspond to the rows in the MySQL dataset
  6. childrec := RECORD
  7. string name,
  8. integer value,
  9. boolean boolval,
  10. real8 r8,
  11. real4 r4,
  12. DATA d,
  13. DECIMAL10_2 ddd,
  14. UTF8 u1,
  15. UNICODE8 u2
  16. END;
  17. // Some data we will use to initialize the MySQL table
  18. init := DATASET([{'name1', 1, true, 1.2, 3.4, D'aa55aa55', 1234567.89, U'Straße', U'Straße'},
  19. {'name2', 2, false, 5.6, 7.8, D'00', -1234567.89, U'là', U'là'}], childrec);
  20. // Set up the MySQL database
  21. // Enable remote access to your MySQL DB Server to use its IP, else use localhost
  22. drop() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  23. DROP TABLE IF EXISTS tbl1;
  24. ENDEMBED;
  25. create() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  26. CREATE TABLE tbl1 ( name VARCHAR(20), value INT, boolval TINYINT, r8 DOUBLE, r4 FLOAT, d BLOB, ddd DECIMAL(10,2), u1 VARCHAR(10), u2 VARCHAR(10) );
  27. ENDEMBED;
  28. // Initialize the MySQL table, passing in the ECL dataset to provide the rows
  29. initialize(dataset(childrec) values) := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  30. INSERT INTO tbl1 values (?, ?, ?, ?, ?, ?, ?, ?, ?);
  31. ENDEMBED;
  32. // Add an additional row containing NULL values, to test that they are handled properly when read in ECL
  33. initializeNulls() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  34. INSERT INTO tbl1 (name) values ('nulls');
  35. ENDEMBED;
  36. // Returning a dataset
  37. dataset(childrec) testMySQLDS() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  38. SELECT * from tbl1;
  39. ENDEMBED;
  40. // Returning a single row
  41. childrec testMySQLRow() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  42. SELECT * from tbl1 LIMIT 1;
  43. ENDEMBED;
  44. // Passing in parameters
  45. childrec testMySQLParms(
  46. string name,
  47. integer value,
  48. boolean boolval,
  49. real8 r8,
  50. real4 r4,
  51. DATA d,
  52. UTF8 u1,
  53. UNICODE8 u2) := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  54. SELECT * from tbl1 WHERE name=? AND value=? AND boolval=? AND r8=? AND r4=? AND d=? AND u1=? AND u2=?;
  55. ENDEMBED;
  56. // Returning scalars
  57. string testMySQLString() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  58. SELECT max(name) from tbl1;
  59. ENDEMBED;
  60. dataset(childrec) testMySQLStringParam(string filter) := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  61. SELECT * from tbl1 where name = ?;
  62. ENDEMBED;
  63. integer testMySQLInt() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  64. SELECT max(value) from tbl1;
  65. ENDEMBED;
  66. boolean testMySQLBool() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  67. SELECT max(boolval) from tbl1;
  68. ENDEMBED;
  69. real8 testMySQLReal8() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  70. SELECT max(r8) from tbl1;
  71. ENDEMBED;
  72. real4 testMySQLReal4() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  73. SELECT max(r4) from tbl1;
  74. ENDEMBED;
  75. data testMySQLData() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  76. SELECT max(d) from tbl1;
  77. ENDEMBED;
  78. UTF8 testMySQLUtf8() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  79. SELECT max(u1) from tbl1;
  80. ENDEMBED;
  81. UNICODE testMySQLUnicode() := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  82. SELECT max(u2) from tbl1;
  83. ENDEMBED;
  84. // Passing in AND returning a dataset - this ends up acting a bit like a keyed join...
  85. stringrec := RECORD
  86. string name
  87. END;
  88. stringrec extractName(childrec l) := TRANSFORM
  89. SELF := l;
  90. END;
  91. dataset(childrec) testMySQLDSParam(dataset(stringrec) inrecs) := EMBED(mysql : user('rchapman'),database('test'),server('192.168.56.120'))
  92. SELECT * from tbl1 where name = ?;
  93. ENDEMBED;
  94. sequential (
  95. drop(),
  96. create(),
  97. initialize(init),
  98. initializeNulls(),
  99. OUTPUT(testMySQLDS()),
  100. OUTPUT(testMySQLRow().name),
  101. OUTPUT(testMySQLParms('name1', 1, true, 1.2, 3.4, D'aa55aa55', U'Straße', U'Straße')),
  102. OUTPUT(testMySQLString()),
  103. OUTPUT(testMySQLStringParam(testMySqlString())),
  104. OUTPUT(testMySQLInt()),
  105. OUTPUT(testMySQLBool()),
  106. OUTPUT(testMySQLReal8()),
  107. OUTPUT(testMySQLReal4()),
  108. OUTPUT(testMySQLData()),
  109. OUTPUT(testMySQLUtf8()),
  110. OUTPUT(testMySQLUnicode()),
  111. OUTPUT(testMySQLDSParam(PROJECT(init, extractName(LEFT))))
  112. );