schema_mysql_copy.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. // Copyright (C) 2012-2014 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. #ifndef SCHEMA_COPY_H
  15. #define SCHEMA_COPY_H
  16. namespace {
  17. // What follows is a set of statements that creates a copy of the schema
  18. // in the test database. It is used by the MySQL unit test prior to each
  19. // test.
  20. //
  21. // Each SQL statement is a single string. The statements are not terminated
  22. // by semicolons, and the strings must end with a comma. The final line
  23. // statement must be NULL (not in quotes)
  24. // NOTE: This file mirrors the schema in src/lib/dhcpsrv/dhcpdb_create.mysql.
  25. // If this file is altered, please ensure that any change is compatible
  26. // with the schema in dhcpdb_create.mysql.
  27. // Deletion of existing tables.
  28. const char* destroy_statement[] = {
  29. "DROP TABLE lease4",
  30. "DROP TABLE lease6",
  31. "DROP TABLE lease6_types",
  32. "DROP TABLE lease_hwaddr_source",
  33. "DROP TABLE schema_version",
  34. NULL
  35. };
  36. // Creation of the new tables.
  37. const char* create_statement[] = {
  38. // Schema initialization to 1.0 starts here.
  39. "START TRANSACTION",
  40. "CREATE TABLE lease4 ("
  41. "address INT UNSIGNED PRIMARY KEY NOT NULL,"
  42. "hwaddr VARBINARY(20),"
  43. "client_id VARBINARY(128),"
  44. "valid_lifetime INT UNSIGNED,"
  45. "expire TIMESTAMP,"
  46. "subnet_id INT UNSIGNED,"
  47. "fqdn_fwd BOOL,"
  48. "fqdn_rev BOOL,"
  49. "hostname VARCHAR(255)"
  50. ") ENGINE = INNODB",
  51. "CREATE INDEX lease4_by_hwaddr_subnet_id ON lease4 (hwaddr, subnet_id)",
  52. "CREATE INDEX lease4_by_client_id_subnet_id ON lease4 (client_id, subnet_id)",
  53. "CREATE TABLE lease6 ("
  54. "address VARCHAR(39) PRIMARY KEY NOT NULL,"
  55. "duid VARBINARY(128),"
  56. "valid_lifetime INT UNSIGNED,"
  57. "expire TIMESTAMP,"
  58. "subnet_id INT UNSIGNED,"
  59. "pref_lifetime INT UNSIGNED,"
  60. "lease_type TINYINT,"
  61. "iaid INT UNSIGNED,"
  62. "prefix_len TINYINT UNSIGNED,"
  63. "fqdn_fwd BOOL,"
  64. "fqdn_rev BOOL,"
  65. "hostname VARCHAR(255)"
  66. ") ENGINE = INNODB",
  67. "CREATE INDEX lease6_by_iaid_subnet_id_duid ON lease6 (iaid, subnet_id, duid)",
  68. "CREATE TABLE lease6_types ("
  69. "lease_type TINYINT PRIMARY KEY NOT NULL,"
  70. "name VARCHAR(5)"
  71. ")",
  72. "INSERT INTO lease6_types VALUES (0, \"IA_NA\")",
  73. "INSERT INTO lease6_types VALUES (1, \"IA_TA\")",
  74. "INSERT INTO lease6_types VALUES (2, \"IA_PD\")",
  75. "CREATE TABLE schema_version ("
  76. "version INT PRIMARY KEY NOT NULL,"
  77. "minor INT"
  78. ")",
  79. "INSERT INTO schema_version VALUES (1, 0)",
  80. "COMMIT",
  81. // Schema initialization to 1.0 ends here.
  82. // Schema upgrade to 2.0 starts here.
  83. "ALTER TABLE lease6 "
  84. "ADD COLUMN hwaddr varbinary(20),"
  85. "ADD COLUMN hwtype smallint unsigned,"
  86. "ADD COLUMN hwaddr_source int unsigned;",
  87. // Production schema has lease_hwaddr_source table. It is not used by
  88. // kea code and is simply useful for formulating more human readable
  89. // queries. Hence no need to create it in tests. The actual SQL
  90. // code remains here commented out to keep a trace that the omission
  91. // is intentional.
  92. /* "CREATE TABLE lease_hwaddr_source ("
  93. "hwaddr_source INT PRIMARY KEY NOT NULL,"
  94. "name VARCHAR(40) )",
  95. "INSERT INTO lease_hwaddr_source VALUES (1, \"HWADDR_SOURCE_RAW\");",
  96. "INSERT INTO lease_hwaddr_source VALUES (2, \"HWADDR_SOURCE_IPV6_LINK_LOCAL\");",
  97. "INSERT INTO lease_hwaddr_source VALUES (4, \"HWADDR_SOURCE_DUID\");",
  98. "INSERT INTO lease_hwaddr_source VALUES (8, \"HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION\");",
  99. "INSERT INTO lease_hwaddr_source VALUES (16, \"HWADDR_SOURCE_REMOTE_ID\");",
  100. "INSERT INTO lease_hwaddr_source VALUES (32, \"HWADDR_SOURCE_SUBSCRIBER_ID\");",
  101. "INSERT INTO lease_hwaddr_source VALUES (64, \"HWADDR_SOURCE_DOCSIS\");", */
  102. "UPDATE schema_version SET version=\"2\", minor=\"0\";",
  103. // Schema upgrade to 2.0 ends here.
  104. // Schema upgrade to 4.0 starts here.
  105. "ALTER TABLE lease4 "
  106. "ADD COLUMN state INT UNSIGNED DEFAULT 0",
  107. "ALTER TABLE lease6 "
  108. "ADD COLUMN state INT UNSIGNED DEFAULT 0",
  109. "CREATE INDEX lease4_by_state_expire ON lease4 (state, expire)",
  110. "CREATE INDEX lease6_by_state_expire ON lease6 (state, expire)",
  111. // Schema upgrade to 4.0 ends here.
  112. NULL
  113. };
  114. }; // Anonymous namespace
  115. #endif // SCHEMA_COPY_H