Top Banner
Collabora Productivity www.collaboraoffice.co m Collabora Productivity Database migraon in LibreOffice By Tamás Bunth Soſtware Developer IRC: Wastack
18

Database migration in LibreOffice · Collabora Productivity m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Sep 07, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Collabora Productivity

Database migration in LibreOffice

By Tamás BunthSoftware Developer

IRC: Wastack

Page 2: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Table of Contents

● Motivation & TDF tender

● Development

● big picture

● challenges

● testing

● Further development opportunities - TODOs

● Demo

Page 3: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Firebird vs HSQLDB

● Embedded Databases

● Java environment configuration

● Developer’s point of view

● Performance

● (Why not SQLite?)

Page 4: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Tender for a migrating tool

Import old document data by reading HSQLDB binary file-format

and schema information.

Convert data to actual sdbc implementation.

Page 5: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Prerequisites

Firebird driver improvements

● LONGVARCHAR → Clob

● BINARY (fix) and VARBINARY → (VAR)CHAR “OCTETS”

● LONGVARBINARY (Image) → Blob subtype

● Copy integer values from Calc to Base

Page 6: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

HSQL format

Script Data

Root Node

Column def

Page 7: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Challenges #1 Schema definition

Page 8: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Challenges #2: binary format

Page 9: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Architecture

Page 10: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Data type formats

Varchar: <Size><String>

Numeric/Decimal

● java.math.BigInteger to OUString

● double-dabble

Time/Date/Datetime

● from 1970-01-01 00:00:00.000

● milliseconds vs. YMDhms

Page 11: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

Testing migration library

● Use existing HSQL unit tests – with migration

● Test SQL parser

● With special cases: e.g. VARCHAR default parameter

● Test binary data: Is that the same as before?

Page 12: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

TODOs #1 – Time migration problem

Time/date/datetime values of HSQLDB depends on OS Timezone,

whereas Firebird ignores it (yet).

DATE=$(TZ=Asia/Taipei date +”%F %H:%M”) libreoffice –base

Pop-up window asking user if he/she wants to migrate using OS

timezone?

Page 13: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

TODOs #2: using SQLParser

● connectivity/source/parse/*

● Bison based parser

● Hard-coded values:

pSelect→getChild(3)→getChild(0) →getChild(1);

pSelect→getMofifiers()→isLimitUsed();

Page 14: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

SQLParser example

SQL_TOKEN_CACHED

Page 15: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

TODOs #2: using SQLParser

View definitions

● concat vs. ||

● ASCII() vs ASCII_CHAR(), char() vs ascii_char()

● truncate() vs trunc()

● Space(c: Number) vs ??

CREATE VIEW "vEventCustomers" ("ID","EventDescription","EventCustomer","QuantityReserved") AS SELECT "Events"."ID", "Events"."EventDescription", CONCAT ( "Customers"."LastName", CONCAT( ', ', "Customers"."FirstName" ) ) AS "EventCustomer", "Reservations"."QuantityReserved" FROM "Reservations", "Events", "Customers" WHERE "Reservations"."EventID" = "Events"."ID" AND "Reservations"."CustomerID" = "Customers"."ID"

Page 16: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

TODOs #2: using SQLParser

HSQLDB → SDBC conversion

● Not just Firebird should be allowed.

● For that a stabil, huge parser is needed.

● parse.setDialect(Dialect.Firebird3);

● sSql = parser.compose(Dialect.Firebird3);

Page 17: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity www.collaboraoffice.com

TODOs #3: other bugs

https://bugs.documentfoundation.org/show_bug.cgi?id=116968

Page 18: Database migration in LibreOffice · Collabora Productivity  m Collabora Productivity Database migration in LibreOffice By Tamás Bunth Software Developer IRC: Wastack

Collabora Productivity

Thank you page!

By TamásBunth

[email protected]