can you please email it to me as an attachment?
On May 18, 1:52 pm, dlypka <[email protected]> wrote:
> I have the following patch for the SQL Schema to web2py db schema
> conversion utility where the original code is at:
> http://mdp.cti.depaul.edu/AlterEgo/default/download/document.file.075...
>
> This patch corrects these auto.py issues:
>
> 1. spelling error: reponse.flash should be response.flash
> 2. Need to
> import sys
> 3. strip out CR LF and tabs using
> data = re.sub('[\f\n\r\t\v]', '', data)
> 4. item regular expression incorrectly picks up the next create onto
> the final field of first table
> Need to make it stop at the first ')' NOT the last ')' <------
> This is a major fix ----------------
> 5. data.tolower() loses the original case mix of the field names
>
> To Run: (example):
> python auto.py mySQLSchema.sql > mySQLSchema.py
>
> You must first prepare the input by manually removing any of:
>
> "[dbo]."
> "(255)" and similar lengths following varchar
> "ON [PRIMARY]"
> "USE [SomeTable]"
> "GO"
> "/****** Comments ******/"
> "-- Comments"
> "SET ANSI_NULLS ON"
> "SET QUOTED_IDENTIFIER ON"
> "ALTER TABLE [dbo].[mytable] WITH CHECK ADD CONSTRAINT [contraintname]
> FOREIGN KEY([field1]) REFERENCES [dbo].[othertable] ([otherfield])"
>
> The patch is to replace the "auto(data)" method with the following:
>
> ------------------------------------------------------------------------------------
> For Microsoft SQL Server where the keywords are typically UPPERCASE:
>
> def auto(data):
> regex1=re.compile('\s*(?P<name>\S+\s+\S+).*')
> data = re.sub('[\f\n\r\t\v\[\]]', '', data)
> tables={}
> output=''
> for item in re.compile('CREATE\s+TABLE\s+(?P<tablename>\S+)\s*\((?
> P<fields>[^\);]*)(\))+?;?').findall(data):
> tablename=item[0]
> fields=item[1]
> fields2=[regex1.match(i).group('name').split() for i in
> fields.split(',')]
> lastfieldtuple = fields2[-1:]
> if lastfieldtuple[0][0] == 'CONSTRAINT' : fields2 = fields2
> [:-1]
> sfields=''.join(["db.Field('%s','%s'),\n " % (k,convert(v))
> for k,v in fields2 if not k.lower() in ['INDEX','CONSTRAINT']])
> output+="db.define_table('%s',\n %smigrate='%s.mig')\n" %
> (tablename, sfields, tablename)
> tables[tablename]=[k for k,v in fields2]
> labels=','.join(["'%s':T('%s')"%(f,f) for f in tables
> [tablename]])
> output+='%s_labels={%s}\n\n' % (tablename,labels)
> tablenames=tables.keys()
> tablenames.sort()
> model=output
> output=''
> for tablename in tablenames:
> output+="""
>
> -----------------------------------------------------------------------------------------
>
> For other SQL Engines where the Keywords are typically lowercase:
>
> def auto(data):
> regex1=re.compile('\s*(?P<name>\S+\s+\S+).*')
> data = re.sub('[\f\n\r\t\v\[\]]', '', data)
> tables={}
> output=''
> for item in re.compile('create\s+table\s+(?P<tablename>\S+)\s*\((?
> P<fields>[^\);]*)(\))+?;?').findall(data):
> tablename=item[0]
> fields=item[1]
> fields2=[regex1.match(i).group('name').split() for i in
> fields.split(',')]
> lastfieldtuple = fields2[-1:]
> if lastfieldtuple[0][0] == 'constraint' : fields2 = fields2
> [:-1]
> sfields=''.join(["db.Field('%s','%s'),\n " % (k,convert(v))
> for k,v in fields2 if not k.lower() in ['index','constraint']])
> output+="db.define_table('%s',\n %smigrate='%s.mig')\n" %
> (tablename, sfields, tablename)
> tables[tablename]=[k for k,v in fields2]
> labels=','.join(["'%s':T('%s')"%(f,f) for f in tables
> [tablename]])
> output+='%s_labels={%s}\n\n' % (tablename,labels)
> tablenames=tables.keys()
> tablenames.sort()
> model=output
> output=''
> for tablename in tablenames:
> output+="""
> -----------------------------------------------------------------------------------------
> The following Microsoft SQL Server schema is an example which works:
>
> CREATE TABLE [TMoProject]
> (
> [dtCreated] [datetime] NOT NULL,
> [strProjectType] [varchar] NOT NULL,
> [nTMoProjectId] [int] NOT NULL,
> [strProjectDescription] [varchar] NOT NULL,
> [dtLastupdate] [datetime] NOT NULL,
> [strProjectName] [varchar] NOT NULL,
> CONSTRAINT [JDX_PK_TMoProject] PRIMARY KEY CLUSTERED
> (
> [nTMoProjectId] ASC
> ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
> IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
> ON [PRIMARY]
> )
>
> CREATE TABLE [TMoRegion]
> (
> [nTMoRegionId] [int] NOT NULL,
> [strRegionNameRendered] [varchar],
> [strRegionName] [varchar],
> [strRegionDescription] [varchar],
> CONSTRAINT [JDX_PK_TMoRegion] PRIMARY KEY CLUSTERED
> (
> [nTMoRegionId] ASC
> ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
> IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
> ON [PRIMARY]
> )
> ------------------------------------------------------------------------------------------------------------------
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---