mysql-simple.ecl 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. drop() := EMBED(mysql : user('rchapman'),database('test'))
  22. DROP TABLE IF EXISTS tbl1;
  23. ENDEMBED;
  24. create() := EMBED(mysql : user('rchapman'),database('test'))
  25. 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) );
  26. ENDEMBED;
  27. // Initialize the MySQL table, passing in the ECL dataset to provide the rows
  28. initialize(dataset(childrec) values) := EMBED(mysql : user('rchapman'),database('test'))
  29. INSERT INTO tbl1 values (?, ?, ?, ?, ?, ?, ?, ?, ?);
  30. ENDEMBED;
  31. // Add an additional row containing NULL values, to test that they are handled properly when read in ECL
  32. initializeNulls() := EMBED(mysql : user('rchapman'),database('test'))
  33. INSERT INTO tbl1 (name) values ('nulls');
  34. ENDEMBED;
  35. // Returning a dataset
  36. dataset(childrec) testMySQLDS() := EMBED(mysql : user('rchapman'),database('test'))
  37. SELECT * from tbl1;
  38. ENDEMBED;
  39. // Returning a single row
  40. childrec testMySQLRow() := EMBED(mysql : user('rchapman'),database('test'))
  41. SELECT * from tbl1 LIMIT 1;
  42. ENDEMBED;
  43. // Passing in parameters
  44. childrec testMySQLParms(
  45. string name,
  46. integer value,
  47. boolean boolval,
  48. real8 r8,
  49. real4 r4,
  50. DATA d,
  51. UTF8 u1,
  52. UNICODE8 u2) := EMBED(mysql : user('rchapman'),database('test'))
  53. SELECT * from tbl1 WHERE name=? AND value=? AND boolval=? AND r8=? AND r4=? AND d=? AND u1=? AND u2=?;
  54. ENDEMBED;
  55. // Returning scalars
  56. string testMySQLString() := EMBED(mysql : user('rchapman'),database('test'))
  57. SELECT max(name) from tbl1;
  58. ENDEMBED;
  59. dataset(childrec) testMySQLStringParam(string filter) := EMBED(mysql : user('rchapman'),database('test'))
  60. SELECT * from tbl1 where name = ?;
  61. ENDEMBED;
  62. integer testMySQLInt() := EMBED(mysql : user('rchapman'),database('test'))
  63. SELECT max(value) from tbl1;
  64. ENDEMBED;
  65. boolean testMySQLBool() := EMBED(mysql : user('rchapman'),database('test'))
  66. SELECT max(boolval) from tbl1;
  67. ENDEMBED;
  68. real8 testMySQLReal8() := EMBED(mysql : user('rchapman'),database('test'))
  69. SELECT max(r8) from tbl1;
  70. ENDEMBED;
  71. real4 testMySQLReal4() := EMBED(mysql : user('rchapman'),database('test'))
  72. SELECT max(r4) from tbl1;
  73. ENDEMBED;
  74. data testMySQLData() := EMBED(mysql : user('rchapman'),database('test'))
  75. SELECT max(d) from tbl1;
  76. ENDEMBED;
  77. UTF8 testMySQLUtf8() := EMBED(mysql : user('rchapman'),database('test'))
  78. SELECT max(u1) from tbl1;
  79. ENDEMBED;
  80. UNICODE testMySQLUnicode() := EMBED(mysql : user('rchapman'),database('test'))
  81. SELECT max(u2) from tbl1;
  82. ENDEMBED;
  83. // Passing in AND returning a dataset - this ends up acting a bit like a keyed join...
  84. stringrec := RECORD
  85. string name
  86. END;
  87. stringrec extractName(childrec l) := TRANSFORM
  88. SELF := l;
  89. END;
  90. dataset(childrec) testMySQLDSParam(dataset(stringrec) inrecs) := EMBED(mysql : user('rchapman'),database('test'))
  91. SELECT * from tbl1 where name = ?;
  92. ENDEMBED;
  93. sequential (
  94. drop(),
  95. create(),
  96. initialize(init),
  97. initializeNulls(),
  98. OUTPUT(testMySQLDS()),
  99. OUTPUT(testMySQLRow().name),
  100. OUTPUT(testMySQLParms('name1', 1, true, 1.2, 3.4, D'aa55aa55', U'Straße', U'Straße')),
  101. OUTPUT(testMySQLString()),
  102. OUTPUT(testMySQLStringParam(testMySqlString())),
  103. OUTPUT(testMySQLInt()),
  104. OUTPUT(testMySQLBool()),
  105. OUTPUT(testMySQLReal8()),
  106. OUTPUT(testMySQLReal4()),
  107. OUTPUT(testMySQLData()),
  108. OUTPUT(testMySQLUtf8()),
  109. OUTPUT(testMySQLUnicode()),
  110. OUTPUT(testMySQLDSParam(PROJECT(init, extractName(LEFT))))
  111. );