FK~

Moje odkazy

Ostatní odkazy

EFF: svoboda blogování
Close Windows
Nenajdete mě na Facebooku ani Twitteru
Rozpad EU
Jsem členem FSF
Jsem členem EFF
There Is No Cloud …just other people's computers.

Nová verze SQL klienta SQL-DK v0.9

vydáno: 6. 4. 2014 21:36, aktualizováno: 7. 9. 2014 18:58

Původně jsem chtěl vydat až verzi 1.0, ale jednak se od minula nastřádalo pár změn a jednak se mi nechtělo do některých věcí naplánovaných do 1.0, takže tu máme ještě verzi 0.9. Pokud nevíte, o čem je řeč, píšu dávkového/terminálového klienta pro relační databáze.

Načítání SQL ze standardního vstupu

Přidal jsem volbu --sql-in, která umožňuje načítání SQL příkazů ze STDIN, takže jde teď SQL-DK dobře používat v rouře nebo brát SQL příkazy ze souboru. Už není potřeba používat hack:

$ sql-dk … --sql "`cat soubor.sql`"

což mohl být jednak problém u delších skriptů a jednak nám pak SQL příkazy prosakují do výpisu procesů (to není z hlediska bezpečnosti zrovna žádoucí). Teď tedy stačí napsat něco jako:

$ cat soubor.sql | sql-dk … --sql-in # nebo:
$ sql-dk … --sql-in < soubor.sql

Případně bez roury a napsat SQL ručně (např. když databázovému uživateli nastavujete heslo a nechcete, aby bylo někde v historii nebo ve výpisu procesů).

Vícerozměrná pole v XML

XML formátovač výstupu teď podporuje (i vícerozměrná) pole:

<?xml version="1.0" encoding="UTF-8"?>
<batchResult xmlns="https://sql-dk.globalcode.info/xmlns/batchResult">
	<database name="blog">
		<statement>
			<sql>SELECT array[array[1,2,3],array[4,5,6]]</sql>
			<resultSet>
				<columnHeader 
					label="array" name="array"
					typeName="_int4" type="2003"/>
				<row>
					<column>
						<array>
							<item>
								<array>
									<item>1</item>
									<item>2</item>
									<item>3</item>
								</array>
							</item>
							<item>
								<array>
									<item>4</item>
									<item>5</item>
									<item>6</item>
								</array>
							</item>
						</array>
					</column>
				</row>
			</resultSet>
		</statement>
	</database>
</batchResult>

Vylepšený Tabular

Tabulkový formátovač nyní nahrazuje uvnitř hodnot tabulátory a nedělitelné mezery obarvenými symboly, takže to jednak nerozbíjí výslednou tabulku a jednak lépe vidíme, co máme v databázi uloženo.

Výpis konfigurace

SQL-DK umí vypisovat svoji konfiguraci (databázová spojení, formátovače…) stejně jako by to byla data z databáze (vypisují se pomocí formátovače a můžete si tedy zvolit výstup do libovolného formátu).

Volba --list-formatters nově testuje, zda lze jednotlivé formátovače instanciovat (sloupeček valid). Mj. tím ověříte, že nemáte v názvu třídy překlep.

Nová volba --list-jdbc-drivers slouží k výpisu JDBC ovladačů dostupných na CLASSPATH. SQL-DK najde ovladače pomocí META-INF/services.

výpis nalezených JDBC ovladačů

Nová volba --list-jdbc-properties vypíše konfigurovatelné a nakonfigurované vlastnosti dané databáze. JDBC ovladače totiž deklarují podporované volby, takže uživatel má k dispozici strojově čitelnou a vždy aktuální dokumentaci. Tyto properties lze nastavit u jednotlivých spojení v config.xml nebo na příkazové řádce (--db-property)

JDBC ovladač loopback

SQL-DK je univerzální klient a lze ho použít s libovolnou databází, ke které máte JDBC ovladač.

Napsal jsem i speciální loopback ovladač, který není skutečným ovladačem, nevyžaduje žádnou databázi a dokonce ani nepodporuje SQL. Je to prostě jen loopback, který vezme parametry dotazu a vrátí je jako výsledkovou sadu (samotný dotaz ignoruje).

