#DEFINE DATABASE_NAME [UICDI] #DEFINE VFP_CRLF CHR(13) + CHR(10) #DEFINE CLEAR CLOSE ALL SET TALK OFF SET EXCLUSIVE OFF SET DELETED ON SET SAFETY OFF IF NOT DIRECTORY('.\Scripts') MD .\Scripts ENDIF LOCAL loUpsize loUpsize = CREATEOBJECT('Upsize') WITH loUpsize .Cr8_Tables() .Cr8_Sequences() .Cr8_Triggers() ENDWITH loUpsize.Release() RETURN DEFINE CLASS Upsize AS Custom DIMENSION aTables[1] nTableCount = 0 PROTECTED PROCEDURE Init OPEN DATABASE DATABASE_NAME SET DATABASE TO DATABASE_NAME THIS.nTableCount = ADBOBJECTS(THIS.aTables,[TABLE]) ASORT(THIS.aTables) ENDPROC PROCEDURE Release RELEASE THIS ENDPROC PROTECTED PROCEDURE Error(nError, cMethod, nLine) ENDPROC PROCEDURE Cr8_Sequences LOCAL lcString lcString = [] FOR EACH lcTable IN THIS.aTables lcTable = ALLTRIM(crsTables.Table_Name) lcString = lcString + [CREATE SEQUENCE S_] + lcTable ; + [ START WITH 1 INCREMENT BY 1;] + VFP_CRLF ENDFOR STRTOFILE(lcString, [.\Scripts\Cr8_Sequences.sql]) ENDPROC PROCEDURE Cr8_Triggers LOCAL lcTable, lcString lcString = [] FOR EACH lcTable IN THIS.aTables TEXT TO lcSQL TEXTMERGE NOSHOW CREATE OR REPLACE TRIGGER <<lcTable>>_B4_INSUPDT before insert or update on UICDI.<<lcTable>> for each row declare v_Id Number; BEGIN :new.Last_Update := SYSDATE; If :new.Updated_By is NULL Then :new.Updated_By := USER; End If; If :new.KeyID is NULL or :new.KeyID < 1 Then select S_UICDI_<<lcTable>>.nextval into v_Id from dual; :new.KeyID := v_Id; End If; End; / ENDTEXT lcString = lcString + lcSQL ENDSCAN STRTOFILE(lcString, [.\Scripts\Cr8_Triggers.SQL]) ENDPROC PROCEDURE Cr8_Tables LOCAL lcString, lcTable, laFields[1], lnFields, lnI LOCAL lcField, lcType, lnWidth, lnDec, luDefault lcString = [] FOR EACH lcTable IN THIS.aTables USE (lcTable) lnFields = AFIELDS(laFields, lcTable) lcString = lcString + [CREATE TABLE ] + lcTable + VFP_CRLF + [ (] FOR lnI = 1 TO lnFields lcField = laFields[lnI, 1] lcType = laFields[lnI, 2] lnWidth = laFields[lnI, 3] lnDec = laFields[lnI, 4] luDefault = IIF(not EMPTY(laFields[lnI,9]), EVALUATE(laFields[lnI, 9]), []) IF lcField = [KEYID] luDefault = [] ENDIF IF RIGHT(lcString, 1) = [,] lcString = lcString + VFP_CRLF + [ ] ENDIF lcString = lcString + lcField DO CASE CASE INLIST(lcType, [C], [V]) lcString = lcString + [ VARCHAR2(] ; + TRANSFORM(lnWidth) ; + [)] IF NOT EMPTY(luDefault) lcString = lcString + [ DEFAULT '] + luDefault + ['] ENDIF CASE lcType = [I] lcString = lcString + [ NUMBER(8)] IF NOT EMPTY(luDefault) lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault) ENDIF IF lcField = [KEYID] lcString = lcString + [ CONSTRAINT pk_] + lcTable + [_KeyID PRIMARY KEY] ENDIF CASE lcType = [N] lcString = lcString + [ NUMBER(] ; + TRANSFORM(lnWidth) ; + [,] + TRANSFORM(lnDec) ; + [)] IF NOT EMPTY(luDefault) lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault) ENDIF CASE lcType = [L] lcString = lcString + [ NUMBER(1)] IF NOT EMPTY(luDefault) AND luDefault lcString = lcString + [ DEFAULT 1 ] ELSE lcString = lcString + [ DEFAULT 0 ] ENDIF lcString = lcString + [ CONSTRAINT ck_] + lcTable + [_] + laFields[lnI, 1] + [ CHECK (] + lcField + [ BETWEEN 0 and 1)] CASE lcType = [M] lcString = lcString + [ LONG] CASE INLIST(lcType, [D], [T]) lcString = lcString + [ DATE] IF NOT EMPTY(luDefault) lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault) ENDIF ENDCASE lcString = lcString + [,] ENDFOR CLOSE TABLES ALL IF ASCAN(laFields, 'LAST_UPDATE', -1, -1, 1, 1) = 0 lcString = lcString + VFP_CRLF + [ LAST_UPDATE DATE DEFAULT SYSDATE,] ENDIF IF ASCAN(laFields, 'UPDATED_BY', -1, -1, 1, 1) = 0 lcString = lcString + VFP_CRLF + [ UPDATED_BY VARCHAR2(20),] ENDIF lcString = lcString + [);] + VFP_CRLF + VFP_CRLF ENDFOR lcString = STRTRAN(lcString, [,);], [);]) STRTOFILE(lcString, '.\Scripts\Cr8_Tables.sql') ENDPROC ENDDEFINE