mysql-simple.ecl 4.7 KB

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