WinMerge에서 SQLite를 비교하는 방법

이 문서에서는 WinMerge를 사용하여 SQLite를 비교하는 방법에 대해 설명합니다.

도입 방법



1. SQLite용 ODBC를 설치합니다.
h tp // w w. ch ぇ r네 r. 에 / sq

다음 중 하나 또는 모두 설치하십시오.

sqliteodbc.exe
sqliteodbc_w64.exe

2. 다음과 유사한 파일 만들기

SqliteToText.sct
<scriptlet>

<implements type="Automation" id="dispatcher">
    <property name="PluginEvent">
              <get/>
        </property>
    <property name="PluginDescription">
              <get/>
        </property>
    <property name="PluginFileFilters">
              <get/>
        </property>
    <property name="PluginIsAutomatic">
              <get/>
        </property>
        <method name="UnpackFile"/>
        <method name="PackFile"/>
</implements>

<script language="VBS">
Option Explicit

Function get_PluginEvent()
         get_PluginEvent = "FILE_PACK_UNPACK"
End Function

Function get_PluginDescription()
         get_PluginDescription = "SqliteToText"
End Function

Function get_PluginFileFilters()
         get_PluginFileFilters = "\.sqlite(\..*)?$;\.sqlite3(\..*)?$;\.db(\..*)?$"
End Function

Function get_PluginIsAutomatic()
         get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
    Dim cnn
    Dim Filename
    Dim rs
    Dim i
    Dim tableNameDict
    Dim name
    Dim fso
    Dim fo

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fo = fso.CreateTextFile(fileDst, True)

    Set cnn = CreateObject("ADODB.Connection")
    cnn.CursorLocation = 3 '
    FileName = "test.sqlite"
    cnn.Open "DRIVER=SQLite3 ODBC Driver;Database=" & fileSrc & ";"

    Set rs = cnn.Execute("SELECT * FROM sqlite_master;")
    i = 0

    rs.MoveFirst
    Do While Not rs.EOF
        name = rs.Fields("Name").Value
        fo.WriteLine "[" & name & "]"
        fo.WriteLine rs.Fields("sql").Value
        If rs.Fields("Type").Value = "table" Then
            call showTable(fo, cnn , name)
        End if
        rs.MoveNext
        i = i + 1
    Loop 

    rs.Close
    Set rs = Nothing


    cnn.Close
    Set cnn = Nothing

    fo.Close
    Set fo = Nothing
    Set fso = Nothing

    pbChanged = True
    pSubcode = 0
    UnpackFile = True

End Function

Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
    PackFile = False
End Function

Private Sub showTable(byref fo, byref cnn, byval tableName)
    Dim rsTable
    Dim i
    Dim fieldCount
    Dim data
    Set rsTable = cnn.Execute("SELECT * FROM " & tableName & " ORDER BY 1")
    fieldCount = rsTable.Fields.count
    rsTable.MoveFirst
    Do While Not rsTable.EOF
        For i = 0 To fieldCount - 1
            if i = 0 Then
                data = rsTable(i).Value
            Else
                data = data & vbTab & rsTable(i).Value
            End If
        Next
        rsTable.MoveNext
        fo.WriteLine data
    Loop
    rsTable.Close
    Set rsTable = Nothing
End Sub

</script>
</scriptlet>


3. WinMerge 배포 플러그인을 자동화하거나 SqliteToText.sct를 명시하고 비교
실행합니다.


따라서 테이블, 트리거, 뷰, 인덱스 정보 및 테이블 내용을 비교합니다.

해설



SQLite 메타 정보



sqlite_master



SQLite는 sqlite_master에 table, index, view, trriger의 정보를 저장하고 있다.
이 테이블을 취득하면 다음 정보를 얻을 수 있습니다.


이름
설명


유형
객체의 정보를 나타냅니다. 'table', 'index', 'view', 'trigger' 중 하나

이름
객체 이름

rootpage
테이블 및 인덱스에 대한 루트 b-tree 페이지의 페이지 번호

sql
SQL


이 테이블에는 임시 테이블의 정보가 저장되지 않습니다.
임시 테이블의 정보를 얻으려면 다음 테이블에서 데이터를 얻습니다.

· sqlite_temp_master

테이블의 열 정보



여기에서는 취득하고 있지 않지만, 테이블의 열 정보는 하기의 SQL로 취득할 수 있다.
PRAGMA table_info('テーブル名');

시퀀스 정보



AUTOINCREMENT를 PRIMARY 키로 작성했을 때 sqlite_sequence가 작성된다.
AUTOINCREMENT는 sqlite_sequence를 바탕으로 만들어진다.

커맨드 라인을 이용한 덤프 방법



최신의 커맨드 라인 툴이 있으면, 이하의 방법으로 유사한 정보를 취득할 수 있다.
sqlite3 test.sqlite .dump

참고



The SQLite Database File Format
h tp // w w. sq ぃ. 오 rg / 후우 후마 t. HTML

좋은 웹페이지 즐겨찾기