Type.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/DeprecatedString.h>
  8. #include <AK/HashMap.h>
  9. #include <AK/StringView.h>
  10. namespace SQL {
  11. #define ENUMERATE_SQL_TYPES(S) \
  12. S("null", 1, Null, int, sizeof(int)) \
  13. S("text", 2, Text, DeprecatedString, 65 + sizeof(u32)) \
  14. S("int", 4, Integer, int, sizeof(int)) \
  15. S("float", 8, Float, double, sizeof(double)) \
  16. S("bool", 16, Boolean, bool, sizeof(bool)) \
  17. S("tuple", 32, Tuple, int, sizeof(int))
  18. enum class SQLType {
  19. #undef __ENUMERATE_SQL_TYPE
  20. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) type = cardinal,
  21. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  22. #undef __ENUMERATE_SQL_TYPE
  23. };
  24. constexpr StringView SQLType_name(SQLType t)
  25. {
  26. switch (t) {
  27. #undef __ENUMERATE_SQL_TYPE
  28. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) \
  29. case SQLType::type: \
  30. return name##sv;
  31. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  32. #undef __ENUMERATE_SQL_TYPE
  33. default:
  34. VERIFY_NOT_REACHED();
  35. }
  36. }
  37. constexpr size_t size_of(SQLType t)
  38. {
  39. switch (t) {
  40. #undef __ENUMERATE_SQL_TYPE
  41. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) \
  42. case SQLType::type: \
  43. return size;
  44. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  45. #undef __ENUMERATE_SQL_TYPE
  46. default:
  47. VERIFY_NOT_REACHED();
  48. }
  49. }
  50. #define ENUMERATE_ORDERS(S) \
  51. S(Ascending) \
  52. S(Descending)
  53. enum class Order {
  54. #undef __ENUMERATE_ORDER
  55. #define __ENUMERATE_ORDER(order) order,
  56. ENUMERATE_ORDERS(__ENUMERATE_ORDER)
  57. #undef __ENUMERATE_ORDER
  58. };
  59. constexpr StringView Order_name(Order order)
  60. {
  61. switch (order) {
  62. #undef __ENUMERATE_ORDER
  63. #define __ENUMERATE_ORDER(order) \
  64. case Order::order: \
  65. return #order##sv;
  66. ENUMERATE_ORDERS(__ENUMERATE_ORDER)
  67. #undef __ENUMERATE_ORDER
  68. default:
  69. VERIFY_NOT_REACHED();
  70. }
  71. }
  72. enum class Nulls {
  73. First,
  74. Last,
  75. };
  76. }