Няма описание
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # -*- coding: utf8 -*-
  2. from Lodel.settings import Settings
  3. common_tables = {
  4. 'relation': 'relation',
  5. 'object': 'object'
  6. }
  7. table_preffix = {
  8. 'relation': 'rel_',
  9. 'object': 'class_',
  10. }
  11. ## @brief indicates if we want ON DELETE CASCADE on foreign keys
  12. # @todo implementation in migration handler
  13. fk_on_delete_cascade = False
  14. ## @brief Lodel_id for the hierachy root
  15. leroot_lodel_id = 0
  16. ## @brief Return a table name given a EmClass or LeClass name
  17. # @param class_name str : The class name
  18. # @return a table name
  19. def object_table_name(class_name):
  20. return ("%s%s" % (table_preffix['object'], class_name)).lower()
  21. ## @brief Return a table name given a class name and a type name
  22. # @param class_name str : The (Em|Le)Class name
  23. # @param type_name str : The (Em|Le)Type name
  24. # @return a table name
  25. def r2t_table_name(class_name, type_name):
  26. return ("%s%s_%s" % (table_preffix['relation'], class_name, type_name)).lower()
  27. def multivalue_table_name(referenced_table_name, key_name):
  28. return ("%s%s" % (key_name, referenced_table_name))
  29. ## @brief Return a column name given a field name
  30. # @param field_name : The EmField or LeObject field name
  31. # @return A column name
  32. def column_name(field_name):
  33. return field_name.lower()
  34. ## @brief gets the fk name between two tables
  35. # @param src_table_name str
  36. # @param dst_table_name str
  37. # @return str
  38. def get_fk_name(src_table_name, dst_table_name):
  39. return ("fk_%s_%s" % (src_table_name, dst_table_name)).lower()
  40. ## @brief Exec a query
  41. # @param connection : Db connection (has returned by dbmodule.connect())
  42. # @param query_string str : SQL query
  43. def query(connection, query_string):
  44. if Settings.debug_sql:
  45. print("SQL : ", query_string)
  46. with connection as cur:
  47. try:
  48. cur.execute(query_string)
  49. except Exception as err:
  50. raise err
  51. return cur
  52. ## @brief Identifier escaping
  53. # @param idname str : An SQL identifier
  54. def escape_idname(idname):
  55. if '`' in idname:
  56. raise ValueError("Invalid name : '%s'" % idname)
  57. return '`%s`' % idname
  58. ## Brief add table prefix to a column name
  59. # @param name string: column name to prefix
  60. # @param prefixes dict(prefix:list(name,))
  61. # @return prefixed_name string: the name prefixed
  62. # find the same name in some list of names, prepend the key of the dict to the name
  63. def find_prefix(name, prefixes):
  64. for prefix, names in prefixes:
  65. if name in names:
  66. return column_prefix(prefix, name)
  67. return name
  68. ## prefix a column name with the table name
  69. def column_prefix(table, column):
  70. return '%s.%s' % (table, column)