Skip to content

Commit

Permalink
Added a model.
Browse files Browse the repository at this point in the history
  • Loading branch information
wallymathieu committed Apr 8, 2012
1 parent 8b2d73c commit 7c0050e
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 27 deletions.
12 changes: 7 additions & 5 deletions Mejram.Analysis/frequency.rb
@@ -1,3 +1,5 @@
$:.unshift File.dirname(__FILE__)
require 'model'
require 'json'

class Counter
Expand All @@ -19,7 +21,7 @@ def to_hash
class Frequency
#attr
def initialize(text)
tables= JSON::parse(text)
tables= parse_json_to_tables(JSON::parse(text))
@tables = tables
end

Expand All @@ -30,11 +32,11 @@ def key_frequency
underscore = 0
non_underscore = 0
tablenames = @tables.map do |t|
t['TableName']
t.name
end
@tables.each do |t|
column_names = t['Columns'].map do |c|
c['ColumnName'].downcase()
column_names = t.columns.map do |c|
c.name.downcase()
end
matching_key =column_names.select do |n|
keys.index(n)
Expand All @@ -45,7 +47,7 @@ def key_frequency
elsif matching_key.length > 1
raise "! ambigous key"
elsif matching_key.length == 0
r = Regexp.new("#{t['TableName']}(_{,1})(\\w+)",Regexp::IGNORECASE)
r = Regexp.new("#{t.name}(_{,1})(\\w+)",Regexp::IGNORECASE)
matches = column_names.select do |c|
r.match(c)
end
Expand Down
25 changes: 25 additions & 0 deletions Mejram.Analysis/model.rb
@@ -0,0 +1,25 @@

class Table
attr_reader :name, :columns
def initialize(name, columns)
@name = name
@columns = columns
end
end

class Column
attr_reader :name
def initialize(name)
@name = name
end
end

def parse_json_to_tables(json)
return json.map do |table|
Table.new(table['TableName'],\
table['Columns'].map do |column|
Column.new(column['ColumnName'])
end)
end
end

33 changes: 17 additions & 16 deletions Mejram.Analysis/probableforeignkeys.rb
@@ -1,5 +1,6 @@
$:.unshift File.dirname(__FILE__)
require 'json'

require 'model'
class ProbableForeignKeysAnalysis
def initialize(table_prefixes=['tbl'], key_names=['id'])
@table_prefixes= table_prefixes
Expand Down Expand Up @@ -33,13 +34,13 @@ def columnHasKeyName(columnName)
end

def getKeyColumn(table)
tablename = tableNameTrim(table['TableName'])
tablename = tableNameTrim(table.name)

columns = table['Columns'].select do |c|
columnHasKeyName(c['ColumnName'])
columns = table.columns.select do |c|
columnHasKeyName(c.name)
end
withname = columns.select do |c|
columnExtractTableName(c['ColumnName']) == tablename
columnExtractTableName(c.name) == tablename
end
return withname.first
end
Expand All @@ -50,30 +51,30 @@ def parseJsonData(text,id)
count = 0
tables = {}
probable = []
jtables = JSON::parse(text)
jtables = parse_json_to_tables(JSON::parse(text))

jtables.each do |table|
tablename = tableNameTrim(table['TableName'])
tablename = tableNameTrim(table.name)
tables[tablename] = table
end

jtables.each do |table|
tablename = tableNameTrim(table['TableName'])
columns = table['Columns'].select do |c|
columnHasKeyName(c['ColumnName'])\
&& columnExtractTableName(c['ColumnName'])!=tablename
tablename = tableNameTrim(table.name)
columns = table.columns.select do |c|
columnHasKeyName(c.name)\
&& columnExtractTableName(c.name)!=tablename
end
columns.each do |column|
columntablename = columnExtractTableName(column['ColumnName'])
columntablename = columnExtractTableName(column.name)
if tables.has_key?(columntablename)
foreigntable = tables[columntablename]
foreigncolumn = getKeyColumn(foreigntable)['ColumnName']
foreigncolumn = getKeyColumn(foreigntable).name
probable.push({
'from'=>{
'table'=>table['TableName'],
'column'=>column['ColumnName']},
'table'=>table.name,
'column'=>column.name},
'to'=>{
'table'=>foreigntable['TableName'],
'table'=>foreigntable.name,
'column'=>foreigncolumn}
})
end
Expand Down
14 changes: 8 additions & 6 deletions Mejram.Analysis/relations.rb
@@ -1,18 +1,20 @@
$:.unshift File.dirname(__FILE__)
require 'model'
require 'json'
require 'rgl/adjacency'

class Relations
def parse_json_text(text)
jtables= JSON::parse(text)
jtables= parse_json_to_tables(JSON::parse(text))
relations = []
jtables.each do |table|
columns = table['Columns']
columns = table.columns
columns.select do |c|
c['ColumnName'].end_with?('id')
c.name.end_with?('id')
end.each do |c|
val = [c['TableName'].downcase,\
c['ColumnName'].gsub('_id','').downcase,\
c['ColumnName'].downcase\
val = [table.name.downcase,\
c.name.gsub(/_?id/,'').downcase,\
c.name.downcase\
]
relations.push val
end
Expand Down

0 comments on commit 7c0050e

Please sign in to comment.