#!/usr/bin/python
"""Extract enough of a MySQL schema to support writing SELECT statements to get the database contents.

Parses ('parses') SQL output from mysqldump.

e.g.:

    mysqldump --skip-lock-tables -u drupal6 -pletmein drupal6 > drupal6.sql
    ./mysql-schema.py < drupal6.sql

"""
import re, sys

def parse_file(lines):
    current_table = current_fields = None
    all_tables = []
    
    for line in lines:
        mo = re.compile(r'CREATE TABLE `(.*)` \($').match(line)
        if mo:
            current_table = mo.group(1)
            current_fields = []
            continue
        
        if re.compile(r'\)(;| ENGINE=.*)$').match(line):
            all_tables.append((current_table, current_fields))
            current_table = current_fields = None
            continue

        if current_table:
            if re.compile(r'\s*PRIMARY KEY ').match(line): continue
            if re.compile(r'\s*KEY ').match(line): continue
            if re.compile(r'\s*FULLTEXT KEY ').match(line): continue
            if re.compile(r'\s*UNIQUE KEY ').match(line): continue
            mo = re.compile(r'\s*`(.*?)`').match(line)
            if not mo:
                print "could not match", `line`
            current_fields.append(mo.group(1))

    return all_tables

if __name__ == '__main__':
    print parse_file(sys.stdin)

