mysql-simple.ecl 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. // Note that the default values specified in the fields will be used when a NULL value is being
  7. // returned from MySQL
  8. childrec := RECORD
  9. string name,
  10. integer4 value { default(99999) },
  11. boolean boolval { default(true) },
  12. real8 r8 {default(99.99)},
  13. real4 r4 {default(999.99)},
  14. DATA d {default (D'999999')},
  15. DECIMAL10_2 ddd {default(9.99)},
  16. UTF8 u1 {default(U'9999 ß')},
  17. UNICODE8 u2 {default(U'9999 ßßßß')}
  18. END;
  19. // Some data we will use to initialize the MySQL table
  20. init := DATASET([{'name1', 1, true, 1.2, 3.4, D'aa55aa55', 1234567.89, U'Straße', U'Straße'},
  21. {'name2', 2, false, 5.6, 7.8, D'00', -1234567.89, U'là', U'là'}], childrec);
  22. // Set up the MySQL database
  23. // Enable remote access to your MySQL DB Server to use its DNS name or IP, else use localhost or 127.0.0.1
  24. // If port argument is omitted, it defaults to 3306
  25. drop() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  26. DROP TABLE IF EXISTS tbl1;
  27. ENDEMBED;
  28. create() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  29. 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) );
  30. ENDEMBED;
  31. // Initialize the MySQL table, passing in the ECL dataset to provide the rows
  32. initialize(dataset(childrec) values) := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  33. INSERT INTO tbl1 values (?, ?, ?, ?, ?, ?, ?, ?, ?);
  34. ENDEMBED;
  35. // Add an additional row containing NULL values, to test that they are handled properly when read in ECL
  36. initializeNulls() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  37. INSERT INTO tbl1 (name) values ('nulls');
  38. ENDEMBED;
  39. // Note that the query string is encoded in utf8
  40. initializeUtf8() := EMBED(mysql : user('rchapman'),database('test'))
  41. INSERT INTO tbl1 values ('utf8test', 1, 1, 1.2, 3.4, 'aa55aa55', 1234567.89, 'Straße', 'Straße');
  42. ENDEMBED;
  43. // Returning a dataset
  44. dataset(childrec) testMySQLDS() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  45. SELECT * from tbl1;
  46. ENDEMBED;
  47. // Returning a single row
  48. childrec testMySQLRow() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  49. SELECT * from tbl1 LIMIT 1;
  50. ENDEMBED;
  51. // Passing in parameters
  52. childrec testMySQLParms(
  53. string name,
  54. integer value,
  55. boolean boolval,
  56. real8 r8,
  57. real4 r4,
  58. DATA d,
  59. UTF8 u1,
  60. UNICODE8 u2) := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  61. SELECT * from tbl1 WHERE name=? AND value=? AND boolval=? AND r8=? AND r4=? AND d=? AND u1=? AND u2=?;
  62. ENDEMBED;
  63. // Returning scalars
  64. string testMySQLString() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  65. SELECT max(name) from tbl1;
  66. ENDEMBED;
  67. dataset(childrec) testMySQLStringParam(string filter) := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  68. SELECT * from tbl1 where name = ?;
  69. ENDEMBED;
  70. integer testMySQLInt() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  71. SELECT max(value) from tbl1;
  72. ENDEMBED;
  73. boolean testMySQLBool() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  74. SELECT max(boolval) from tbl1;
  75. ENDEMBED;
  76. real8 testMySQLReal8() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  77. SELECT max(r8) from tbl1;
  78. ENDEMBED;
  79. real4 testMySQLReal4() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  80. SELECT max(r4) from tbl1;
  81. ENDEMBED;
  82. data testMySQLData() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  83. SELECT max(d) from tbl1;
  84. ENDEMBED;
  85. UTF8 testMySQLUtf8() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  86. SELECT max(u1) from tbl1;
  87. ENDEMBED;
  88. UNICODE testMySQLUnicode() := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  89. SELECT max(u2) from tbl1;
  90. ENDEMBED;
  91. // Passing in AND returning a dataset - this ends up acting a bit like a keyed join...
  92. stringrec := RECORD
  93. string name
  94. END;
  95. stringrec extractName(childrec l) := TRANSFORM
  96. SELF := l;
  97. END;
  98. dataset(childrec) testMySQLDSParam(dataset(stringrec) inrecs) := EMBED(mysql : user('rchapman'),database('test'),server('127.0.0.1'), port('3306'))
  99. SELECT * from tbl1 where name = ?;
  100. ENDEMBED;
  101. sequential (
  102. drop(),
  103. create(),
  104. initialize(init),
  105. initializeNulls(),
  106. initializeUtf8(),
  107. OUTPUT(testMySQLDS()),
  108. OUTPUT(testMySQLRow().name),
  109. OUTPUT(testMySQLParms('name1', 1, true, 1.2, 3.4, D'aa55aa55', U'Straße', U'Straße')),
  110. OUTPUT(testMySQLString()),
  111. OUTPUT(testMySQLStringParam(testMySqlString())),
  112. OUTPUT(testMySQLInt()),
  113. OUTPUT(testMySQLBool()),
  114. OUTPUT(testMySQLReal8()),
  115. OUTPUT(testMySQLReal4()),
  116. OUTPUT(testMySQLData()),
  117. OUTPUT(testMySQLUtf8()),
  118. OUTPUT(testMySQLUnicode()),
  119. OUTPUT(testMySQLDSParam(PROJECT(init, extractName(LEFT))))
  120. );