Вход Регистрация
Файл: include/adodb/replicate/test-tnb.php
Строк: 407
<?php
include_once('../adodb.inc.php');
include_once(
'adodb-replicate.inc.php');

set_time_limit(0);

function 
IndexFilter($dtable$idxname,$flds,$options)
{
    if (
strlen($idxname) > 28$idxname substr($idxname,0,24).rand(1000,9999);
    return 
$idxname;
}

function 
SelFilter($table, &$arr$delfirst)
{
    return 
true;
}

function 
updatefilter($table$fld$val)
{
    return 
"nvl($fld$val)";
}


function 
FieldFilter(&$fld,$mode)
{
    
$uf strtoupper($fld);
    switch(
$uf) {
        case 
'SIZEFLD':
            return 
'Size';

        case 
'GROUPFLD':
            return 
'Group';

        case 
'GROUP':
            if (
$mode == 'SELECT'$fld '"Group"';
            return 
'GroupFld';
        case 
'SIZE':
            if (
$mode == 'SELECT'$fld '"Size"';
            return 
'SizeFld';
    }
    return 
$fld;
}

function 
ParseTable(&$table, &$pkey)
{
    
$table trim($table);
    if (
strlen($table) == 0) return false;
    if (
strpos($table'#') !== false) {
        
$at strpos($table'#');
        
$table trim(substr($table,0,$at));
        if (
strlen($table) == 0) return false;
    }

    
$tabarr explode(',',$table);
    if (
sizeof($tabarr) == 1) {
        
$table $tabarr[0];
        
$pkey '';
        echo 
"No primary key for $table ****  **** <br>";
    } else {
        
$table trim($tabarr[0]);
        
$pkey trim($tabarr[1]);
        if (
strpos($pkey,' ') !== false) echo "Bad PKEY for $table $pkey<br>";
    }

    return 
true;
}

global 
$TARR;

function 
TableStats($rep$table$pkey)
{
global 
$TARR;

    if (empty(
$TARR)) $TARR = array();
    
$cnt $rep->connSrc->GetOne("select count(*) from $table");
    if (isset(
$TARR[$table])) echo "<h1>Table $table repeated twice</h1>";
    
$TARR[$table] = $cnt;

    if (
$pkey) {
        
$ok $rep->connSrc->SelectLimit("select $pkey from $table",1);
        if (!
$ok) echo "<h1>$table$pkey does not exist</h1>";
    } else
        echo 
"<h1>$table: no primary key</h1>";
}

function 
CreateTable($rep$table)
{
## CREATE TABLE
    #$DB2->Execute("drop table $table");

    
$rep->execute true;
    
$ok $rep->CopyTableStruct($table);
    if (
$ok) echo "Table Created<br>n";
    else {
        echo 
"<hr>Error: Cannot Create Table<hr>n";
    }
    
flush();@ob_flush();
}

function 
CopyData($rep$table$pkey)
{
    
$dtable $table;

    
$rep->execute true;
    
$rep->deleteFirst true;

    
$secs time();
    
$rows $rep->ReplicateData($table,$dtable,array($pkey));
    
$secs time() - $secs;
    if (!
$rows || !$rows[0] || !$rows[1] || $rows[1] != $rows[2]+$rows[3]) {
        echo 
"<hr>Error: "var_dump($rows);  echo " (secs=$secs) <hr>n";
    } else
        echo 
date('H:i:s'),': ',$rows[1]," record(s) copied, ",$rows[2]," inserted, ",$rows[3]," updated (secs=$secs)<br>n";
    
flush();@ob_flush();
}

function 
MergeDataJohnTest($rep$table$pkey)
{
    
$rep->SwapDBs();

    
$dtable $table;
    
$rep->oracleSequence 'LGBSEQUENCE';

#    $rep->MergeSrcSetup($table, array($pkey),'UpdatedOn','CopiedFlag');
    
if (strpos($rep->connDest->databaseType,'mssql') !== false)  {  # oracle ==> mssql
        
$ignoreflds = array($pkey);
        
$ignoreflds[] = 'MSSQL_ID';
        
$set 'MSSQL_ID=nvl($INSERT_ID,MSSQL_ID)';
        
$pkeyarr = array(array($pkey),false,array('MSSQL_ID'));# array('MSSQL_ID', 'ORA_ID'));
    
} else {  # mssql ==> oracle
        
$ignoreflds = array($pkey);
        
$ignoreflds[] = 'ORA_ID';
        
$set '';
        
#$set = 'ORA_ID=isnull($INSERT_ID,ORA_ID)';
        
$pkeyarr = array(array($pkey),array('MSSQL_ID'));
    }
    
$rep->execute true;
    
#$rep->updateFirst = false;
    
$ok $rep->Merge($table$dtable$pkeyarr$ignoreflds$set'UpdatedOn','CopiedFlag',array('Y','N','P','='), 'CopyDate');
    
var_dump($ok);

    
#$rep->connSrc->Execute("update JohnTest set name='Apple' where id=4");
}

$DB ADONewConnection('odbtp');
#$ok = $DB->Connect('localhost','root','','northwind');
$ok $DB->Connect('192.168.0.1','DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=natsoft;DATABASE=OIR;','','');
$DB->_bindInputArray false;

$DB2 ADONewConnection('oci8');
$ok2 $DB2->Connect('192.168.0.2','tnb','natsoft','RAPTOR','');

if (!
$ok || !$ok2) die("Failed connection DB=$ok DB2=$ok2<br>");

$tables =
"
JohnTest,id
"
;

# net* are ERMS, need last updated field from LGBnet
# tblRep* are tables insert or update from Juris, need last updated field also
# The rest are lookup tables, can copy all from LGBnet

$tablesOrig =
"
SysVoltSubLevel,id
# Lookup table for Restoration Details screen
sysefi,ID # (not identity)
sysgenkva,ID #(not identity)
sysrestoredby,ID  #(not identity)
# Sel* table added on 24 Oct
SELSGManufacturer,ID
SelABCCondSizeLV,ID
SelABCCondSizeMV,ID
SelArchingHornSize,ID
SelBallastSize,ID
SelBallastType,ID
SelBatteryType,ID #(not identity)
SelBreakerCapacity,ID
SelBreakerType,ID #(not identity)
SelCBreakerManuf,ID
SelCTRatio,ID #(not identity)
SelCableBrand,ID
SelCableSize,ID
SelCableSizeLV,ID # (not identity)
SelCapacitorSize,ID
SelCapacitorType,ID
SelColourCode,ID
SelCombineSealingChamberSize,ID
SelConductorBrand,ID
SelConductorSize4,ID
SelConductorSizeLV,ID
SelConductorSizeMV,ID
SelContactorSize,ID
SelContractor,ID
SelCoverType,ID
SelCraddleSize,ID
SelDeadEndClampBrand,ID
SelDeadEndClampSize,ID
SelDevTermination,ID
SelFPManuf,ID
SelFPillarRating,ID
SelFalseTrue,ID
SelFuseManuf,ID
SelFuseType,ID
SelIPCBrand,ID
SelIPCSize,ID
SelIgnitorSize,ID
SelIgnitorType,ID
SelInsulatorBrand,ID
SelJoint,ID
SelJointBrand,ID
SelJunctionBoxBrand,ID
SelLVBoardBrand,ID
SelLVBoardSize,ID
SelLVOHManuf,ID
SelLVVoltage,ID
SelLightningArresterBrand,ID
SelLightningShieldwireSize,ID
SelLineTapSize,ID
SelLocation,ID
SelMVVoltage,ID
SelMidSpanConnectorsSize,ID
SelMidSpanJointSize,ID
SelNERManuf,ID
SelNERType,ID
SelNLinkSize,ID
SelPVCCondSizeLV,ID
SelPoleBrand,ID
SelPoleConcreteSize,ID
SelPoleSize,ID
SelPoleSpunConcreteSize,ID
SelPoleSteelSize,ID
SelPoleType,ID
SelPoleWoodSize,ID
SelPorcelainFuseSize,ID
SelRatedFaultCurrentBreaker,ID
SelRatedVoltageSG,ID #(not identity)
SelRelayType,ID # (not identity)
SelResistanceValue,ID
SelSGEquipmentType,ID  # (not identity)
SelSGInsulationType,ID # (not identity)
SelSGManufacturer,ID
SelStayInsulatorSize,ID
SelSuspensionClampBrand,ID
SelSuspensionClampSize,ID
SelTSwitchType,ID
SelTowerType,ID
SelTransformerCapacity,ID
SelTransformerManuf,ID
SelTransformerType,ID #(not identity)
SelTypeOfArchingHorn,ID
SelTypeOfCable,ID     #(not identity)
SelTypeOfConductor,ID # (not identity)
SelTypeOfInsulationCB,ID # (not identity)
SelTypeOfMidSpanJoint,ID
SelTypeOfSTJoint,ID
SelTypeSTCable,ID
SelUGVoltage,ID # (not identity)
SelVoltageInOut,ID
SelWireSize,ID
SelWireType,ID
SelWonpieceBrand,ID
#
# Net* tables added on 24 Oct
NetArchingHorn,Idx
NetBatteryBank,Idx # identity, FunctLocation Pri
NetBiMetal,Idx
NetBoxFuse,Idx
NetCable,Idx # identity, FunctLocation Pri
NetCapacitorBank,Idx # identity, FunctLocation Pri
NetCircuitBreaker,Idx # identity, FunctLocation Pri
NetCombineSealingChamber,Idx
NetCommunication,Idx
NetCompInfras,Idx
NetControl,Idx
NetCraddle,Idx
NetDeadEndClamp,Idx
NetEarthing,Idx
NetFaultIndicator,Idx
NetFeederPillar,Idx # identity, FunctLocation Pri
NetGenCable,Idx # identity , FunctLocation Not Null
NetGenerator,Idx
NetGrid,Idx
NetHVOverhead,Idx #identity, FunctLocation Pri
NetHVUnderground,Idx #identity, FunctLocation Pri
NetIPC,Idx
NetInductorBank,Idx
NetInsulator,Idx
NetJoint,Idx
NetJunctionBox,Idx
NetLVDB,Idx #identity, FunctLocation Pri
NetLVOverhead,Idx
NetLVUnderground,Idx # identity, FunctLocation Not Null
NetLightningArrester,Idx
NetLineTap,Idx
NetMidSpanConnectors,Idx
NetMidSpanJoint,Idx
NetNER,Idx # identity , FunctLocation Pri
NetOilPump,Idx
NetOtherComponent,Idx
NetPole,Idx
NetRMU,Idx # identity, FunctLocation Pri
NetStreetLight,Idx
NetStrucSupp,Idx
NetSuspensionClamp,Idx
NetSwitchGear,Idx # identity, FunctLocation Pri
NetTermination,Idx
NetTransition,Idx
NetWonpiece,Idx
#
# comment1
SelMVFuseType,ID
selFuseSize,ID
netRelay,Idx # identity, FunctLocation Pri
SysListVolt,ID
sysVoltLevel,ID_SVL
sysRestoration,ID_SRE
sysRepairMethod,ID_SRM # (not identity)

sysInterruptionType,ID_SIN
netTransformer,Idx # identity, FunctLocation Pri
#
#
sysComponent,ID_SC
sysCodecibs #-- no idea, UpdatedOn(the only column is unique),Ermscode,Cibscode is unique but got null value
sysCodeno,id
sysProtection,ID_SP
sysEquipment,ID_SEQ
sysAddress #-- no idea, ID_SAD(might be auto gen No)
sysWeather,ID_SW
sysEnvironment,ID_SE
sysPhase,ID_SPH
sysFailureCause,ID_SFC
sysFailureMode,ID_SFM
SysSchOutageMode,ID_SSM
SysOutageType,ID_SOT
SysInstallation,ID_SI
SysInstallationCat,ID_SIC
SysInstallationType,ID_SIT
SysFaultCategory,ID_SF #(not identity)
SysResponsible,ID_SR
SysProtectionOperation,ID_SPO #(not identity)
netCodename,CodeNo #(not identity)
netSubstation,Idx #identity, FunctLocation Pri
netLvFeeder,Idx # identity, FunctLocation Pri
#
#
tblReport,ReportNo
tblRepRestoration,ID_RR
tblRepResdetail,ID_RRD
tblRepFailureMode,ID_RFM
tblRepFailureCause,ID_RFC
tblRepRepairMethod,ReportNo # (not identity)
tblInterruptionType,ID_TIN
tblProtType,ID_PT #--capital letter
tblRepProtection,ID_RP
tblRepComponent,ID_RC
tblRepWeather,ID_RW
tblRepEnvironment,ID_RE
tblRepSubstation,ID_RSS
tblInstallationType,ID_TIT
tblInstallationCat,ID_TIC
tblFailureCause,ID_TFC
tblFailureMode,ID_TFM
tblProtection,ID_TP
tblComponent,ID_TC
tblProtdetail,Id # (Id)--capital letter for I
tblInstallation,ID_TI
#
"
;


$tables explode("n",$tables);

$rep = new ADODB_Replicate($DB,$DB2);
$rep->fieldFilter 'FieldFilter';
$rep->selFilter 'SELFILTER';
$rep->indexFilter 'IndexFilter';

if (
1) {
    
$rep->debug 1;
    
$DB->debug=1;
    
$DB2->debug=1;
}

#    $rep->SwapDBs();

$cnt sizeof($tables);
foreach(
$tables as $k => $table) {
    
$pkey '';
    if (!
ParseTable($table$pkey)) continue;

    
#######################

    
$kcnt $k+1;
    echo 
"<h1>($kcnt/$cnt$table -- $pkey</h1>n";
    
flush();@ob_flush();

    
CreateTable($rep,$table);


    
# COPY DATA


    
TableStats($rep$table$pkey);

    if (
$table == 'JohnTest'MergeDataJohnTest($rep$table$pkey);
    else 
CopyData($rep$table$pkey);

}


if (!empty(
$TARR)) {
    
ksort($TARR);
    
adodb_pr($TARR);
    
asort($TARR);
    
adodb_pr($TARR);
}

echo 
"<hr>",date('H:i:s'),": Done</hr>";
Онлайн: 1
Реклама