Prvním parametrem je počet sloupců, pak následuje záhlaví a potom samotná data. Např. pro parametry:

2 a b x y z

vrátí výsledkovou sadu:

a | b
-----
x | y
z | null

Dá se to použít jednak pro testování (ano, pořádné automatizované testy jsou jedna z těch věcí, která má přijít do verze 1.0), při kterém nejsme závislí na skutečné běžící databázi, ale výsledky dotazů si nasimulujeme. A jednak se to dá použít na různé ad-hoc pokusy a hrátky.

Např. si vypíšeme soubor /etc/fstab hezky naformátovaný – stačí nám k tomu tyhle dva řádky:

#!/bin/bash

#                         +-----column count
#                         | +---headers-----------------------------+   +---data--------------------+
#                         | |                                       |   |                           |
read -ra FSTAB <<< `echo "6 device mount_point type options dump pass"; cat /etc/fstab | grep -v "^#"`
sql-dk --db loopback --sql "…" --formatter tabular-prefetching --data "${FSTAB[@]}"
#                           |
#                           +---the statement is ignored

Takhle jednoduše to funguje v případě, že hodnoty neobsahují mezery. Pokud mezery potřebujeme, je nutné uvést parametry samostatně v uvozovkách nebo si třeba sestavit to pole v BASHi v cyklu.

Ukázka výstupu ve formě tabulky (můžeme si to vypsat i jako XML, XHTML, LaTeX atd.):

hezky naformátovaný soubor /etc/fstab pomocí SQL-DK

Tento JDBC ovladač je zatím trochu experimentální, takže je potřeba si ho ručně zapnout. Do souboru ~/.sql-dk/environment.sh si přidejte:

CUSTOM_JDBC=(
	"/usr/share/sql-dk/jdbc-loopback-driver.jar"
);

a v ~/.sql-dk/config.xml si odkomentujte

<database>
	<name>loopback</name>
	<url>jdbc:loopback://</url>
	<userName></userName>
	<password></password>
</database>

a hned to můžeme otestovat:

$ sql-dk --db loopback --sql "…" --data 2 "a" "b" "x" "y" "z"

Formátovač TeX

Jednou z důležitých vlastností SQL-DK jsou formátovače – díky nim si můžete vypsat data v různých formátech: na terminál, do XML souboru, jako XHTML stránku atd.

Když píšete dokument v (La)TeXu a máte v něm nějaké tabulky původem z databází, je otrava je při aktualizaci dat vždycky předělávat – exportovat z databáze, převádět do formátu TeXu… Tenhle proces je dobré automatizovat a s tím může pomoci právě SQL-DK. Ve verzi 0.9 přibyl formátovač pro TeX resp. LaTeX (časem přidám i jiné styly/formáty tabulek).

Propojíme to všechno dohromady a vyrobíme si PDF obsahující část informací ze souboru /etc/passwd. Projekci a restrikci provedeme pomocí příkazů cuthead (protože loopback ovladač žádné skutečné SQL neumí).

formátovač TeX

TeXový formátovač umí obarvovat syntaxi (stejně jako XML a XHTML formátovače), což slouží jen pro větší přehlednost při čtení vygenerovaného kódu, pro normální výstup barvy samozřejmě nezapínáme.

Toto je první verze (La)TeX formátovače, ještě je tam co vylepšovat (např. výstup samotných tabulek bez hlavičky/patičky dokumentu nebo podpora čistého TeXu). Další nápady na vylepšení uvítám v diskusi.

Příště se podíváme na trochu sofistikovanější zpracování dat pomocí jiných JDBC ovladačů.

Témata: [databáze] [SQL] [Java]

Komentáře čtenářů

Tento článek zatím nikdo nekomentoval

Přidat komentář

reagujete na jiný komentář (zrušit)
jméno nebo přezdívka
název příspěvku
webová stránka, blog
e-mailová adresa
nápověda: možnosti formátování
ochrana proti spamu a trollům

Náhled komentáře