Type.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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/HashMap.h>
  8. #include <AK/String.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, String, 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. S("array", 64, Array, int, sizeof(int))
  19. enum class SQLType {
  20. #undef __ENUMERATE_SQL_TYPE
  21. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) type = cardinal,
  22. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  23. #undef __ENUMERATE_SQL_TYPE
  24. };
  25. constexpr StringView SQLType_name(SQLType t)
  26. {
  27. switch (t) {
  28. #undef __ENUMERATE_SQL_TYPE
  29. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) \
  30. case SQLType::type: \
  31. return name##sv;
  32. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  33. #undef __ENUMERATE_SQL_TYPE
  34. default:
  35. VERIFY_NOT_REACHED();
  36. }
  37. }
  38. constexpr size_t size_of(SQLType t)
  39. {
  40. switch (t) {
  41. #undef __ENUMERATE_SQL_TYPE
  42. #define __ENUMERATE_SQL_TYPE(name, cardinal, type, impl, size) \
  43. case SQLType::type: \
  44. return size;
  45. ENUMERATE_SQL_TYPES(__ENUMERATE_SQL_TYPE)
  46. #undef __ENUMERATE_SQL_TYPE
  47. default:
  48. VERIFY_NOT_REACHED();
  49. }
  50. }
  51. #define ENUMERATE_ORDERS(S) \
  52. S(Ascending) \
  53. S(Descending)
  54. enum class Order {
  55. #undef __ENUMERATE_ORDER
  56. #define __ENUMERATE_ORDER(order) order,
  57. ENUMERATE_ORDERS(__ENUMERATE_ORDER)
  58. #undef __ENUMERATE_ORDER
  59. };
  60. constexpr StringView Order_name(Order order)
  61. {
  62. switch (order) {
  63. #undef __ENUMERATE_ORDER
  64. #define __ENUMERATE_ORDER(order) \
  65. case Order::order: \
  66. return #order##sv;
  67. ENUMERATE_ORDERS(__ENUMERATE_ORDER)
  68. #undef __ENUMERATE_ORDER
  69. default:
  70. VERIFY_NOT_REACHED();
  71. }
  72. }
  73. enum class Nulls {
  74. First,
  75. Last,
  76. };
  77. }