Advertisement
Guest User

Untitled

a guest
Apr 18th, 2015
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import json
  4.  
  5.  
  6. class ColumnInfo(object):
  7. data_types = {
  8. # 'string'
  9. 'char':'string',
  10. 'character':'string',
  11. 'varchar':'string',
  12. 'tinytext':'string',
  13. 'text':'string',
  14. 'mediumtext':'string',
  15. 'longtext':'string',
  16. # 'integer'
  17. 'tinyint':'integer',
  18. 'smallint':'integer',
  19. 'mediumint':'integer',
  20. 'integer':'integer',
  21. 'int':'integer',
  22. 'bigint':'integer',
  23. # 'float'
  24. 'float':'float',
  25. 'double':'float',
  26. 'real':'float',
  27. 'decimal':'float',
  28. 'fixed':'float',
  29. 'dec':'float',
  30. 'numeric':'float',
  31. # 'timestamp'
  32. 'date':'timestamp',
  33. 'datetime':'timestamp',
  34. 'timestamp':'timestamp',
  35. 'time':'timestamp',
  36. # 'boolean'
  37. 'bit':'boolean',
  38. 'bool':'boolean',
  39. 'boolean':'boolean',
  40. }
  41.  
  42. def __init__(self, name, typ, nullable):
  43. self.name = name.lower()
  44. self.typ = self.convert_type(typ)
  45. self.is_nullable = self.nullable(nullable)
  46.  
  47. def schema(self):
  48. return { "name": self.name,
  49. "type": self.typ.replace('timestamp', 'integer'),
  50. "mode": self.is_nullable }
  51.  
  52. def convert_type(self, original):
  53. return self.data_types.get(original.split('(')[0], None)
  54.  
  55. def nullable(self, is_nullable):
  56. return 'nullable' if is_nullable in ['YES','yes'] else 'required'
  57.  
  58. def query(self):
  59. if self.typ == 'timestamp':
  60. return '1000000*unix_timestamp(%(name)s) as %(name)s' % ({'t':self.name})
  61. return self.name
  62.  
  63.  
  64. class SchemaParser(object):
  65. def __init__(self, dest):
  66. self.dest = dest
  67.  
  68. def parse_schema(self, line):
  69. elements = line.strip().split('\t')
  70. info = ColumnInfo(*elements[0:3])
  71. return info.schema()
  72.  
  73. def parse_query(self, line):
  74. elements = line.strip().split('\t')
  75. info = ColumnInfo(*elements[0:3])
  76. return info.query()
  77.  
  78. def schema(self, fp):
  79. with fp:
  80. return json.dumps([self.parse_schema(line) for line in fp])
  81.  
  82. def query(self, fp):
  83. with fp:
  84. return ','.join([self.parse_query(line) for line in fp])
  85.  
  86. def run(self, fp):
  87. if self.dest == 'schema':
  88. return self.schema(fp)
  89. return self.query(fp)
  90.  
  91.  
  92. if __name__ == '__main__':
  93. dest = sys.argv[1]
  94. fp = sys.stdin
  95. parser = SchemaParser(dest)
  96. print(parser.run(fp))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement