barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 31 марта 2012 г.

Автоматическая смена обоев в KDE

В Gnome / XFCE я пользовался DesktopNova, но модуля для кед в ней, к сожалению, нет. Кеды 4+ сами умеют менять обои (для этого нужно зайти в настройки виджета рабочего стола, щелкнув правой кнопкой мыши по рабочему столу, и выбрать "Обои: Слайд-шоу"). Но для более гибкой настройки, а также возможности подгружать обои из различных онлайн-сервисов, удобно использовать Wally:


Чтобы она заработала, в свойствах рабочего стола (там же, где выбирается "Слайд-шоу") нужно выбрать "WallyPlugin".

пятница, 30 марта 2012 г.

Вызов хранимой функции и вывод её результатов в консоль в Oracle

Меня, как человека с полным отсутствием опыта работы с ораклом, и привыкшего к MySQL или, в крайнем случае, к Postgres, задача вызова хранимой функции поставила поначалу в тупик. Сделать, как в MySQL:
SELECT myf("blablabla")
в оракле нельзя. Времени читать документацию или книжки не было (хотя надо будет когда-нибудь обязательно освоить оракл, но не сейчас), поэтому я, немного погуглив и поэкспериментировав, нашел такой вариант:
SET SERVEROUTPUT ON;
declare
result VARCHAR2(100);
begin
result := myf("blablabla");
DBMS_OUTPUT.ENABLE;
dbms_output.put_line(result);
end;
Т.е. объявляем анонимный блок, записываем результат выполнения функции в переменную, а потом печатаем её с помощью dbms_output.

base64 кодирование / декодирование в Java

Есть туча реализаций, одна из них: Apache Commons Codec (http://commons.apache.org/codec/).

четверг, 29 марта 2012 г.

Панель задач в стиле Windows 7 (только с иконками) для кед

Называется plasma-widget-smooth-tasks:


Java: InputStream в String и обратно

Начну с простого: как представить строку в виде InputStream:
InputStream is= new ByteArrayInputStream(str.getBytes(Charset.forName(strCharset)));
Здесь  str - исходная строка, strCharset - кодировка, с использованием которой символы строки будут лежать в InputStream, ну и is -  результирующий поток.
Для обратного преобразования вариантов много, один из них - читать символы в цикле, пока не кончится поток. Но можно сделать это короче, с помощью Apache Commons IO:
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, strCharset);
String str= writer.toString();

среда, 28 марта 2012 г.

Конфигурация Apache2 HTTP Server: редирект с HTTPS на HTTP

Выполняется средствами mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
При этом, однако, корректная настройка SSL все равно необходима, т.к. редирект осуществляется после установления защищенного соединения.
Можно также явно указать, каким кодом отвечать при редиректе. Например, для отправки кода 301 ("Перемещено окончательно") нужно:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=permanent]
Если некоторые URL`ы требуется всё же обрабатывать по HTTPS, нужно исключить их из правила:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond $0 !/needhttps/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

Конфигурация Apache2 HTTP Server: относительные приоритеты директив Redirect, ProxyPass и RewriteRule

Не знаю, написано ли это где-то в документации по Apache2 (я по крайней мере не нашел), но директива ProxyPass имеет больший приоритет, чем директива Redirect, независимо от порядка их следования в файле конфигурации, т.е. если мы имеем следующую конфигурацию:
Redirect permanent /xxx http://ya.ru
ProxyPass / http://google.com/
, то при обращении по URL`у www.myserver.com/xxx вместо браузерного редиректа на Яндекс мы увидим результат проксирования запроса на URL http://google.com/xxx. Чтобы заставить Apache работать, как мы хотим, нужно исключить путь /xxx из проксирования. В таком случае директива Redirect отработает. Получится конфиг вида:
ProxyPass /xxx !
Redirect permanent /xxx http://ya.ru
ProxyPass / http://google.com/
А вот mod_rewrite отрабатывает раньше, чем ProxyPass, поэтому URL`ы, используемые ProxyPass`ом, нужно исключать из правил mod_rewrite. Т.е. конфигурация https`ного виртуального хоста:
ProxyPass /xxx/ balancer://mybalancer/
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

при обращении в /xxx приведет к редиректу на этот же URL по http, а не к использованию балансировщика mybalancer, как хотелось бы. Чтобы всё заработало, необходимо:
ProxyPass /xxx/ balancer://mybalancer/
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond $0 !/xxx/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}


вторник, 27 марта 2012 г.

Настройка Krausader на использование терминала xfce4-terminal

Чтобы Krusader использовал в качестве эмулятора терминала не konsole, а XFCE`шный xfce4-terminal, нужно зайти в крусэйдере в настройки, выбрать "Основные", и в поле "Терминал" ввести:
xfce4-terminal --working-directory %d
Всё, теперь, скажем, по F2, будет открываться xfce4-terminal в текущей директории.

понедельник, 26 марта 2012 г.

Минификация JavaScript-кода

Инструментов для минификации JS-кода множество, один из них - Closure Compiler от Google. Им можно пользоваться как онлайн, так и оффлайн, скачав Java-приложение. В последнем случае для минификации некоторого файла my.js в файл my-min.js нужно следующее:
2) Распаковать архив, перейти в папку с распакованным приложением и выполнить:
java -jar compiler.jar --js=my.js --js_output_file=my-min.js
При этом my.js должен лежать в той же папке (ну или можно задать относительный / абсолютный путь до него целиком). 

воскресенье, 25 марта 2012 г.

Общий доступ к принтеру в Xubuntu и Kubuntu с других Linux-машин

Чтобы открыть общий доступ в принтеру, подключенному к компьютеру с Xubuntu, нужно:
1) Зайти в Меню -> Система -> Printing
2) Зайти в Server -> Settings, и установить галочку "Publish shared printers connected to this system" (и, при необходимости, галочку "Allow printing from Internet":


Всё, общий доступ к принтеру с Linux-машин открыт.
В Kubuntu всё аналогично: заходим в "Настройка принтеров", в меню "Параметры сервера" устанавливаем "Открыть доступ к опубликованным принтерам, подключенным к данному компьютеру", а в настройках принтера проверяем, что стоит галочка "Совместный доступ":


четверг, 22 марта 2012 г.

gRaphaël piechart: баг, связанный с игнорированием настройки "colors" при наличии единственного сектора

Ещё один баг gRaphaël piechart: если чарт содержит только один сектор, занимающий все 360 градусов, то библиотека игнорирует настройку colors, делая круг синего цвета. Покопавшись в исходниках (g.pie-min.js) я дейтсвительно нашел, что заливка устаналивается в 2 разных местах (видимо, для случая цельного круга и нескольких секторов). И если в случае с несколькими секторами используется выражение:
o.colors&&o.colors[y]||c.colors[y]||"#666"
, которое пытается найти цвет в конфигурации, а затем - в цветах по-умолчанию, то для цельного круга видим:
fill:c.colors[0]
, т.е. сразу берется цвет по-умолчанию. Исправление этого фрагмента на:
fill:o.colors&&o.colors[0]||c.colors[0]
решает проблему.
UP: посмотрел github проекта, соответствующее issue висит уже 2 года:  https://github.com/DmitryBaranovskiy/g.raphael/issues/24. 
Исправленная мной версия кода тут: https://raw.github.com/barbitoff/g.raphael/master/g.pie.js (не минимизированный файл) и тут: https://raw.github.com/barbitoff/g.raphael/master/min/g.pie-min.js (минимизированный).

Notepad++: настройка маппинга расширений файлов и подсветки синтаксиса

Чтобы задать для какого-либо расширения файла, в соответствии с каким синтаксисом его подсвечивать по-умолчанию, нужно зайти в "Опции" -> "Определение стилей", выбрать нужный язык и добавить расширение в поле "Польз. расширение":


gRaphaël piechart: параметры конфигурации

Ввиду отсутствия документации пришлось рыться в исходниках чтобы хотя как-то понять, какие параметры конфигурации можно передавать при создании piechart`а. 
Во-первых, параметры конфигурации передаются 5 параметром функции piechart, после x и у координат центра piechart`а, его радиуса и массива данных. Параметры следующие (не претендую на полноту списка, но это хоть что-то):
  • legend - массив легенд к секторам (i-ый элемент массива будет легендой к сектору, построенному для i-ого элемента массива данных)
  • legendpos - позиция легенды. Возможные значения: "east", "west", "south", "north". При положении "west" легенда при не совсем коротких надписях налезает на сам пайчарт, как подвинуть легенду подальше, не трогая исходников, я не нашел
  • legendcolor - цвет текста легенды (в css-формате)
  • stroke - цвет обводки чарта (круговой и границ секторов)
  • strokewidth - ширина обводки
  • colors - массив цветов секторов. Что важно (и очень неудобно), цвета следуют не в том порядке, в каком следуют данные и легенда, а в порядке уменьшения размера сектора. Баг, связанный с игнорированием этой настройки в случае, когда пай содержит единственный сектор, я описал тут (в т.ч. и исправление этого бага).
Вот небольшой пример настройки пайчарта:

pieChart = pieChartCanvas.piechart(
PIECHART_CANVAS_WIDTH/2,
PIECHART_CANVAS_HIEGHT/2,
PIECHART_RADIUS,
[22,12,1],
{
 legend: ["Доступно","Недоступно","Неизвестно"],
 legendpos: "east",
 legendcolor: "#ff1256",
 stroke: '#ff4467',
 strokewidth: 3,
 colors: ["#00ff00","#ff0000","#888888"]
}
);
Здесь  pieChartCanvas - результат выполнения функции Raphael(), PIECHART_CANVAS_WIDTH, PIECHART_CANVAS_HIEGHT и PIECHART_RADIUS - константы, задающие ширину и высоту области рисования (передаваемые также при её создании в функцию Raphael), а также радиус PieChart`а.

среда, 21 марта 2012 г.

Выполнение периодических задач в сервлете

Чтобы выполнять какой-то код в сервлете периодически, с момента инициализации сервлета и до окончания его жизненного цикла, нужно сделать следующее (на примере Tomcat 6):
1) Добавить в веб-приложении класс, реализующий интерфейс ServletContextListener:
package example;

public class ServletContextExample implements ServletContextListener{

public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Context Created");
}
public void contextDestroyed(ServletContextEvent contextEvent) {
System.out.println("Context Destroyed");
}
}
Чтобы методы этого класса contextInitialized и contextDestroyed вызывались, соответственно, при инициализации и уничтожении контекста веб-приложения, необходимо добавить в web.xml внутрь тега web-app следующее:
<listener>
  <listener-class>
  example.ServletContextExample
  </listener-class>
</listener>
2)  Теперь можно воспользоваться классом ScheduledExecutorService для вызова необходимой периодической задачи (задача должна быть заключена в класс, реализующий интерфейс Runnable). Для этого в методе contextInitialized нужно инициализировать ScheduledExecutorService, а в contextDestroyed - корректно завершить его работу:
package example;

public class ServletContextExample implements ServletContextListener{
private ScheduledExecutorService scheduler;

public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Context Created");
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new MyRunnableImpl(), 0, 1, TimeUnit.HOURS);
}

public void contextDestroyed(ServletContextEvent contextEvent) {
System.out.println("Context Destroyed");
scheduler.shutdown();
}
}
В данном примере метод MyRunnableImpl.run() будет выполняться раз в час.

Использованы материалы с javabeat.net и stackoverflow.com.

gRaphael в IE: баг с секторами, большими полукруга, при наличии секторов в 0 градусов

Нашел неприятный баг в gRaphaël в Internet Explorer 8, связанный с появлением белой полосы, разделяющей сектор, больший 180 градусов, на 2 части:

Такое поведение проявляется только в случае, если имеется сектор нулевой ширины. если его убрать - большой сектор снова становится цельным.

Рисование PieChart`ов на JavaScript

Во-первых, рисование PieChart`ов на клиенте имеет 2 разных варианта реализации:
Для HTML 5 есть библиотека RGraph, но ввиду того, что не все пользователи ещё перешли на поддерживающие HTML5 браузеры, от неё было решено отказаться.
Очень функциональной рисовалкой PieChart`ов (и не только) с использованием SVG / VML является гугловский "Google Chart Tools" с одним лишь минусом - его JavaScript-код загружается с сайта google, поэтому в оффлайне чарты работать не будут.
Другой бесплатный вариант, распространяемый по лицензии MIT и  использующий SVG / VML - gRaphaël. Имеет неплохие возможности (правда, поменьше, чем у варианта от google), но вот с документацией очень-очень туго (я, по крайней мере пока, вообще её не нашел).

Доступ к переменным скриптлета из EL

Чтобы из EL обратиться к переменной, объявленной в сриптлете, её нужно поместить в одну из областей видимости JSP-страницы (page, session, request или application). Например, в область видимости page вызовом pageContext.setAttribute():
<%
String myStr = "!!";
pageContext.setAttribute("myStr",myStr )
%>
Тогда переменная станет доступна в EL:
<c:out value="${myStr}"/>

вторник, 20 марта 2012 г.

"Недавние документы" в Gnome: очистка и запрет сохранения

"Недавние документы" хранятся в файлике ~/.local/share/recently-used.xbel. Поэтому чистится история так:
rm  ~/.local/share/recently-used.xbel
А запрещается её хранение так:
sudo chattr +i ~/.local/share/recently-used.xbel

Инициализация InitialContext`а и stubbing пула JDBC-соединений при unit-тестировании веб-приложения за пределами контейнера

Проблема:

В приложении используются объекты, получаемые из InitialContext`а, которые помещаются туда контейнером сервлетов. Конкретно, используется пул соединений с БД, инициализируемый в context.xml веб-приложения для Tomcat следующим образом:
<Context antiJARLocking="true" path="/SMEVMonitoring">
  <Resource name="jdbc/myDb" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="1" maxWait="10000"
               username="postgres" password="postgres" driverClassName="org.postgresql.Driver"
               url="jdbc:postgresql://postgreshost:5432/myDb"/>
</Context>
Используется пул следующим образом:
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource dataSource = (DataSource)envContext.lookup("jdbc/myDb");
jdbcConn = dataSource.getConnection();
При проведении unit-теста в IDE, естественно, по адресу "java:/comp/env/jdbc/myDb", ничего не оказывается, т.к. DataSource создается Tomcat`ом. Более того, оказывается неустановленным системное свойство "java.naming.factory.initial", поэтому контекст вообще не может инициализироваться.

Решение:

Перед запуском теста (например, в методе, помеченном @BeforeClass в JUnit) необходимо выполнить настройку InitialContext`а и положить в него необходимые объекты (в моем случае - DataSource, который, вместо пула, я заменил BasicDataSource`ом):
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://postgreshost:5432/myDb");
ds.setUsername("postgres");
ds.setPassword("postgres");
// Configure and populate initial context
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES,        "org.apache.naming");    
Context initContext = new InitialContext();
initContext.createSubcontext("java:");
initContext.createSubcontext("java:/comp");
initContext.createSubcontext("java:/comp/env");
initContext.createSubcontext("java:/comp/env/jdbc");
initContext.bind("java:/comp/env/jdbc/myDb",ds);
Для компиляции и выполнения тестов потребуется, чтобы к проекту были подключены библиотеки Tomcat`а (т.к. используется org.apache.naming.java.javaURLContextFactory).

Поведение PostgreSQL в случае, когда схема объекта явно не задана

Когда схема, к которой принадлежит объект, используемый в запросе (например, таблица), не указана явно, PostgreSQL ищет объекты в различных схемах, имена которых содержатся в т.н. "search path", посмотреть содержимое которого можно командой:
SHOW search_path;
По-умолчанию search path содержит два значения: "$user" и public. Т.е. сначала постгрес ищет объект в схеме, имя которой совпадает с именем текущего пользователя, а затем - в  схеме public.
Установить search path можно командой:
SET search_path TO my_schema;
Теперь постгрес будет искать объекты только в схеме "my_schema" (эта команда повлияет только на запросы текущего соединения с БД). Можно через запятую перечислить несколько схем.

Излишняя ширина столбцов YUI2 DataTable при длинных заголовках

В yui-skin-sam установлен стиль "white-space: nowrap" для заголовков таблицы, из-за этого при большом заголовке столбец разрастается вширь, даже если для него установлена максимальная ширина. Чтобы это исправить, нужно переопределить этот стиль, установив "white-space: normal".

воскресенье, 18 марта 2012 г.

Guitar Pro 6 в Ubuntu 11.10: установка soundbank`ов

Установка soundbank`ов для RSE выполняется следующим образом:
cd /opt/GuitarPro6/
sudo ./GPBankInstaller <путь_к_файлу_.gpbank> /opt/GuitarPro6/

Midi-звук в Guitar Pro 6 под Ubuntu 11.10

Чтобы заработал midi-звук в Gp6 необходимо установить программный миди-синтезатор, например, Fluidsynth. Для удобства лучше установить сразу и графическую морду к нему под названием QSynth. После установки запускаем QSynth, идем в "Настроить", убеждаемся, что в "Драйвер Midi" выбрано "alsa_seq" и разрешено чтение событий midi:


Теперь идем на вкладку "Звук" и выбираем звуковой драйвер (по-умолчанию стоит "jack", но если он у Вас не установлен, как в моем случае, нужно выбрать alsa и pulse). То, что "Звуковое устройство" пусто, не страшно:


Всё, запускаем синтезатор кнопкой "Запустить", после чего запускаем GP, идем в "Звук" -> "Настройки аудио" и в "Midi-выход" выбираем пункт, начинающийся с "Fluid Synth":


Всё, отключаем RSE (кнопкой F2, если он ещё не был выключен) и midi должен заработать. У меня правда пока звук почему-то отстает, может стоит поставить Jack.

Запрет приложениям Linux доступа в интернет

Некоторым программам иногда полезно запрещать лазить в интернет, например, чтобы не обновлялись или чтобы чего доброго не подумали что они нелицензионные ;). В Linux это делается просто, суть подхода следующая: создается группа пользователей, этой группе запрещается доступ в интернет, а программа запускается с ID этой группы. Шаги следующие:
1) Создаем группу и добавляем в неё текущего пользователя, чтобы он мог менять GID при запуске:
sudo groupadd noinet
sudo gpasswd -a `id -un` noinet
2) Создаем правило для iptables, которое будет выполняться перед подъемом сетевого интерфейса. Для этого создаем исполняемый файл в /etc/network/if-pre-up.d со следующим содержимым:
#!/bin/bash
iptables -A OUTPUT -m owner --gid-owner noinet -j DROP
3) Всё, теперь можно перезагрузиться и запустить необходимую программку через:
 sg noinet "<exec_name>"
, где <exec_name> - имя программы.
 4) Для удобства можно создать вспомогательный скрипт, назвав его noinet и поместив его, скажем, в /usr/local/bin/noinet, со следующим содержанием:

#!/bin/bash
sg noinet "$*
Теперь запускать программы с запретом доступа в интернет можно ещё проще:
noinet  <exec_name>
ЗЫ Взять с хабра: http://habrahabr.ru/post/82933/.
ЗЫЗЫ В частности, запрет доступа в инет полезен для Guitar Pro 6.

среда, 14 марта 2012 г.

Квадрофонический звук в Xubuntu 11.10

В Fedora 16 с Gnome 3 квадрофонический звук настраивается стандартным интерфейсом настройки звука, а вот xfce4-mixer никаких настроек в этом плане не предоставляет, и при выборе в "Звуковая карта" PulseAudio показывает только 2 канала. Чтобы настроить 4 канала, нужно отредактировать /etc/pulse/daemon.conf, раскомментировав в нем строчку:
; default-sample-channels = 2
, и установив число каналов, равным 4:
default-sample-channels = 4
Можно в принципе, скопировать его вместе с /etc/pulse/default.pa в ~/.pulse/ и отредактировать там, но т.к. я хотел настроить сразу у всех юзеров, то стал это делать в глобальных настройках.
После изменения настроек нужно перезагрузиться (просто перезапуск pulseuadio не помогает).

Gedit и gxneur в Xubuntu 11.10

Столкнулся с неприятной особенностью сожительства gedit`а и переключателя раскладок gxneur (0.12 + xneur 0.12 из стандартного репозитория Ubuntu) в Xubuntu 11.10: gxneur почему-то блокирует ввод с клавиатуры в gedit. Лечится добавлением gedit в исключения (необходимо писать там "Gedit", т.е. именно с большой буквы) и перезапуском демона xneur. Очевидный минус - естественно, переключение раскладок в gedit работать не будет. Таже проблема наблюдается и в программе для просмотра pdf Evince.
Чтобы решить эту проблему полностью, нужно установить более новую версию (g)xneur, желательно - последнюю. Делается это следующим образом:
1) Удаляем установленный gxneur, xneur, libxneur
2) Добавляем ppa-репозиторий разработчика xneur:
sudo add-apt-repository ppa:andrew-crew-kuznetsov/xneur-stable
3) Устанавливаем gxneur заново (на момент написания этих слов самая поздняя версия была 0.15)
Версия 0.15, помимо корректной работы с приложениями GTK 3, также имеет возможность интеграции в панель Gnome 3, благодаря чему его иконка все время видна сверху экрана, а не в автоматически скрывающемся трее снизу, но это собственно уже не про Xubuntu:


XMLSchema: расширение базового типа элементами в начале

Иногда хочется использовать наследование типов с помощью элемента extension так, чтобы добавить к sequence базового типа элементы в начале (перед указанными в базовом типе), а не в конце. Скажем, расширить тип:
<xs:complexType name="TypeA">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:complexType/>
До типа:
<xs:complexType name="TypeB">
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:complexType/>
Но так делать нельзя: в спецификации XMLSchema 1.1 указано, что:
For the most part, this specification allows only appending, and not other kinds of extensions. This decision simplifies application processing required to cast instances from the derived type to the base type. 
Т.е. при использовании extension для расширения sequence базового типа можно дополнять эту последовательность только элементами в конце.

вторник, 13 марта 2012 г.

"remote rejected (branch is currently checked out)" при Push`е в не-bare репозиторий Git

Проблема:

Имеется 2 git-репозитория, оба - не-bare (попросту, один из них когда-то создавался как копия другого): один - на рабочей машине, второй - на флешке, и используется в качестве "remote" для того, который на ПК, чтобы делать в него Push в целях бэкапа. При попытке сделать такой Push (содержащий изменения в той ветке, которая является текущей в "remote"-репозитории) неожиданно появляется ошибка:
! [remote rejected] master -> master (branch is currently checked out)
Решение:

Выполнить на "remote"-репозитории:
git config receive.denyCurrentBranch ignore

Декодирование Base64

Иногда бывает нужно "вручную" декодировать base64, для этого можно использовать плагин TextFX для Notepad++ (устанавливается через Плагины -> Plugin Manager -> Show Plugin Manager, или вручную, скачкой с http://sourceforge.net/projects/npp-plugins/files/TextFX/ и помещением dll-ки в директорию "plugins"). Для декодирования нужно выделить base64-текст и выбрать TextFX -> TextFX Tools -> Base64 Decode.

понедельник, 12 марта 2012 г.

Установка Sun (Oracle) JDK в Ubuntu 11.10

В репозиториях убунты есть только OpenJDK, поэтому необходимо скачать JDK с сайта Oracle и установить его самостоятельно:
1) Качаем самораспаковывающийся архив с JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html (выбираем вариант вида "jdk-6u31-linux-i586.bin")
2) Распаковываем куда-нибудь. Для этого:
chmod +x jdk-6u31-linux-i586.bin
./jdk-6u31-linux-i586.bin 
Появится папка jdk1.6.0_31.
3) Копируем jdk1.6.0_31 в /usr/lib/jvm:
sudo cp ./jdk1.6.0_31 /usr/lib/jvm -r
После этого, скажем, Netbeans, при установке уже увидит новую JDK. 
4) Устанавливаем новую Java как Java по-умолчанию:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_31/bin/java" 1
sudo update-alternatives --set java /usr/lib/jvm/jdk1.6.0_31/bin/java
5) Неплохо бы ещё установить переменные окружения JAVA_HOME, JRE_HOME и CLASSPATH. Для этого нужно создать исполняемый файл в директории /etc/profile.d (например, с названием java_env.sh) и добавить в него следующие строчки:
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_31
JRE_HOME=/usr/java/jdk1.6.0_31/jre
CLASSPATH=$JAVA_HOME/lib:.
export JAVA_HOME JRE_HOME CLASSPATH
Есть и другие варианты, но такой универсален в том плане, что отразится на всех пользователях, и, при этом, переменные окружения не слетят при возможном обновлении файла /etc/profile при обновлении системы.

пятница, 9 марта 2012 г.

Установка Oracle VM VirtualBox Extension Pack в Fedora

Попытка установить Oracle VM VirtualBox Extension Pack просто двойным кликом по файлу в наутилусе приводит к ошибке:
The installer failed with exit code 127: The value for the SHELL variable was not found the /etc/shells file This incident has been reported.. Код ошибки: NS_ERROR_FAILURE (0x80004005)...
Поэтому  устанавливать нужно из терминала под sudo:
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.8-75467.vbox-extpack
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully installed "Oracle VM VirtualBox Extension Pack".

Gnome 3: кнопки "Свернуть" и "Восстановить"/"Развернуть"

Для меня лично отсутствие привычных кнопок "Свернуть" и "Восстановить"/"Развернуть" несколько неудобно, поэтому решил их вернуть на место. Делается это так:
1) Устанавливаем gnome-tweak-tool
2) Идем в пункт меню "Shell", там в "Arrangement of buttons on the titlebar" выбираем "All". Перезапускаем шелл (Alt+F2 r).
Вуаля:

Отключение функционала online-статусов на панели Gnome 3 в Fedora 16

Также как и Accesibility Icon, вывод имени пользователя в верхнем правом углу и меню для изменения доступности имхо - не самая необходимая вещь и я бы с радостью от неё избавился. Также как и в случае с Accesibility Icon, существует соответствующее расширение gnome-shell, однако оно требует некоторого допиливания.
1) Устанавливаем расширение:
yum install gnome-shell-extension-noim
2) Т.к. версия Gnome Shell в Fedora 16 отличается от 3.0, под которую настроено расширение, идем в /usr/share/gnome-shell/extensions/noim@fpmurphy.com/metadata.json и редактируем там версию Gnome Shell, устанавливая:
"shell-version": ["3.2"],
3) Однако после перезапуска gnome все равно не работает (перезапуск осуществляется с помощью Alt+F2 и ввода команды "r"). Идем в лог ошибок: Alt+F2 lg (откроется отладчик расширений LookingGlass), вкладка Errors (кстати, закрывается отладчик нажатием Esc), где видим:
Extension noim@... had error: Error: no JS module 'statusMenu' found
4) Придется правит исходники. Открываем /usr/share/gnome-shell/extensions/noim@fpmurphy.com/extension.js и вносим следующие изменения:
  • Комментируем импорт statusMenu:
// Gnome shell 3.2 has no statusMenu module
//const StatusMenu = imports.ui.statusMenu;
  • Добавляем функции init(), enable(), disable():
// fixes error "missing 'init' function"
function init()
{
changeUserMenu();
}
// fixes error "missing 'enable' function"
function enable(){}
// fixes error "missing 'disable' function"
function disable(){} 
  • Поправляем получение переменной statusMenu в начале функции changeUserMenu:
let statusMenu = Main.panel._statusArea.userMenu;

  • Поправляем скрытие ненужных пунктов меню, а именно, имени пользователя с иконкой, пункта "Уведомления" и "Учётные записи в сети". Для этого заменяем цикл по элементам массива children просто явным скрытием элементов по индексам:
// user name & icon
children[0].hide();
// "notification"
children[1].hide();
// delimiter
children[2].hide();
// "network accounts"
children[3].hide();


5) Перезапускаем Gnome Shell (Alt+F2 r)
6) Теперь расширение нужно разрешить: устанавливаем (если ещё не установили) gnome-tweak-tool, заходим в него, идем в "Расширения Shell", там включаем расширение. Снова перезапускаем гномшелл.
7) Всё, теперь вместо длинной надписи с имененем пользователя на панели видим только иконку "Fedora":


На всякий случай, полный полученный мной текст extension.js:

//
//  Copyright 2011 (c) Finnbarr P. Murphy.  All rights reserved.
//
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
// Gnome shell 3.2 has no statusMenu module
//const StatusMenu = imports.ui.statusMenu;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
// change the icon_name if you want to display a different icon
// the icon must exist in the appropriate directory
const ICON_NAME = 'fedora-logo-icon';
// fixes error "missing 'init' function"
function init()
{
changeUserMenu();
}
// fixes error "missing 'enable' function"
function enable(){}
// fixes error "missing 'disable' function"
function disable(){}
function changeUserMenu()
{
    // future version -  let statusMenu = Main.panel._userMenu;
    //let statusMenu = Main.panel._statusmenu;
    let statusMenu = Main.panel._statusArea.userMenu;
    let noimlogo = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
                                 style_class: 'popup-menu-icon',
                                 icon_name: ICON_NAME });
    let box = statusMenu._name.get_parent();  
    box.get_children().forEach(function (actor) { actor.destroy(); });
    let noimBox = new St.BoxLayout({ style_class: 'noim-icon'});
    noimBox.add_actor(noimlogo);
    box.add_actor(noimBox);
    let _name = new St.Label();
    box.add(_name, { y_align: St.Align.MIDDLE, y_fill: false });
    statusMenu._updateUserName = function() {};
    statusMenu._updatePresenceIcon = function(presence, status) { };
    statusMenu._presence = null;
    let children = statusMenu.menu.box.get_children();
// user name & icon
children[0].hide();
// "notification"
children[1].hide();
// delimiter
children[2].hide();
// "network accounts"
children[3].hide();
}

function main() {
    changeUserMenu();
}


"Открыть в терминале" для Nautilus

У Dolhin в кедах есть очень удобная фича - возможность открыть терминал в текущей папке через контекстное меню. Для Nautilus тоже существует такая возможность, правда в виде дополнения:
yum install nautilus-open-terminal
Устанавливаем, перезагружаемся - и вот, теперь в любой папке можно открыть терминал:


Удаление Accesibility Icon из панели Gnome 3 в Fedora 16 / Ubuntu 11.10

Назойливая иконка, не особо нужная большинству пользователей, удаляется установкой расширения gnome-shell. В Fedora 16 это делается так:
yum install gnome-shell-extension-remove-accessibility-icon
В Ubuntu установка расширения делается следующим образом (в стандартном репозитории расширений gnome-shell нет, поэтому приходится подключать ppa):
sudo add-apt-repository ppa:webupd8team/gnome3
sudo apt-get update
sudo apt-get install gnome-shell-extensions-noa11y
webupd8team/gnome3 - не единственный ppa с расширениями Gnome, есть также и другие (например, ferramroberto/gnome3), но я ставил из webupd8team.
После установки расширения нужно его активировать. Для этого требуется gnome-tweak-tool (наверняка можно и без него, но с ним достаточно удобно). Устанавливаем:
yum install gnome-tweak-tool
Запускаем, идем в "Расширения Shell", там включаем расширение.  

четверг, 8 марта 2012 г.

Добавление даты и секунд в часы на панели Gnome 3

1) Устанавливаем dconf-editor:
yum install dconf-editor
2) Запускаем его, идем в org->gnome->shell->clock, устанавливаем нужные галочки

Flash в Google Chrome в Fedora 16

Во-первых, Google имеет свой собственный флеш-плагин, лежищий с ним вместе в /opt/google/chrome/libgcflashplayer.so. Поэтому, если в системе установлен также flash сам по себе (в /usr/lib/flash-plugin/libflashplayer.so), то в хроме окажется аж 2 плагина для одного и того же контента (посмотреть это можно на chrome://plugins/). Однако в google-chrome-stable почему-то ни один из них не заработал - сверху страницы вылезает сообщение об крахе плагина Flash.  Установка google-chrome-unstable и включение в настройках только родного (/opt/google/chrome/libgcflashplayer.so) плагина спасло ситуацию.

Редактирование меню приложений в Linux (Gnome, XFCE)

Пункты меню Gnome / XFCE живут тут: /usr/share/applications/ . Для редактирования нужен root.

Установка virtualbox в Fedora 16

Как ни странно, VirtualBox нет ни в родном репозитории федоры, ни в RPMFusion. Устанавливается он так:
1) Добавляем репозиторий:
cd /etc/yum.repos.d/
sudo wget http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo

2) Устанавливаем (последняя версия - 4.1):
sudo yum install VirtualBox-4.1

среда, 7 марта 2012 г.

Удаление старых ядер в Fedora 16

В Ubuntu я старые ядра удалял, ища и деинсталлируя их в Synaptic / apt, там каждое ядро виделось как отдельный пакет. В Fedora все ядра являются одним и тем же пакетом "kernel", но разных версий. Посмотреть все установленные версии можно командой:

yum info kernel
, которая выведет нечто вроде:
...
Установленные пакеты
Название: kernel
Архитектура: i686
Версия: 3.1.0
...
Название: kernel
Архитектура: i686
Версия: 3.2.7
...
Название: kernel
Архитектура: i686
Версия: 3.2.9
...
Удалить старые ядра можно одной командой:
package-cleanup --oldkernels
Однако временами эта команда почему-то не видит старых ядер, даже если в выводе yum info kernel они есть:
No old kernels to remove
Тогда придется удалять пакеты руками:
sudo yum erase kernel-3.1.0-7.fc16
sudo yum erase kernel-3.2.7-1.fc16

Проблема при компиляции проекта, использующего com.sun.xml.internal.ws.*

Проблема:

В проекте используются следующие импорты:
import com.sun.xml.internal.ws.client.BindingProviderProperties;
import com.sun.xml.internal.ws.developer.JAXWSProperties;
При запуске из NetBeans на Tomcat всё проходит нормально, однако при попытке сделать "Clean & Build" вываливается:

package com.sun.xml.internal.ws.client does not exist
import com.sun.xml.internal.ws.client.BindingProviderProperties;
package com.sun.xml.internal.ws.developer does not exist
import com.sun.xml.internal.ws.developer.JAXWSProperties;
Подключение к проекту rt.jar из jre не решает проблему.

Решение:

Сначала думал, что проблема в Netbeans, оказалось - нет, в JDK (http://netbeans.org/bugzilla/show_bug.cgi?id=199780). Решается проблема установкой опции "-XDignore.symbol.file=true" при компиляции проекта. Для  maven это делается так:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <verbose>true</verbose>
          <compilerArgs>
            <arg>-XDignore.symbol.file=true</arg>
          </compilerArgs>
        </configuration>
      </plugin>

Настройка таймаута запроса к SOAP-веб-сервису в JAX-WS

Задача:

Явно задать таймаут запроса к SOAP-веб-сервису, клиент которого создан с помощью wsimport.

Решение:

Как ни странно, найти решение оказалось непросто. Во-первых, решение зависит от сервера приложений, т.е. конкретной реализации JAX-WS, т.к., насколько я понял, спецификация JAX-WS такого функционала не предусматривает.
В любом случае проблема решается установкой неких свойств в контексте запроса следующим образом:
<ServiceName> serv = new <ServiceName>();
<PortTypeName> port = confServ.get<PortName>();
((BindingProvider) port).getRequestContext().put(<ParameterName>, iTimeoutValue);
, где ServiceName - имя SOAP-сервиса, PortName - имя порта, PortTypeName - имя типа порта (эти классы были сгенерированы wsimport`ом), iTimeoutValue - величина таймаута, которую хотим установить, ParameterName - имя параметра, зависящее от реализации JAX-WS. 
Для Tomcat 6 достаточно установки свойства JAXWSProperties.REQUEST_TIMEOUT, однако видел также рекомендации по установке свойств JAXWSProperties.CONNECT_TIMEOUT и BindingProviderProperties.REQUEST_TIMEOUT, так что можно на всякий случай устанавливать все 3. Для JBoss используется свойство org.jboss.ws.core.StubExt.StubExt.PROPERTY_CLIENT_TIMEOUT (http://stackoverflow.com/questions/2592303/how-do-i-set-the-jax-ws-client-request-timeout-programatically-on-jboss).
Если при сборке проекта возникают ошибки типа "package com.sun.xml.internal.ws.client does not exist", решение описано здесь: http://barbitoff.blogspot.com/2012/03/comsunxmlinternalws.html.

воскресенье, 4 марта 2012 г.

Монтирование ntfs-разделов в Linux

1) Определение UUID разделов (опционально, можно монтировать и по имени в /dev, но небезопасно, т.к. имя в /dev в некоторых случаях может поменяться, а UUID - нет):
sudo blkid
/dev/sda1: UUID="588CF9D38CF9AC1E" TYPE="ntfs"
/dev/sda5: LABEL="SAMSUNG" UUID="93BF258E75C5F8CC" TYPE="ntfs"
/dev/sdb1: LABEL="TERA" UUID="F42CB9172CB8D638" TYPE="ntfs"
/dev/sda2: UUID="8349899a-8011-4b9f-9658-9b787ca29481" TYPE="swap"
/dev/sda4: LABEL="_Fedora-16-i686-" UUID="8d929c98-db20-444d-b5ed-579fb6202cba" TYPE="ext4" 
2) Редактируем /etc/fstab, добавляя:

UUID=F42CB9172CB8D638 /mnt/tera ntfs-3g users,defaults 0 0
UUID=93BF258E75C5F8CC /mnt/samsung ntfs-3g  users,defaults 0 0
UUID=588CF9D38CF9AC1E /mnt/win7 ntfs-3g users,defaults 0 0
Такие опции позволят монтировать / размонтировать разделы пользователям (опция users), исполнять файлы с раздела, автоматически монтировать раздел при запуске системы, чтение / запись в раздел.

Установка драйверов Nvidia в Fedora 16

Делал по этому мануалу: http://www.if-not-true-then-false.com/2011/fedora-16-nvidia-drivers-install-guide-disable-nouveau-driver/, всё заработало на Fedora 16 и Nvidia 9800GT. Шаги следующие:

1. Обновить систему (можно только ядро и selinux-policy, перезагрузиться после обновления обязательно):
yum update kernel* selinux-policy*
reboot
2. Добавить RPMFusion репозитории, как я уже писал тут: http://barbitoff.blogspot.com/2011/06/fedora-15.html

3. Установить драйвера:
yum install akmod-nvidia xorg-x11-drv-nvidia-libs
Насколько я понял, использовать лучше именно akmod вместо kmod, т.к. в таком случае драйвера сами пересоберутся после обновления ядра.

4. Удаляем драйвера nouveau из initramfs, делая предварительный бэкап initramfs:
## Backup old initramfs nouveau image ##
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
 ## Create new initramfs image ##
dracut /boot/initramfs-$(uname -r).img $(uname -r)
 5. Модифицируем опции загрузки системы (возможно можно было и без этого, но я на всякий случай сделал). Для этого добавляем "rdblacklist=nouveau nouveau.modeset=0" в GRUB_CMDLINE_LINUX в /etc/default/grub, получим нечто вроде:
GRUB_CMDLINE_LINUX="rd.md=0 rd.lvm=0 rd.dm=0 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0  KEYTABLE=ru LANG=en_US.UTF-8 rdblacklist=nouveau nouveau.modeset=0"
И переконфигурируем grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
6. Перезагружаемся. Если кроме последнего ядра, в GRUB были какие-то старые ядра, они загружаться перестанут, будет загружаться только последнее.

суббота, 3 марта 2012 г.

Трассировка оригинальных SQL-запросов Tecdoc

В принципе можно трассировать запросы средствами ODBC-драйвера Transbase, но он обрезает длинные запросы, и поэтому толку от него мало. Я нашел следующий вариант трассировки:
1) Устанавливаем клиент-северную конфигурацию Tecdoc, т.е. на одном из компов в локалке разворачиваем сервер текдока, на другом - клиент.
2) На сервере запускам сниффер сетевого трафика, например, Wireshark, устанавливаем фильтр таким образом, чтобы он показывал трафик только с той машины, где установлен клиент текдока (в принципе, другие фильтры можно не ставить если между машинами другого трафика не ходит):

3) На клиенте запускаем интерфейс текдока, выполняем в нем некоторые операции. В сниффере видим SQL-запросы к базе =)

CTM-колонки в БД TECDOC

Колонки в таблицах БД TECDOC, оканчивающиеся на "_CTM" и видимые через ODBC с типом CHAR, на самом деле являются набором бит, поэтому при их переносе лучше сразу их приводить к соответствующему типу (в зависимости от целевой СУБД), иначе они чрезмерно раздувают базу (вся база в формате INNODB разрастается до 100+ Гб). Назначение этих полей следующее: они определяют актуальность той или иной записи для различных стран, т.е. если некоторая запись актуальна для страны N, то на позиции N в этом наборе бит будет стоять "1". Исключение составляют только записи со всеми нулями в CTM - они, как я понял, актуальны для всех стран. 
Для России N = 186, однако с учетом того, что в начале строки стоит "0b", условие выбора записей, актуальных для нашей страны, будет выглядеть так (синтаксис MySQL):
... WHERE
LOCATE('1',`..._CTM`)=0
OR
SUBSTRING(`..._CTM` FROM 188 FOR 1)='1'

Число строк в таблицах TECDOC 3 2011

Если вдруг кому понадобиться, чтобы самим не считать (т.к. это достаточно длительный процесс), привожу объемы таблиц TECDOC 3 2011:
TB_AD_AD - 3362245
TB_AD_ADADDTEXT_TXT - 19838
TB_AD_ADQUANTITY - 2
TB_AD_ADQUANTITY_TXT - 325
TB_AD_ADVALUE - 56643
TB_AD_ADVALUE_TXT - 736359
TB_AD_TYPEVALUECOL - 3363935
TB_AD_VALUECOUNTRYRESTRICTION - 6264
TB_APPLICATION_PARAMETER - 17
TB_APPLICATION_TEXT_TXT - 5993
TB_COO_FINISH - 0
TB_COO_QUALCOL_RULES - 830
TB_FINISHEDTYPE - 26959
TB_IMAGE - 34130
TB_IMAGES - 32825
TB_IMAGE_TXT - 0
TB_ITEMMPID_GENART - 13095
TB_LT_COUNTRYFACTOR - 0
TB_LT_KOR_TXT - 299
TB_LT_LT - 9494713
TB_LT_LTCBODETAILS - 1458
TB_LT_LTCBOTYPE - 244584
TB_LT_LTEXCLUDECOUNTRY - 1206
TB_LT_LTEXCLUDEPARTITEM - 363
TB_LT_LTEXCLUSIVE - 2692051
TB_LT_LTINCLUSIVE - 16263912
TB_LT_WORKPOS - 62018
TB_MD_ASSOCITEMS - 133
TB_MD_FORMATS - 11
TB_MD_TEXTITEMMP - 60
TB_MD_WORKADDON - 131426
TB_PART_PART - 0
TB_QUAL_QUAL_TXT - 497536
TB_SEARCHQUALCOLID_QUALID - 953
TB_SEARCH_QUALID_TXT - 190580
TB_TM_AUTOTYPEMANUALS - 116
TB_TM_BLOCKCONTENT - 3158375
TB_TM_ERRORCODETABLECONTENT - 13683
TB_TM_FORMATS - 11
TB_TM_FUELTYPEID - 7
TB_TM_LTCONTENT - 452
TB_TM_MANUAL - 27873
TB_TM_MANUALLANGUAGES - 0
TB_TM_PANELS - 239277
TB_TM_TABLECONTENT - 609415
TB_TM_TABLES - 106931
TB_TM_TEXTS - 111000
TB_TM_TEXTS_TXT - 564109
TB_TM_TYPEMANUALS - 445551
TB_TOPIC_ITEMLT_ITEMAD - 208
TB_TOPIC_ITEMLT_ITEMADFILL - 43
TB_TOPIC_ITEMLT_ITEMADSPEC - 27
TB_TOPIC_ITEMLT_ITEMTM - 58
TB_TOPIC_ITEMMP - 4978
TB_TOPIC_ITEMMPMANUFACTURER - 0
TB_TOPIC_ITEMMP_TXT - 83850
TB_TOPIC_MAINGR - 41
TB_TOPIC_MAINGRSUBGR - 171
TB_TOPIC_MAINGR_TXT - 637
TB_TOPIC_MANUFACTURER - 0
TB_TOPIC_STOCKITEMS - 19
TB_TOPIC_SUBGR - 164
TB_TOPIC_SUBGRITEM - 6430
TB_TOPIC_SUBGR_TXT - 2938
TB_TOPIC_VISIBLEFORMODUL - 41
TB_TREEADDINFO - 258968
TB_TREEADDINFODCR - 3
TB_TREEADDINFOKEY - 24
TB_TREEADDINFOTEXT - 486998
TB_TREECLASSADDINFO - 49
TB_TREECLASSES - 7
TB_TREECOUNTRY - 67
TB_TREECOUNTRY_TXT - 871
TB_TREELANGUAGES - 13
TB_TREELANGUAGES_TXT - 169
TB_TREEMAKE - 65
TB_TREEMAKETEXT - 69
TB_TREERANGE - 2286
TB_TREERANGETEXT - 21753
TB_TREERESTRICTION - 39069
TB_TREETYPE - 40998
TB_TREETYPECOMPONENT - 71781
TB_TREETYPETEXT - 46863
TB_VEHICLE_DATA - 40998
DUAL - 1
TOF_ACCESSORY_LISTS - 169547
TOF_ACL_COUNTRY_QUANTITIES - 0
TOF_ACL_CRITERIA - 138954
TOF_ALI_COORDINATES - 1619619
TOF_ALI_COUNTRY_QUANTITIES - 0
TOF_ARTICLES - 3114785
TOF_ARTICLES_NEW - 126143
TOF_ARTICLE_CRITERIA - 8471297
TOF_ARTICLE_INFO - 397452
TOF_ARTICLE_LISTS - 2149802
TOF_ARTICLE_LIST_CRITERIA - 520692
TOF_ARTICLE_USER_NOTES - 0
TOF_ARTICLE_USER_NOTES_IMP - 0
TOF_ART_COUNTRY_SPECIFICS - 3503488
TOF_ART_LOOKUP - 29419190
TOF_AXLES - 4272
TOF_AXLES_HISTORIES - 0
TOF_AXL_BRAKE_SIZES - 9250
TOF_AXL_WHEEL_BASES - 0
TOF_BRANDS - 2478
TOF_CAB_COUNTRY_SPECIFICS - 0
TOF_CONNECTIONS - 0
TOF_CONST_PATTERN_LOOKUP - 61460
TOF_COUNTRIES - 249
TOF_COUNTRY_DESIGNATIONS - 4306917
TOF_CRITERIA - 1198
TOF_CV_CABS - 738
TOF_CV_MARKS - 36374
TOF_CV_SECONDARY_TYPES - 2354
TOF_DESIGNATIONS - 670495
TOF_DES_TEXTS - 914938
TOF_DOC_TYPES - 5
TOF_ENGINES - 16007
TOF_ENGINE_HISTORIES - 0
TOF_ENG_COUNTRY_SPECIFICS - 10
TOF_ENG_LOOKUP - 18287
TOF_ERR_TRACK_KEY_VALUES - 375
TOF_FILTERS - 58
TOF_GENERIC_ARTICLES - 4215
TOF_GRAPHICS - 1686953
TOF_GRA_DATA_0 - 0
TOF_GRA_DATA_1 - 29275
TOF_GRA_DATA_10 - 42873
TOF_GRA_DATA_11 - 44726
TOF_GRA_DATA_12 - 46865
TOF_GRA_DATA_13 - 49143
TOF_GRA_DATA_14 - 51578
TOF_GRA_DATA_15 - 54111
TOF_GRA_DATA_16 - 55598
TOF_GRA_DATA_17 - 57583
TOF_GRA_DATA_18 - 60345
TOF_GRA_DATA_19 - 63620
TOF_GRA_DATA_2 - 33155
TOF_GRA_DATA_20 - 67359
TOF_GRA_DATA_21 - 70782
TOF_GRA_DATA_22 - 75634
TOF_GRA_DATA_23 - 81407
TOF_GRA_DATA_24 - 88329
TOF_GRA_DATA_25 - 99239
TOF_GRA_DATA_26 - 118450
TOF_GRA_DATA_27 - 178274
TOF_GRA_DATA_28 - 0
TOF_GRA_DATA_29 - 0
TOF_GRA_DATA_3 - 33301
TOF_GRA_DATA_30 - 0
TOF_GRA_DATA_4 - 35211
TOF_GRA_DATA_5 - 35929
TOF_GRA_DATA_6 - 38169
TOF_GRA_DATA_7 - 40691
TOF_GRA_DATA_8 - 41445
TOF_GRA_DATA_9 - 42092
TOF_HELP_MAPPINGS - 0
TOF_KEY_VALUES - 6403
TOF_LANGUAGES - 29
TOF_LA_CRITERIA - 41048149
TOF_LA_INFO - 342064
TOF_LINK_ART - 11745103
TOF_LINK_ART_GA - 3203735
TOF_LINK_CAB_TYP - 25350
TOF_LINK_GA_CRI - 4937
TOF_LINK_GA_STR - 31728
TOF_LINK_GRA_ART - 2245074
TOF_LINK_GRA_LA - 260829
TOF_LINK_LA_AXL - 212907
TOF_LINK_LA_AXL_NEW - 4436
TOF_LINK_LA_ENG - 1678616
TOF_LINK_LA_ENG_NEW - 123113
TOF_LINK_LA_MRK - 3107422
TOF_LINK_LA_MRK_NEW - 379627
TOF_LINK_LA_TYP - 76991682
TOF_LINK_LA_TYP_NEW - 5438482
TOF_LINK_SHO_STR - 1997
TOF_LINK_SHO_STR_TYPE - 33
TOF_LINK_TYP_AXL - 0
TOF_LINK_TYP_ENG - 43755
TOF_LINK_TYP_MRK - 33855
TOF_MANUFACTURERS - 440
TOF_MODELS - 11257
TOF_MOD_TYP_LOOKUP - 1995140
TOF_NATCODES_AUSTRIA - 0
TOF_NATCODES_CH - 0
TOF_NUMBERPLATES_NL - 14068015
TOF_NUMBERPLATES_S - 0
TOF_PARAMETERS - 159
TOF_PRICES - 4400187
TOF_PRICES_IMPORT - 0
TOF_RETAIL_FILTERS - 0
TOF_RETAIL_FILTER_IMPORT - 0
TOF_SEARCH_HISTORIES - 0
TOF_SEARCH_TREE - 2603
TOF_SEARCH_TREE_FILTERS - 0
TOF_SHOPPING_BASKETS - 0
TOF_SHOPPING_BASKET_AUDACON - 0
TOF_SHOPPING_LISTS - 0
TOF_SHOPPING_LISTS_IMP - 0
TOF_SHORTCUTS - 33
TOF_STR_FAMILY_TREE - 7049
TOF_STR_LOOKUP - 332475
TOF_SUPERSEDED_ARTICLES - 159633
TOF_SUPPLIERS - 414
TOF_SUPPLIER_ADDRESSES - 3025
TOF_SUPPLIER_LOGOS - 2276
TOF_SUPPRESSED_MESSAGES - 0
TOF_TECSEL_DEALERS - 0
TOF_TECSEL_LINK_USER_SALE - 0
TOF_TECSEL_PRICES - 0
TOF_TECSEL_PRICE_IMPORT - 0
TOF_TECSEL_SALE_ADDRESSES - 0
TOF_TEXT_MODULES - 899473
TOF_TEXT_MODULE_TEXTS - 167968
TOF_TRANS_CONTROLS - 0
TOF_TRANS_IS_PART_OF - 0
TOF_TRANS_TERMS - 0
TOF_TRANS_TRANSLATIONS - 0
TOF_TRANS_UNITS - 0
TOF_TRANS_USED_TRANSLATION - 0
TOF_TYPES - 57611
TOF_TYPE_NUMBERS - 87027
TOF_TYP_COUNTRY_SPECIFICS - 4459
TOF_TYP_SUSPENSIONS - 16565
TOF_TYP_VOLTAGES - 9990
TOF_TYP_WHEEL_BASES - 30594
TOF_USER_ERROR_REPORTS - 0
TOF_USER_ERROR_REPORTS_IMP - 0
TOF_USER_SETTINGS - 1
TOF_USER_UPDATES - 0
TOF_UTILITY_DIRECT - 454671
TOF_VEHICLE_HISTORIES - 0
TUP_PACKAGE_LOG - 0
TUP_STEP_LOG - 0
TUP_SUBSTEP_LOG - 0
Total: 272271397

Структура БД TECDOC 3 2011

Написал небольшую программку, выводящую структуру БД текдока: список таблиц и колонок в них, с указанием типов. Вот что получилось (если вдруг кому пригодится):


Connection got
Getting catalogs list:
0) TECDOC_CD_3_2011
Getting table names for catalog TECDOC_CD_3_2011
        0) TB_AD_AD
        1) TB_AD_ADADDTEXT_TXT
        2) TB_AD_ADQUANTITY
        3) TB_AD_ADQUANTITY_TXT
        4) TB_AD_ADVALUE
        5) TB_AD_ADVALUE_TXT
        6) TB_AD_TYPEVALUECOL
        7) TB_AD_VALUECOUNTRYRESTRICTION
        8) TB_APPLICATION_PARAMETER
        9) TB_APPLICATION_TEXT_TXT
        10) TB_COO_FINISH
        11) TB_COO_QUALCOL_RULES
        12) TB_FINISHEDTYPE
        13) TB_IMAGE
        14) TB_IMAGES
        15) TB_IMAGE_TXT
        16) TB_ITEMMPID_GENART
        17) TB_LT_COUNTRYFACTOR
        18) TB_LT_KOR_TXT
        19) TB_LT_LT
        20) TB_LT_LTCBODETAILS
        21) TB_LT_LTCBOTYPE
        22) TB_LT_LTEXCLUDECOUNTRY
        23) TB_LT_LTEXCLUDEPARTITEM
        24) TB_LT_LTEXCLUSIVE
        25) TB_LT_LTINCLUSIVE
        26) TB_LT_WORKPOS
        27) TB_MD_ASSOCITEMS
        28) TB_MD_FORMATS
        29) TB_MD_TEXTITEMMP
        30) TB_MD_WORKADDON
        31) TB_PART_PART
        32) TB_QUAL_QUAL_TXT
        33) TB_SEARCHQUALCOLID_QUALID
        34) TB_SEARCH_QUALID_TXT
        35) TB_TM_AUTOTYPEMANUALS
        36) TB_TM_BLOCKCONTENT
        37) TB_TM_ERRORCODETABLECONTENT
        38) TB_TM_FORMATS
        39) TB_TM_FUELTYPEID
        40) TB_TM_LTCONTENT
        41) TB_TM_MANUAL
        42) TB_TM_MANUALLANGUAGES
        43) TB_TM_PANELS
        44) TB_TM_TABLECONTENT
        45) TB_TM_TABLES
        46) TB_TM_TEXTS
        47) TB_TM_TEXTS_TXT
        48) TB_TM_TYPEMANUALS
        49) TB_TOPIC_ITEMLT_ITEMAD
        50) TB_TOPIC_ITEMLT_ITEMADFILL
        51) TB_TOPIC_ITEMLT_ITEMADSPEC
        52) TB_TOPIC_ITEMLT_ITEMTM
        53) TB_TOPIC_ITEMMP
        54) TB_TOPIC_ITEMMPMANUFACTURER
        55) TB_TOPIC_ITEMMP_TXT
        56) TB_TOPIC_MAINGR
        57) TB_TOPIC_MAINGRSUBGR
        58) TB_TOPIC_MAINGR_TXT
        59) TB_TOPIC_MANUFACTURER
        60) TB_TOPIC_STOCKITEMS
        61) TB_TOPIC_SUBGR
        62) TB_TOPIC_SUBGRITEM
        63) TB_TOPIC_SUBGR_TXT
        64) TB_TOPIC_VISIBLEFORMODUL
        65) TB_TREEADDINFO
        66) TB_TREEADDINFODCR
        67) TB_TREEADDINFOKEY
        68) TB_TREEADDINFOTEXT
        69) TB_TREECLASSADDINFO
        70) TB_TREECLASSES
        71) TB_TREECOUNTRY
        72) TB_TREECOUNTRY_TXT
        73) TB_TREELANGUAGES
        74) TB_TREELANGUAGES_TXT
        75) TB_TREEMAKE
        76) TB_TREEMAKETEXT
        77) TB_TREERANGE
        78) TB_TREERANGETEXT
        79) TB_TREERESTRICTION
        80) TB_TREETYPE
        81) TB_TREETYPECOMPONENT
        82) TB_TREETYPETEXT
        83) TB_VEHICLE_DATA
        84) DUAL
        85) TOF_ACCESSORY_LISTS
        86) TOF_ACL_COUNTRY_QUANTITIES
        87) TOF_ACL_CRITERIA
        88) TOF_ALI_COORDINATES
        89) TOF_ALI_COUNTRY_QUANTITIES
        90) TOF_ARTICLES
        91) TOF_ARTICLES_NEW
        92) TOF_ARTICLE_CRITERIA
        93) TOF_ARTICLE_INFO
        94) TOF_ARTICLE_LISTS
        95) TOF_ARTICLE_LIST_CRITERIA
        96) TOF_ARTICLE_USER_NOTES
        97) TOF_ARTICLE_USER_NOTES_IMP
        98) TOF_ART_COUNTRY_SPECIFICS
        99) TOF_ART_LOOKUP
        100) TOF_AXLES
        101) TOF_AXLES_HISTORIES
        102) TOF_AXL_BRAKE_SIZES
        103) TOF_AXL_WHEEL_BASES
        104) TOF_BRANDS
        105) TOF_CAB_COUNTRY_SPECIFICS
        106) TOF_CONNECTIONS
        107) TOF_CONST_PATTERN_LOOKUP
        108) TOF_COUNTRIES
        109) TOF_COUNTRY_DESIGNATIONS
        110) TOF_CRITERIA
        111) TOF_CV_CABS
        112) TOF_CV_MARKS
        113) TOF_CV_SECONDARY_TYPES
        114) TOF_DESIGNATIONS
        115) TOF_DES_TEXTS
        116) TOF_DOC_TYPES
        117) TOF_ENGINES
        118) TOF_ENGINE_HISTORIES
        119) TOF_ENG_COUNTRY_SPECIFICS
        120) TOF_ENG_LOOKUP
        121) TOF_ERR_TRACK_KEY_VALUES
        122) TOF_FILTERS
        123) TOF_GENERIC_ARTICLES
        124) TOF_GRAPHICS
        125) TOF_GRA_DATA_0
        126) TOF_GRA_DATA_1
        127) TOF_GRA_DATA_10
        128) TOF_GRA_DATA_11
        129) TOF_GRA_DATA_12
        130) TOF_GRA_DATA_13
        131) TOF_GRA_DATA_14
        132) TOF_GRA_DATA_15
        133) TOF_GRA_DATA_16
        134) TOF_GRA_DATA_17
        135) TOF_GRA_DATA_18
        136) TOF_GRA_DATA_19
        137) TOF_GRA_DATA_2
        138) TOF_GRA_DATA_20
        139) TOF_GRA_DATA_21
        140) TOF_GRA_DATA_22
        141) TOF_GRA_DATA_23
        142) TOF_GRA_DATA_24
        143) TOF_GRA_DATA_25
        144) TOF_GRA_DATA_26
        145) TOF_GRA_DATA_27
        146) TOF_GRA_DATA_28
        147) TOF_GRA_DATA_29
        148) TOF_GRA_DATA_3
        149) TOF_GRA_DATA_30
        150) TOF_GRA_DATA_4
        151) TOF_GRA_DATA_5
        152) TOF_GRA_DATA_6
        153) TOF_GRA_DATA_7
        154) TOF_GRA_DATA_8
        155) TOF_GRA_DATA_9
        156) TOF_HELP_MAPPINGS
        157) TOF_KEY_VALUES
        158) TOF_LANGUAGES
        159) TOF_LA_CRITERIA
        160) TOF_LA_INFO
        161) TOF_LINK_ART
        162) TOF_LINK_ART_GA
        163) TOF_LINK_CAB_TYP
        164) TOF_LINK_GA_CRI
        165) TOF_LINK_GA_STR
        166) TOF_LINK_GRA_ART
        167) TOF_LINK_GRA_LA
        168) TOF_LINK_LA_AXL
        169) TOF_LINK_LA_AXL_NEW
        170) TOF_LINK_LA_ENG
        171) TOF_LINK_LA_ENG_NEW
        172) TOF_LINK_LA_MRK
        173) TOF_LINK_LA_MRK_NEW
        174) TOF_LINK_LA_TYP
        175) TOF_LINK_LA_TYP_NEW
        176) TOF_LINK_SHO_STR
        177) TOF_LINK_SHO_STR_TYPE
        178) TOF_LINK_TYP_AXL
        179) TOF_LINK_TYP_ENG
        180) TOF_LINK_TYP_MRK
        181) TOF_MANUFACTURERS
        182) TOF_MODELS
        183) TOF_MOD_TYP_LOOKUP
        184) TOF_NATCODES_AUSTRIA
        185) TOF_NATCODES_CH
        186) TOF_NUMBERPLATES_NL
        187) TOF_NUMBERPLATES_S
        188) TOF_PARAMETERS
        189) TOF_PRICES
        190) TOF_PRICES_IMPORT
        191) TOF_RETAIL_FILTERS
        192) TOF_RETAIL_FILTER_IMPORT
        193) TOF_SEARCH_HISTORIES
        194) TOF_SEARCH_TREE
        195) TOF_SEARCH_TREE_FILTERS
        196) TOF_SHOPPING_BASKETS
        197) TOF_SHOPPING_BASKET_AUDACON
        198) TOF_SHOPPING_LISTS
        199) TOF_SHOPPING_LISTS_IMP
        200) TOF_SHORTCUTS
        201) TOF_STR_FAMILY_TREE
        202) TOF_STR_LOOKUP
        203) TOF_SUPERSEDED_ARTICLES
        204) TOF_SUPPLIERS
        205) TOF_SUPPLIER_ADDRESSES
        206) TOF_SUPPLIER_LOGOS
        207) TOF_SUPPRESSED_MESSAGES
        208) TOF_TECSEL_DEALERS
        209) TOF_TECSEL_LINK_USER_SALE
        210) TOF_TECSEL_PRICES
        211) TOF_TECSEL_PRICE_IMPORT
        212) TOF_TECSEL_SALE_ADDRESSES
        213) TOF_TEXT_MODULES
        214) TOF_TEXT_MODULE_TEXTS
        215) TOF_TRANS_CONTROLS
        216) TOF_TRANS_IS_PART_OF
        217) TOF_TRANS_TERMS
        218) TOF_TRANS_TRANSLATIONS
        219) TOF_TRANS_UNITS
        220) TOF_TRANS_USED_TRANSLATION
        221) TOF_TYPES
        222) TOF_TYPE_NUMBERS
        223) TOF_TYP_COUNTRY_SPECIFICS
        224) TOF_TYP_SUSPENSIONS
        225) TOF_TYP_VOLTAGES
        226) TOF_TYP_WHEEL_BASES
        227) TOF_USER_ERROR_REPORTS
        228) TOF_USER_ERROR_REPORTS_IMP
        229) TOF_USER_SETTINGS
        230) TOF_USER_UPDATES
        231) TOF_UTILITY_DIRECT
        232) TOF_VEHICLE_HISTORIES
        233) TUP_PACKAGE_LOG
        234) TUP_STEP_LOG
        235) TUP_SUBSTEP_LOG
Getting column names for table TB_AD_AD
        0) TYPEVALUEID - INTEGER
        1) TYPEID - INTEGER
        2) ITEMMPID - INTEGER
        3) QUALCOLID - INTEGER
Getting column names for table TB_AD_ADADDTEXT_TXT
        0) ADDTEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_AD_ADQUANTITY
        0) QUANTITYID - INTEGER
        1) CONVERSION - FLOAT
        2) CONVQUANTITYID - INTEGER
Getting column names for table TB_AD_ADQUANTITY_TXT
        0) QUANTITYID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_AD_ADVALUE
        0) VALUEID - INTEGER
        1) ADDTEXTID - INTEGER
        2) IMAGEID - INTEGER
        3) QUANTITYID - INTEGER
Getting column names for table TB_AD_ADVALUE_TXT
        0) VALUEID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_AD_TYPEVALUECOL
        0) TYPEVALUECOLID - INTEGER
        1) TYPEVALUEID - INTEGER
        2) VALUEID - INTEGER
        3) SORTNR - INTEGER
Getting column names for table TB_AD_VALUECOUNTRYRESTRICTION
        0) TYPEVALUECOLID - INTEGER
        1) COUNTRYID - INTEGER
        2) EXCLUDE - INTEGER
Getting column names for table TB_APPLICATION_PARAMETER
        0) PARAMETER - VARCHAR
        1) PARAMETERVALUE - VARCHAR
Getting column names for table TB_APPLICATION_TEXT_TXT
        0) APPLICATIONTXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_COO_FINISH
        0) TYPEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) FINISH - INTEGER
        3) ISNEW - INTEGER
Getting column names for table TB_COO_QUALCOL_RULES
        0) QUALCOLID - INTEGER
        1) LONGLIFE - INTEGER
        2) CHANGEAMOUNT - INTEGER
Getting column names for table TB_FINISHEDTYPE
        0) TYPEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) LTFINISHED - INTEGER
Getting column names for table TB_IMAGE
        0) IMAGEID - INTEGER
        1) IMAGENAME - VARCHAR
        2) IMAGETEXTID - INTEGER
Getting column names for table TB_IMAGES
        0) IMAGENAME - VARCHAR
        1) IMAGEDATA - LONGVARBINARY
Getting column names for table TB_IMAGE_TXT
        0) IMAGETEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_ITEMMPID_GENART
        0) ITEMMPID - INTEGER
        1) GENARTNR - INTEGER
        2) GENKRITNR - INTEGER
        3) GENKRITVALUE - VARCHAR
Getting column names for table TB_LT_COUNTRYFACTOR
        0) MAKE_ID - INTEGER
        1) COUNTRY - VARCHAR
        2) COUNTRYID - INTEGER
        3) FACTOR - FLOAT
Getting column names for table TB_LT_KOR_TXT
        0) KORID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_LT_LT
        0) WORKID - INTEGER
        1) ONLYMAINTENANCE - INTEGER
        2) COUNTRYID - SMALLINT
        3) TYPEID - INTEGER
        4) ITEMMPID - INTEGER
        5) KORID - INTEGER
        6) BODYQUALCOLID - INTEGER
        7) QUALCOLID - INTEGER
        8) WORKTIME - FLOAT
        9) COMPOSITETIME - INTEGER
        10) ADDMDWORK - INTEGER
        11) WORKPOSID - INTEGER
Getting column names for table TB_LT_LTCBODETAILS
        0) LTCBOID - INTEGER
        1) ITEMMPID - INTEGER
        2) KORID - INTEGER
Getting column names for table TB_LT_LTCBOTYPE
        0) TYPEID - INTEGER
        1) ITEMMPID - INTEGER
        2) KORID - INTEGER
        3) LTCBOID - INTEGER
Getting column names for table TB_LT_LTEXCLUDECOUNTRY
        0) WORKID - INTEGER
        1) EXCLUDECOUNTRYID - SMALLINT
Getting column names for table TB_LT_LTEXCLUDEPARTITEM
        0) PARTITEMMPID - INTEGER
        1) INCLITEMMPIDS - INTEGER
Getting column names for table TB_LT_LTEXCLUSIVE
        0) WORKID - INTEGER
        1) ITEMMPID - INTEGER
        2) KORID - INTEGER
        3) ITEMISEXCLQUALIFIER - INTEGER
        4) ESSENTIALPART - INTEGER
Getting column names for table TB_LT_LTINCLUSIVE
        0) WORKID - INTEGER
        1) ITEMMPID - INTEGER
        2) KORID - INTEGER
        3) VISIBLE - INTEGER
        4) ESSENTIALPART - INTEGER
        5) MDSPAREPART - INTEGER
Getting column names for table TB_LT_WORKPOS
        0) WORKPOSID - INTEGER
        1) WORKPOSTEXT - VARCHAR
Getting column names for table TB_MD_ASSOCITEMS
        0) ITEMMPID - INTEGER
Getting column names for table TB_MD_FORMATS
        0) FORMATID - INTEGER
        1) TEXTFORMAT - VARCHAR
Getting column names for table TB_MD_TEXTITEMMP
        0) TEXTID - INTEGER
        1) ITEMMPID - INTEGER
Getting column names for table TB_MD_WORKADDON
        0) WORKID - INTEGER
        1) MANUALID - INTEGER
Getting column names for table TB_PART_PART
        0) PARTID - INTEGER
        1) TYPE_ID - INTEGER
        2) ITEMMPID - INTEGER
        3) BODYQUALCOLID - INTEGER
        4) QUALCOLID - INTEGER
        5) COUNTRY - VARCHAR
        6) NOTTOORDER - INTEGER
        7) PARTNR - VARCHAR
        8) PARTPRICE - FLOAT
Getting column names for table TB_QUAL_QUAL_TXT
        0) QUALCOLID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_SEARCHQUALCOLID_QUALID
        0) QUALCOLID - INTEGER
        1) QUALID - INTEGER
Getting column names for table TB_SEARCH_QUALID_TXT
        0) QUALID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TM_AUTOTYPEMANUALS
        0) CLASS_ID - INTEGER
        1) BUILD_FROM - INTEGER
        2) FUELTYPEID - INTEGER
        3) QUALCOLID - INTEGER
        4) ITEMMPID - INTEGER
        5) MANUALID - INTEGER
Getting column names for table TB_TM_BLOCKCONTENT
        0) BLOCKID - INTEGER
        1) ORDERID - INTEGER
        2) KINDOFCONTENTID - INTEGER
        3) CONTENTID - INTEGER
        4) KINDOFLINKID - INTEGER
        5) LINKID - INTEGER
Getting column names for table TB_TM_ERRORCODETABLECONTENT
        0) ECTABLEID - INTEGER
        1) ROW - INTEGER
        2) MID - VARCHAR
        3) PID - VARCHAR
        4) FMI - VARCHAR
        5) DESCRBLOCKID - INTEGER
        6) SOLUTBLOCKID - INTEGER
Getting column names for table TB_TM_FORMATS
        0) FORMATID - INTEGER
        1) TEXTFORMAT - VARCHAR
Getting column names for table TB_TM_FUELTYPEID
        0) FUELTYPEID - INTEGER
        1) FUELKEYVALUETEXTID - INTEGER
Getting column names for table TB_TM_LTCONTENT
        0) CONTENTID - INTEGER
        1) ITEMMPID - INTEGER
        2) KORID - INTEGER
Getting column names for table TB_TM_MANUAL
        0) MANUALID - INTEGER
        1) ITEMMPID - INTEGER
        2) MANUALNAME - VARCHAR
        3) MANUALDESCRIPTION - VARCHAR
Getting column names for table TB_TM_MANUALLANGUAGES
        0) MANUALID - INTEGER
        1) LANGCODE - VARCHAR
Getting column names for table TB_TM_PANELS
        0) MANUALID - INTEGER
        1) PANEL - INTEGER
        2) FIELD - INTEGER
        3) BLOCKID - INTEGER
Getting column names for table TB_TM_TABLECONTENT
        0) TABLEID - INTEGER
        1) ROW - INTEGER
        2) COL - INTEGER
        3) BLOCKID - INTEGER
Getting column names for table TB_TM_TABLES
        0) TABLEID - INTEGER
        1) VISIBLE - INTEGER
Getting column names for table TB_TM_TEXTS
        0) TMTEXTID - INTEGER
        1) TEXTID - INTEGER
        2) PRETEXT - VARCHAR
        3) FORMATID - INTEGER
Getting column names for table TB_TM_TEXTS_TXT
        0) TEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TM_TYPEMANUALS
        0) TYPE_ID - INTEGER
        1) QUALCOLID - INTEGER
        2) ITEMMPID - INTEGER
        3) MANUALID - INTEGER
Getting column names for table TB_TOPIC_ITEMLT_ITEMAD
        0) LTITEMMPID - INTEGER
        1) KORID - INTEGER
        2) ADITEMMPID - INTEGER
Getting column names for table TB_TOPIC_ITEMLT_ITEMADFILL
        0) LTITEMMPID - INTEGER
        1) KORID - INTEGER
        2) ADITEMMPID - INTEGER
Getting column names for table TB_TOPIC_ITEMLT_ITEMADSPEC
        0) LTITEMMPID - INTEGER
        1) KORID - INTEGER
        2) ADITEMMPID - INTEGER
Getting column names for table TB_TOPIC_ITEMLT_ITEMTM
        0) LTITEMMPID - INTEGER
        1) KORID - INTEGER
        2) TMITEMMPID - INTEGER
Getting column names for table TB_TOPIC_ITEMMP
        0) ITEMMPID - INTEGER
        1) KINDOFWORKID - INTEGER
Getting column names for table TB_TOPIC_ITEMMPMANUFACTURER
        0) ITEMMPID - INTEGER
        1) MANUFACTURERID - INTEGER
        2) MANUFACTURERITEMNAME - VARCHAR
Getting column names for table TB_TOPIC_ITEMMP_TXT
        0) ITEMMPID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TOPIC_MAINGR
        0) MGID - INTEGER
        1) DOMAINID - INTEGER
        2) SORTNR - INTEGER
        3) MGTEXTID - INTEGER
        4) IMAGEID - INTEGER
Getting column names for table TB_TOPIC_MAINGRSUBGR
        0) MGID - INTEGER
        1) SORTNR - INTEGER
        2) SGRID - INTEGER
Getting column names for table TB_TOPIC_MAINGR_TXT
        0) MGTEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TOPIC_MANUFACTURER
        0) MANUFACTURERID - INTEGER
        1) MANUFACTURERNAME - VARCHAR
Getting column names for table TB_TOPIC_STOCKITEMS
        0) ITEMMPID - INTEGER
Getting column names for table TB_TOPIC_SUBGR
        0) SGRID - INTEGER
        1) SGRTEXTID - INTEGER
        2) IMAGEID - INTEGER
Getting column names for table TB_TOPIC_SUBGRITEM
        0) SGRID - INTEGER
        1) SORTNR - INTEGER
        2) ITEMMPID - INTEGER
Getting column names for table TB_TOPIC_SUBGR_TXT
        0) SGRTEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TOPIC_VISIBLEFORMODUL
        0) MGID - INTEGER
        1) MODULID - INTEGER
Getting column names for table TB_TREEADDINFO
        0) TYPEID - INTEGER
        1) ADDINFOKEYID - INTEGER
        2) COUNTRYID - INTEGER
        3) KEYVALUETEXTID - INTEGER
Getting column names for table TB_TREEADDINFODCR
        0) ADDINFOKEYID - INTEGER
        1) COUNTRYID - SMALLINT
Getting column names for table TB_TREEADDINFOKEY
        0) ADDINFOKEYID - INTEGER
        1) KEYTEXTID - INTEGER
        2) FILTERRANGE - FLOAT
        3) KEYDATATYPE - VARCHAR
Getting column names for table TB_TREEADDINFOTEXT
        0) TEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
        3) INTVALUE - INTEGER
        4) FLOATVALUE - FLOAT
Getting column names for table TB_TREECLASSADDINFO
        0) CLASSID - INTEGER
        1) ADDINFOKEYID - INTEGER
        2) SORTNR - INTEGER
        3) ALLOWMULTIPLE - INTEGER
Getting column names for table TB_TREECLASSES
        0) CLASSID - INTEGER
        1) CLASSTEXTID - INTEGER
        2) MAKEID - INTEGER
Getting column names for table TB_TREECOUNTRY
        0) COUNTRYID - SMALLINT
        1) COUNTRY - VARCHAR
        2) SORTNR - SMALLINT
        3) TCDCOUNTRY - VARCHAR
        4) CURRENCY - VARCHAR
        5) EXCHANGERATE - FLOAT
        6) NATVEHICLENRADDINFOKEY - INTEGER
Getting column names for table TB_TREECOUNTRY_TXT
        0) COUNTRYID - INTEGER
        1) LANGCODE - VARCHAR
        2) COUNTRYNAME - VARCHAR
Getting column names for table TB_TREELANGUAGES
        0) LANGCODE - VARCHAR
        1) LANGTEXTID - INTEGER
        2) LANGCOMPLETEFILLED - INTEGER
Getting column names for table TB_TREELANGUAGES_TXT
        0) LANGTEXTID - INTEGER
        1) LANGCODE - VARCHAR
        2) TEXTSTR - VARCHAR
Getting column names for table TB_TREEMAKE
        0) MAKEID - INTEGER
        1) ISCOMPONENT - INTEGER
        2) TCDMAKE - INTEGER
Getting column names for table TB_TREEMAKETEXT
        0) MAKEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) MAKENAME - VARCHAR
        3) EXCLUDE - INTEGER
Getting column names for table TB_TREERANGE
        0) MAKEID - INTEGER
        1) RANGEID - INTEGER
        2) TCDRANGE - INTEGER
        3) CLASSID - INTEGER
Getting column names for table TB_TREERANGETEXT
        0) RANGEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) RANGENAME - VARCHAR
        3) EXCLUDE - INTEGER
Getting column names for table TB_TREERESTRICTION
        0) TYPEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) EXCLUDE - INTEGER
Getting column names for table TB_TREETYPE
        0) RANGEID - INTEGER
        1) TYPEID - INTEGER
        2) TCDTYPE - INTEGER
        3) SHOWASCAR - INTEGER
        4) SHOWASTRUCK - INTEGER
        5) SHOWASMOTORCYCLE - INTEGER
Getting column names for table TB_TREETYPECOMPONENT
        0) TYPEID - INTEGER
        1) COMPONENTTYPEID - INTEGER
Getting column names for table TB_TREETYPETEXT
        0) TYPEID - INTEGER
        1) COUNTRYID - SMALLINT
        2) TYPENAME - VARCHAR
        3) EXCLUDE - INTEGER
Getting column names for table TB_VEHICLE_DATA
        0) TYPE_ID - INTEGER
        1) COUNTRYID - INTEGER
        2) TYPE_MD - INTEGER
        3) TYPE_LT - INTEGER
        4) TYPE_AD - INTEGER
        5) TYPE_TM - INTEGER
        6) TYPE_MA - INTEGER
        7) TYPE_MT - INTEGER
        8) TYPE_TD - INTEGER
        9) TYPE_SOS - INTEGER
        10) TYPE_ATM - INTEGER
        11) TYPE_WD - INTEGER
        12) TYPE_CTRL - INTEGER
Getting column names for table DUAL
        0) A - INTEGER
Getting column names for table TOF_ACCESSORY_LISTS
        0) ACL_ART_ID - INTEGER
        1) ACL_NR - SMALLINT
        2) ACL_SORT - SMALLINT
        3) ACL_LINK_TYPE - SMALLINT
        4) ACL_MFA_ID - SMALLINT
        5) ACL_MOD_ID - INTEGER
        6) ACL_TYP_ID - INTEGER
        7) ACL_ENG_ID - INTEGER
        8) ACL_ACCESSORY_ART_ID - INTEGER
        9) ACL_QUANTITY - SMALLINT
        10) ACL_GA_ID - INTEGER
        11) ACL_CTM - CHAR
        12) ACL_DES_ID - INTEGER
Getting column names for table TOF_ACL_COUNTRY_QUANTITIES
        0) ACCQ_ART_ID - INTEGER
        1) ACCQ_NR - SMALLINT
        2) ACCQ_SORT - SMALLINT
        3) ACCQ_CTM - CHAR
        4) ACCQ_QUANTITY - SMALLINT
Getting column names for table TOF_ACL_CRITERIA
        0) ACC_ART_ID - INTEGER
        1) ACC_NR - SMALLINT
        2) ACC_SORT - SMALLINT
        3) ACC_SEQ_NR - SMALLINT
        4) ACC_CRI_ID - SMALLINT
        5) ACC_VALUE - VARCHAR
        6) ACC_KV_DES_ID - INTEGER
        7) ACC_CTM - CHAR
Getting column names for table TOF_ALI_COORDINATES
        0) ACO_GRA_ID - VARCHAR
        1) ACO_GRA_LNG_ID - SMALLINT
        2) ACO_ALI_ART_ID - INTEGER
        3) ACO_ALI_SORT - SMALLINT
        4) ACO_SORT - SMALLINT
        5) ACO_TYPE - SMALLINT
        6) ACO_X1 - SMALLINT
        7) ACO_Y1 - SMALLINT
        8) ACO_X2 - SMALLINT
        9) ACO_Y2 - SMALLINT
Getting column names for table TOF_ALI_COUNTRY_QUANTITIES
        0) ACQ_ALI_ART_ID - INTEGER
        1) ACQ_ALI_SORT - SMALLINT
        2) ACQ_QUANTITY - SMALLINT
        3) ACQ_CTM - CHAR
Getting column names for table TOF_ARTICLES
        0) ART_ID - INTEGER
        1) ART_ARTICLE_NR - VARCHAR
        2) ART_SUP_ID - SMALLINT
        3) ART_DES_ID - INTEGER
        4) ART_COMPLETE_DES_ID - INTEGER
        5) ART_CTM - CHAR
        6) ART_PACK_SELFSERVICE - SMALLINT
        7) ART_MATERIAL_MARK - SMALLINT
        8) ART_REPLACEMENT - SMALLINT
        9) ART_ACCESSORY - SMALLINT
        10) ART_BATCH_SIZE1 - INTEGER
        11) ART_BATCH_SIZE2 - INTEGER
Getting column names for table TOF_ARTICLES_NEW
        0) ARTN_SUP_ID - SMALLINT
        1) ARTN_ART_ID - INTEGER
Getting column names for table TOF_ARTICLE_CRITERIA
        0) ACR_ART_ID - INTEGER
        1) ACR_GA_ID - INTEGER
        2) ACR_SORT - SMALLINT
        3) ACR_CRI_ID - SMALLINT
        4) ACR_VALUE - VARCHAR
        5) ACR_KV_DES_ID - INTEGER
        6) ACR_CTM - CHAR
        7) ACR_DISPLAY - SMALLINT
Getting column names for table TOF_ARTICLE_INFO
        0) AIN_ART_ID - INTEGER
        1) AIN_GA_ID - INTEGER
        2) AIN_SORT - SMALLINT
        3) AIN_CTM - CHAR
        4) AIN_KV_TYPE - VARCHAR
        5) AIN_DISPLAY - SMALLINT
        6) AIN_TMO_ID - INTEGER
Getting column names for table TOF_ARTICLE_LISTS
        0) ALI_ART_ID - INTEGER
        1) ALI_SORT - SMALLINT
        2) ALI_ART_ID_COMPONENT - INTEGER
        3) ALI_QUANTITY - SMALLINT
        4) ALI_CTM - CHAR
        5) ALI_GA_ID - INTEGER
Getting column names for table TOF_ARTICLE_LIST_CRITERIA
        0) ALC_ALI_ART_ID - INTEGER
        1) ALC_ALI_SORT - SMALLINT
        2) ALC_CTM - CHAR
        3) ALC_SORT - SMALLINT
        4) ALC_CRI_ID - SMALLINT
        5) ALC_VALUE - VARCHAR
        6) ALC_KV_DES_ID - INTEGER
        7) ALC_TYP_ID - INTEGER
        8) ALC_ENG_ID - INTEGER
        9) ALC_AXL_ID - INTEGER
        10) ALC_MRK_ID - INTEGER
Getting column names for table TOF_ARTICLE_USER_NOTES
        0) AUN_ART_ID - INTEGER
        1) AUN_KIND - CHAR
        2) AUN_ENG_ID - INTEGER
        3) AUN_TYP_ID - INTEGER
        4) AUN_AXL_ID - INTEGER
        5) AUN_MRK_ID - INTEGER
        6) AUN_TEXT - VARCHAR
        7) AUN_USS_ID - SMALLINT
Getting column names for table TOF_ARTICLE_USER_NOTES_IMP
        0) AUN_KIND - CHAR
        1) AUN_ENG_ID - INTEGER
        2) AUN_TYP_ID - INTEGER
        3) AUN_AXL_ID - INTEGER
        4) AUN_MRK_ID - INTEGER
        5) AUN_TEXT - VARCHAR
        6) AUN_USS_ID - SMALLINT
        7) AUN_ART_ARTICLE_NR - VARCHAR
        8) AUN_SUP_SUPPLIER_NR - SMALLINT
Getting column names for table TOF_ART_COUNTRY_SPECIFICS
        0) ACS_ART_ID - INTEGER
        1) ACS_CTM - CHAR
        2) ACS_PACK_UNIT - INTEGER
        3) ACS_QUANTITY_PER_UNIT - INTEGER
        4) ACS_KV_STATUS_DES_ID - INTEGER
        5) ACS_KV_STATUS - VARCHAR
        6) ACS_STATUS_DATE - TIMESTAMP
Getting column names for table TOF_ART_LOOKUP
        0) ARL_ART_ID - INTEGER
        1) ARL_SEARCH_NUMBER - VARCHAR
        2) ARL_KIND - CHAR
        3) ARL_CTM - CHAR
        4) ARL_BRA_ID - SMALLINT
        5) ARL_DISPLAY_NR - VARCHAR
        6) ARL_DISPLAY - SMALLINT
        7) ARL_BLOCK - SMALLINT
        8) ARL_SORT - SMALLINT
Getting column names for table TOF_AXLES
        0) AXL_ID - INTEGER
        1) AXL_DESCRIPTION - VARCHAR
        2) AXL_SEARCH_TEXT - VARCHAR
        3) AXL_MMA_CDS_ID - INTEGER
        4) AXL_MOD_ID - INTEGER
        5) AXL_SORT - INTEGER
        6) AXL_PCON_START - INTEGER
        7) AXL_PCON_END - INTEGER
        8) AXL_KV_TYPE_DES_ID - INTEGER
        9) AXL_KV_STYLE_DES_ID - INTEGER
        10) AXL_KV_BRAKE_TYPE_DES_ID - INTEGER
        11) AXL_KV_BODY_DES_ID - INTEGER
        12) AXL_LOAD_FROM - INTEGER
        13) AXL_LOAD_UPTO - INTEGER
        14) AXL_KV_WHEEL_MOUNT_DES_ID - INTEGER
        15) AXL_TRACK_GAUGE - INTEGER
        16) AXL_HUB_SYSTEM - VARCHAR
        17) AXL_DISTANCE_FROM - INTEGER
        18) AXL_DISTANCE_UPTO - INTEGER
        19) AXL_SEARCH_BRAKE_SIZES - VARCHAR
        20) AXL_LA_CTM - CHAR
Getting column names for table TOF_AXLES_HISTORIES
        0) AHI_USS_ID - SMALLINT
        1) AHI_AXL_ID - INTEGER
        2) AHI_SORT - INTEGER
Getting column names for table TOF_AXL_BRAKE_SIZES
        0) ABS_AXL_ID - INTEGER
        1) ABS_SORT - SMALLINT
        2) ABS_KV_BRAKE_SIZE_DES_ID - INTEGER
        3) ABS_DESCRIPTION - VARCHAR
Getting column names for table TOF_AXL_WHEEL_BASES
        0) AWB_AXL_ID - INTEGER
        1) AWB_NR - SMALLINT
        2) AWB_KV_AXLE_POS_DES_ID - INTEGER
        3) AWB_WHEEL_BASE - INTEGER
Getting column names for table TOF_BRANDS
        0) BRA_ID - SMALLINT
        1) BRA_MFC_CODE - VARCHAR
        2) BRA_BRAND - VARCHAR
        3) BRA_MF_NR - INTEGER
Getting column names for table TOF_CAB_COUNTRY_SPECIFICS
        0) CAC_CAB_ID - INTEGER
        1) CAC_COU_ID - SMALLINT
        2) CAC_KV_SIZE_DES_ID - INTEGER
        3) CAC_PCON_START - INTEGER
        4) CAC_PCON_END - INTEGER
        5) X_CAC_DESIGN - VARCHAR
        6) X_CAC_LENGTH - INTEGER
        7) X_CAC_HEIGHT - INTEGER
        8) X_CAC_WIDTH - INTEGER
Getting column names for table TOF_CONNECTIONS
        0) TOC_CONNECTION - VARCHAR
        1) TOC_TIMESTAMP - TIMESTAMP
Getting column names for table TOF_CONST_PATTERN_LOOKUP
        0) CPL_ID - INTEGER
        1) CPL_CTM - CHAR
        2) CPL_SORT - SMALLINT
        3) CPL_ORIGINAL_TEXT - VARCHAR
        4) CPL_SEARCH_TEXT - VARCHAR
        5) CPL_KIND - SMALLINT
Getting column names for table TOF_COUNTRIES
        0) COU_ID - SMALLINT
        1) COU_CC - VARCHAR
        2) COU_DES_ID - INTEGER
        3) COU_CTM - CHAR
        4) COU_CURRENCY_CODE - VARCHAR
        5) COU_ISO2 - VARCHAR
        6) COU_IS_GROUP - SMALLINT
Getting column names for table TOF_COUNTRY_DESIGNATIONS
        0) CDS_ID - INTEGER
        1) CDS_CTM - CHAR
        2) CDS_LNG_ID - SMALLINT
        3) CDS_TEX_ID - INTEGER
Getting column names for table TOF_CRITERIA
        0) CRI_ID - SMALLINT
        1) CRI_DES_ID - INTEGER
        2) CRI_SHORT_DES_ID - INTEGER
        3) CRI_UNIT_DES_ID - INTEGER
        4) CRI_TYPE - CHAR
        5) CRI_KT_ID - SMALLINT
        6) CRI_IS_INTERVAL - SMALLINT
        7) CRI_SUCCESSOR - SMALLINT
Getting column names for table TOF_CV_CABS
        0) CAB_ID - INTEGER
        1) CAB_MOD_ID - INTEGER
        2) CAB_CDS_ID - INTEGER
        3) CAB_MMC_CDS_ID - INTEGER
        4) CAB_KV_SIZE_DES_ID - INTEGER
        5) CAB_PCON_START - INTEGER
        6) CAB_PCON_END - INTEGER
        7) CAB_CTM - CHAR
        8) X_CAB_DESIGN - VARCHAR
        9) X_CAB_LENGTH - INTEGER
        10) X_CAB_HEIGHT - INTEGER
        11) X_CAB_WIDTH - INTEGER
Getting column names for table TOF_CV_MARKS
        0) MRK_ID - INTEGER
        1) MRK_DESIGNATION - VARCHAR
        2) MRK_SEARCH_TEXT - VARCHAR
        3) MRK_MFA_ID - SMALLINT
        4) MRK_CTM - CHAR
        5) MRK_LA_CTM - CHAR
Getting column names for table TOF_CV_SECONDARY_TYPES
        0) CST_TYP_ID - INTEGER
        1) CST_SUBNR - SMALLINT
        2) CST_SORT - SMALLINT
        3) CST_CDS_ID - INTEGER
        4) CST_PCON_START - INTEGER
        5) CST_PCON_END - INTEGER
        6) CST_CTM - CHAR
Getting column names for table TOF_DESIGNATIONS
        0) DES_ID - INTEGER
        1) DES_LNG_ID - SMALLINT
        2) DES_TEX_ID - INTEGER
Getting column names for table TOF_DES_TEXTS
        0) TEX_ID - INTEGER
        1) TEX_TEXT - VARCHAR
Getting column names for table TOF_DOC_TYPES
        0) DOC_TYPE - TINYINT
        1) DOC_EXTENSION - VARCHAR
Getting column names for table TOF_ENGINES
        0) ENG_ID - INTEGER
        1) ENG_MFA_ID - SMALLINT
        2) ENG_CODE - VARCHAR
        3) ENG_PCON_START - INTEGER
        4) ENG_PCON_END - INTEGER
        5) ENG_KW_FROM - INTEGER
        6) ENG_KW_UPTO - INTEGER
        7) ENG_HP_FROM - INTEGER
        8) ENG_HP_UPTO - INTEGER
        9) ENG_VALVES - SMALLINT
        10) ENG_CYLINDERS - SMALLINT
        11) ENG_CCM_FROM - INTEGER
        12) ENG_CCM_UPTO - INTEGER
        13) ENG_KV_DESIGN_DES_ID - INTEGER
        14) ENG_KV_FUEL_TYPE_DES_ID - INTEGER
        15) ENG_KV_FUEL_SUPPLY_DES_ID - INTEGER
        16) ENG_CTM - CHAR
        17) ENG_LA_CTM - CHAR
        18) ENG_DESCRIPTION - VARCHAR
        19) ENG_KV_ENGINE_DES_ID - INTEGER
        20) ENG_KW_RPM_FROM - INTEGER
        21) ENG_KW_RPM_UPTO - INTEGER
        22) ENG_TORQUE_FROM - INTEGER
        23) ENG_TORQUE_UPTO - INTEGER
        24) ENG_TORQUE_RPM_FROM - INTEGER
        25) ENG_TORQUE_RPM_UPTO - INTEGER
        26) ENG_COMPRESSION_FROM - NUMERIC
        27) ENG_COMPRESSION_UPTO - NUMERIC
        28) ENG_DRILLING - NUMERIC
        29) ENG_EXTENSION - NUMERIC
        30) ENG_CRANKSHAFT - SMALLINT
        31) ENG_KV_CHARGE_DES_ID - INTEGER
        32) ENG_KV_GAS_NORM_DES_ID - INTEGER
        33) ENG_KV_CYLINDERS_DES_ID - INTEGER
        34) ENG_KV_CONTROL_DES_ID - INTEGER
        35) ENG_KV_VALVE_CONTROL_DES_ID - INTEGER
        36) ENG_KV_COOLING_DES_ID - INTEGER
        37) ENG_CCM_TAX_FROM - INTEGER
        38) ENG_CCM_TAX_UPTO - INTEGER
        39) ENG_LITRES_TAX_FROM - NUMERIC
        40) ENG_LITRES_TAX_UPTO - NUMERIC
        41) ENG_LITRES_FROM - NUMERIC
        42) ENG_LITRES_UPTO - NUMERIC
        43) ENG_KV_USE_DES_ID - INTEGER
Getting column names for table TOF_ENGINE_HISTORIES
        0) EHI_USS_ID - SMALLINT
        1) EHI_ENG_ID - INTEGER
        2) EHI_SORT - INTEGER
Getting column names for table TOF_ENG_COUNTRY_SPECIFICS
        0) ENC_ENG_ID - INTEGER
        1) ENC_COU_ID - SMALLINT
        2) ENC_PCON_START - INTEGER
        3) ENC_PCON_END - INTEGER
        4) ENC_KW_FROM - INTEGER
        5) ENC_KW_UPTO - INTEGER
        6) ENC_HP_FROM - INTEGER
        7) ENC_HP_UPTO - INTEGER
        8) ENC_VALVES - SMALLINT
        9) ENC_CYLINDERS - SMALLINT
        10) ENC_CCM_FROM - INTEGER
        11) ENC_CCM_UPTO - INTEGER
        12) ENC_KV_DESIGN_DES_ID - INTEGER
        13) ENC_KV_FUEL_TYPE_DES_ID - INTEGER
        14) ENC_KV_FUEL_SUPPLY_DES_ID - INTEGER
        15) ENC_DESCRIPTION - VARCHAR
        16) ENC_KV_ENGINE_DES_ID - INTEGER
        17) ENC_KW_RPM_FROM - INTEGER
        18) ENC_KW_RPM_UPTO - INTEGER
        19) ENC_TORQUE_FROM - INTEGER
        20) ENC_TORQUE_UPTO - INTEGER
        21) ENC_TORQUE_RPM_FROM - INTEGER
        22) ENC_TORQUE_RPM_UPTO - INTEGER
        23) ENC_COMPRESSION_FROM - NUMERIC
        24) ENC_COMPRESSION_UPTO - NUMERIC
        25) ENC_DRILLING - NUMERIC
        26) ENC_EXTENSION - NUMERIC
        27) ENC_CRANKSHAFT - SMALLINT
        28) ENC_KV_CHARGE_DES_ID - INTEGER
        29) ENC_KV_GAS_NORM_DES_ID - INTEGER
        30) ENC_KV_CYLINDERS_DES_ID - INTEGER
        31) ENC_KV_CONTROL_DES_ID - INTEGER
        32) ENC_KV_VALVE_CONTROL_DES_ID - INTEGER
        33) ENC_KV_COOLING_DES_ID - INTEGER
        34) ENC_CCM_TAX_FROM - INTEGER
        35) ENC_CCM_TAX_UPTO - INTEGER
        36) ENC_LITRES_TAX_FROM - NUMERIC
        37) ENC_LITRES_TAX_UPTO - NUMERIC
        38) ENC_LITRES_FROM - NUMERIC
        39) ENC_LITRES_UPTO - NUMERIC
        40) ENC_KV_USE_DES_ID - INTEGER
Getting column names for table TOF_ENG_LOOKUP
        0) ENL_ENG_ID - INTEGER
        1) ENL_SEARCH_TEXT - VARCHAR
        2) ENL_CTM - CHAR
Getting column names for table TOF_ERR_TRACK_KEY_VALUES
        0) ETK_TAB_NR - SMALLINT
        1) ETK_KEY - VARCHAR
        2) ETK_LNG_ID - SMALLINT
        3) ETK_SORTNR - SMALLINT
        4) ETK_DESCRIPTION - VARCHAR
Getting column names for table TOF_FILTERS
        0) FIL_USS_ID - INTEGER
        1) FIL_KIND - SMALLINT
        2) FIL_VALUE - INTEGER
Getting column names for table TOF_GENERIC_ARTICLES
        0) GA_ID - INTEGER
        1) GA_NR - SMALLINT
        2) GA_DES_ID - INTEGER
        3) GA_DES_ID_STANDARD - INTEGER
        4) GA_DES_ID_ASSEMBLY - INTEGER
        5) GA_DES_ID_INTENDED - INTEGER
        6) GA_UNIVERSAL - SMALLINT
Getting column names for table TOF_GRAPHICS
        0) GRA_SUP_ID - SMALLINT
        1) GRA_ID - VARCHAR
        2) GRA_DOC_TYPE - TINYINT
        3) GRA_LNG_ID - SMALLINT
        4) GRA_GRD_ID - INTEGER
        5) GRA_TYPE - SMALLINT
        6) GRA_NORM - VARCHAR
        7) GRA_SUPPLIER_NR - SMALLINT
        8) GRA_TAB_NR - SMALLINT
        9) GRA_DES_ID - INTEGER
Getting column names for table TOF_GRA_DATA_0
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_1
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_10
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_11
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_12
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_13
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_14
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_15
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_16
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_17
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_18
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_19
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_2
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_20
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_21
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_22
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_23
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_24
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_25
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_26
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_27
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_28
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_29
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_3
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_30
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_4
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_5
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_6
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_7
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_8
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_GRA_DATA_9
        0) GRD_ID - INTEGER
        1) GRD_GRAPHIC - LONGVARBINARY
Getting column names for table TOF_HELP_MAPPINGS
        0) HLP_TOPIC - VARCHAR
        1) HLP_FILE - VARCHAR
        2) HLP_NOTICE - VARCHAR
Getting column names for table TOF_KEY_VALUES
        0) KV_KT_ID - SMALLINT
        1) KV_KV - VARCHAR
        2) KV_DES_ID - INTEGER
Getting column names for table TOF_LANGUAGES
        0) LNG_ID - SMALLINT
        1) LNG_DES_ID - INTEGER
        2) LNG_ISO2 - VARCHAR
        3) LNG_CODEPAGE - VARCHAR
Getting column names for table TOF_LA_CRITERIA
        0) LAC_LA_ID - INTEGER
        1) LAC_SORT - INTEGER
        2) LAC_CRI_ID - SMALLINT
        3) LAC_VALUE - VARCHAR
        4) LAC_KV_DES_ID - INTEGER
        5) LAC_CTM - CHAR
        6) LAC_DISPLAY - SMALLINT
Getting column names for table TOF_LA_INFO
        0) LIN_LA_ID - INTEGER
        1) LIN_SORT - SMALLINT
        2) LIN_CTM - CHAR
        3) LIN_KV_TYPE - VARCHAR
        4) LIN_DISPLAY - SMALLINT
        5) LIN_TMO_ID - INTEGER
Getting column names for table TOF_LINK_ART
        0) LA_ID - INTEGER
        1) LA_ART_ID - INTEGER
        2) LA_GA_ID - INTEGER
        3) LA_CTM - CHAR
        4) LA_SORT - INTEGER
Getting column names for table TOF_LINK_ART_GA
        0) LAG_ART_ID - INTEGER
        1) LAG_GA_ID - INTEGER
        2) LAG_SUP_ID - SMALLINT
Getting column names for table TOF_LINK_CAB_TYP
        0) LCT_TYP_ID - INTEGER
        1) LCT_NR - SMALLINT
        2) LCT_CAB_ID - INTEGER
        3) LCT_PCON_START - INTEGER
        4) LCT_PCON_END - INTEGER
        5) LCT_CTM - CHAR
Getting column names for table TOF_LINK_GA_CRI
        0) LGC_GA_NR - SMALLINT
        1) LGC_CRI_ID - SMALLINT
        2) LGC_CTM - CHAR
        3) LGC_SORT - SMALLINT
        4) LGC_SUGGESTION - TINYINT
Getting column names for table TOF_LINK_GA_STR
        0) LGS_STR_ID - INTEGER
        1) LGS_GA_ID - INTEGER
Getting column names for table TOF_LINK_GRA_ART
        0) LGA_ART_ID - INTEGER
        1) LGA_SORT - SMALLINT
        2) LGA_CTM - CHAR
        3) LGA_GRA_ID - VARCHAR
Getting column names for table TOF_LINK_GRA_LA
        0) LGL_LA_ID - INTEGER
        1) LGL_TYP_ID - INTEGER
        2) LGL_ENG_ID - INTEGER
        3) LGL_AXL_ID - INTEGER
        4) LGL_MRK_ID - INTEGER
        5) LGL_SORT - SMALLINT
        6) LGL_CTM - CHAR
        7) LGL_GRA_ID - VARCHAR
Getting column names for table TOF_LINK_LA_AXL
        0) LAA_LA_ID - INTEGER
        1) LAA_AXL_ID - INTEGER
        2) LAA_GA_ID - INTEGER
        3) LAA_CTM - CHAR
        4) LAA_SUP_ID - SMALLINT
        5) LAA_SORT - INTEGER
Getting column names for table TOF_LINK_LA_AXL_NEW
        0) LAAN_LA_ID - INTEGER
        1) LAAN_AXL_ID - INTEGER
        2) LAAN_GA_ID - INTEGER
        3) LAAN_CTM - CHAR
        4) LAAN_SUP_ID - SMALLINT
        5) LAAN_SORT - INTEGER
Getting column names for table TOF_LINK_LA_ENG
        0) LAE_LA_ID - INTEGER
        1) LAE_ENG_ID - INTEGER
        2) LAE_GA_ID - INTEGER
        3) LAE_CTM - CHAR
        4) LAE_SUP_ID - SMALLINT
        5) LAE_SORT - INTEGER
Getting column names for table TOF_LINK_LA_ENG_NEW
        0) LAEN_SUP_ID - SMALLINT
        1) LAEN_GA_ID - INTEGER
        2) LAEN_LA_ID - INTEGER
        3) LAEN_ENG_ID - INTEGER
        4) LAEN_CTM - CHAR
        5) LAEN_SORT - INTEGER
Getting column names for table TOF_LINK_LA_MRK
        0) LAM_LA_ID - INTEGER
        1) LAM_MRK_ID - INTEGER
        2) LAM_GA_ID - INTEGER
        3) LAM_CTM - CHAR
        4) LAM_SUP_ID - SMALLINT
        5) LAM_SORT - INTEGER
Getting column names for table TOF_LINK_LA_MRK_NEW
        0) LAMN_LA_ID - INTEGER
        1) LAMN_MRK_ID - INTEGER
        2) LAMN_GA_ID - INTEGER
        3) LAMN_CTM - CHAR
        4) LAMN_SUP_ID - SMALLINT
        5) LAMN_SORT - INTEGER
Getting column names for table TOF_LINK_LA_TYP
        0) LAT_TYP_ID - INTEGER
        1) LAT_LA_ID - INTEGER
        2) LAT_GA_ID - INTEGER
        3) LAT_CTM - CHAR
        4) LAT_SUP_ID - SMALLINT
        5) LAT_SORT - INTEGER
Getting column names for table TOF_LINK_LA_TYP_NEW
        0) LATN_SUP_ID - SMALLINT
        1) LATN_GA_ID - INTEGER
        2) LATN_TYP_ID - INTEGER
        3) LATN_LA_ID - INTEGER
        4) LATN_CTM - CHAR
        5) LATN_SORT - INTEGER
Getting column names for table TOF_LINK_SHO_STR
        0) LSS_SHO_ID - SMALLINT
        1) LSS_STR_ID - INTEGER
        2) LSS_EXPAND - SMALLINT
        3) LSS_LEVEL - SMALLINT
        4) LSS_SORT - SMALLINT
Getting column names for table TOF_LINK_SHO_STR_TYPE
        0) LST_STR_TYPE - SMALLINT
        1) LST_SHO_ID - SMALLINT
        2) LST_SORT - SMALLINT
Getting column names for table TOF_LINK_TYP_AXL
        0) LTA_TYP_ID - INTEGER
        1) LTA_SORT - SMALLINT
        2) LTA_AXL_ID - INTEGER
        3) LTA_PCON_START - INTEGER
        4) LTA_PCON_END - INTEGER
        5) LTA_CTM - CHAR
        6) LTA_KV_AXLE_POS_DES_ID - INTEGER
Getting column names for table TOF_LINK_TYP_ENG
        0) LTE_TYP_ID - INTEGER
        1) LTE_NR - SMALLINT
        2) LTE_ENG_ID - INTEGER
        3) LTE_PCON_START - INTEGER
        4) LTE_PCON_END - INTEGER
        5) LTE_CTM - CHAR
Getting column names for table TOF_LINK_TYP_MRK
        0) LMK_TYP_ID - INTEGER
        1) LMK_MRK_ID - INTEGER
        2) LMK_CTM - CHAR
Getting column names for table TOF_MANUFACTURERS
        0) MFA_ID - SMALLINT
        1) MFA_PC_MFC - SMALLINT
        2) MFA_CV_MFC - SMALLINT
        3) MFA_AXL_MFC - SMALLINT
        4) MFA_ENG_MFC - SMALLINT
        5) MFA_ENG_TYP - SMALLINT
        6) MFA_MFC_CODE - VARCHAR
        7) MFA_BRAND - VARCHAR
        8) MFA_MF_NR - INTEGER
        9) MFA_PC_CTM - CHAR
        10) MFA_CV_CTM - CHAR
Getting column names for table TOF_MODELS
        0) MOD_ID - INTEGER
        1) MOD_MFA_ID - SMALLINT
        2) MOD_CDS_ID - INTEGER
        3) MOD_PCON_START - INTEGER
        4) MOD_PCON_END - INTEGER
        5) MOD_PC - SMALLINT
        6) MOD_CV - SMALLINT
        7) MOD_AXL - SMALLINT
        8) MOD_PC_CTM - CHAR
        9) MOD_CV_CTM - CHAR
Getting column names for table TOF_MOD_TYP_LOOKUP
        0) MTL_TYP_ID - INTEGER
        1) MTL_CTM - CHAR
        2) MTL_LNG_ID - SMALLINT
        3) MTL_SEARCH_TEXT - VARCHAR
Getting column names for table TOF_NATCODES_AUSTRIA
        0) NCA_NATCODE - VARCHAR
        1) NCA_TYP_ID - INTEGER
Getting column names for table TOF_NATCODES_CH
        0) NCH_NATCODE - VARCHAR
        1) NCH_TYP_ID - INTEGER
Getting column names for table TOF_NUMBERPLATES_NL
        0) NNL_NUMBERPLATE - VARCHAR
        1) NNL_TYP_ID - INTEGER
Getting column names for table TOF_NUMBERPLATES_S
        0) NSW_NUMBERPLATE - VARCHAR
        1) NSW_TYP_ID - INTEGER
Getting column names for table TOF_PARAMETERS
        0) PAR_NAME - VARCHAR
        1) PAR_VALUE - VARCHAR
Getting column names for table TOF_PRICES
        0) PRI_ART_ID - INTEGER
        1) PRI_KV_PRICE_TYPE - VARCHAR
        2) PRI_CTM - CHAR
        3) PRI_PRICE - VARCHAR
        4) PRI_KV_PRICE_UNIT_DES_ID - INTEGER
        5) PRI_KV_QUANTITY_UNIT_DES_ID - INTEGER
        6) PRI_VAL_START - TIMESTAMP
        7) PRI_VAL_END - TIMESTAMP
        8) PRI_CURRENCY_CODE - VARCHAR
        9) PRI_REBATE - VARCHAR
        10) PRI_DISCOUNT_FLAG - SMALLINT
Getting column names for table TOF_PRICES_IMPORT
        0) PRII_ARTICLE_NR - VARCHAR
        1) PRII_SUPPLIER_NR - SMALLINT
        2) PRII_KV_PRICE_TYPE - VARCHAR
        3) PRII_CC - VARCHAR
        4) PRII_PRICE - VARCHAR
        5) PRII_KV_PRICE_UNIT - VARCHAR
        6) PRII_KV_QUANTITY_UNIT - VARCHAR
        7) PRII_VAL_START - TIMESTAMP
        8) PRII_VAL_END - TIMESTAMP
        9) PRII_CURRENCY_CODE - VARCHAR
        10) PRII_REBATE - VARCHAR
        11) PRII_ART_ID - INTEGER
        12) PRII_CTM - CHAR
        13) PRII_KV_PRICE_UNIT_DES_ID - INTEGER
        14) PRII_KV_QUANTITY_UNIT_DES_ID - INTEGER
        15) PRII_DISCOUNT_FLAG - SMALLINT
Getting column names for table TOF_RETAIL_FILTERS
        0) TRF_TSD_ID - SMALLINT
        1) TRF_GA_ID - INTEGER
        2) TRF_SUP_ID - SMALLINT
        3) TRF_ABC - VARCHAR
        4) TRF_SORT - SMALLINT
Getting column names for table TOF_RETAIL_FILTER_IMPORT
        0) TRF_TSD_ID - SMALLINT
        1) TRF_GA_NR - SMALLINT
        2) TRF_SUPPLIER_NR - SMALLINT
        3) TRF_ABC - VARCHAR
        4) TRF_SORT - SMALLINT
Getting column names for table TOF_SEARCH_HISTORIES
        0) SHI_USS_ID - INTEGER
        1) SHI_KIND - SMALLINT
        2) SHI_SEARCH_TEXT - VARCHAR
        3) SHI_SORT - INTEGER
Getting column names for table TOF_SEARCH_TREE
        0) STR_ID - INTEGER
        1) STR_ID_PARENT - INTEGER
        2) STR_TYPE - SMALLINT
        3) STR_LEVEL - SMALLINT
        4) STR_DES_ID - INTEGER
        5) STR_SORT - SMALLINT
        6) STR_NODE_NR - INTEGER
Getting column names for table TOF_SEARCH_TREE_FILTERS
        0) STF_USS_ID - SMALLINT
        1) STF_STR_ID - INTEGER
        2) STF_STR_NODE_NR - INTEGER
Getting column names for table TOF_SHOPPING_BASKETS
        0) SBA_USS_ID - SMALLINT
        1) SBA_ART_ID - INTEGER
        2) SBA_SORT - INTEGER
        3) SBA_QUANTITY - INTEGER
        4) SBA_CONTEXT_SECTION - SMALLINT
        5) SBA_TYP_ID - INTEGER
        6) SBA_ENG_ID - INTEGER
        7) SBA_AXL_ID - INTEGER
        8) SBA_MRK_ID - INTEGER
        9) SBA_GA_ID - INTEGER
        10) SBA_TSD_ID - SMALLINT
        11) SBA_PRICE_PURCHASE - VARCHAR
        12) SBA_KV_PT - VARCHAR
        13) SBA_KV_PU_DES_ID_PURCHASE - INTEGER
        14) SBA_KV_QU_DES_ID_PURCHASE - INTEGER
        15) SBA_PRICE_OFFER - VARCHAR
        16) SBA_KV_PU_DES_ID_OFFER - INTEGER
        17) SBA_KV_QU_DES_ID_OFFER - INTEGER
        18) SBA_PRICE_INVOICE - VARCHAR
        19) SBA_KV_PU_DES_ID_INVOICE - INTEGER
        20) SBA_KV_QU_DES_ID_INVOICE - INTEGER
        21) SBA_TSP_PRICE_PURCHASE - VARCHAR
        22) SBA_TSP_KV_PT_PURCHASE - VARCHAR
        23) SBA_TSP_KV_PU_DES_ID_PURCHASE - INTEGER
        24) SBA_TSP_KV_QU_DES_ID_PURCHASE - INTEGER
        25) SBA_TSP_PRICE_OFFER - VARCHAR
        26) SBA_TSP_KV_PT_OFFER - VARCHAR
        27) SBA_TSP_KV_PU_DES_ID_OFFER - INTEGER
        28) SBA_TSP_KV_QU_DES_ID_OFFER - INTEGER
        29) SBA_TSP_PRICE_INVOICE - VARCHAR
        30) SBA_TSP_KV_PT_INVOICE - VARCHAR
        31) SBA_TSP_KV_PU_DES_ID_INVOICE - INTEGER
        32) SBA_TSP_KV_QU_DES_ID_INVOICE - INTEGER
        33) SBA_EINSPEISER_NR - SMALLINT
        34) SBA_ARTICLE_NR - VARCHAR
        35) SBA_COU_ID_CAR_DDDW - SMALLINT
        36) SBA_COU_ID_CAR_DES - SMALLINT
        37) SBA_TAX_ID - TINYINT
Getting column names for table TOF_SHOPPING_BASKET_AUDACON
        0) SAU_USS_ID - INTEGER
        1) SAU_TYP_ID - INTEGER
        2) SAU_KIND - SMALLINT
        3) SAU_POS_NR - SMALLINT
        4) SAU_AUDACON_TYPE_ID - INTEGER
        5) SAU_BODY_ID_LT - INTEGER
        6) SAU_BODY_ID_MD - INTEGER
        7) SAU_WORK_ID - INTEGER
        8) SAU_EXCLUSIVE_ID - INTEGER
        9) SAU_CALCULATED - SMALLINT
        10) SAU_VAT_ID - INTEGER
Getting column names for table TOF_SHOPPING_LISTS
        0) SLI_USS_ID - SMALLINT
        1) SLI_ART_ID - INTEGER
        2) SLI_SORT - INTEGER
        3) SLI_CONTEXT_SECTION - SMALLINT
        4) SLI_TYP_ID - INTEGER
        5) SLI_ENG_ID - INTEGER
        6) SLI_AXL_ID - INTEGER
        7) SLI_MRK_ID - INTEGER
        8) SLI_GA_ID - INTEGER
        9) SLI_TSD_ID - SMALLINT
        10) SLI_COU_ID_CAR_DDDW - SMALLINT
        11) SLI_COU_ID_CAR_DES - SMALLINT
Getting column names for table TOF_SHOPPING_LISTS_IMP
        0) SLI_USS_ID - SMALLINT
        1) SLI_SORT - INTEGER
        2) SLI_CONTEXT_SECTION - SMALLINT
        3) SLI_TYP_ID - INTEGER
        4) SLI_ENG_ID - INTEGER
        5) SLI_AXL_ID - INTEGER
        6) SLI_MRK_ID - INTEGER
        7) SLI_GA_ID - INTEGER
        8) SLI_TSD_ID - SMALLINT
        9) SLI_ART_ARTICLE_NR - VARCHAR
        10) SLI_SUP_SUPPLIER_NR - SMALLINT
        11) SLI_COU_ID_CAR_DDDW - SMALLINT
        12) SLI_COU_ID_CAR_DES - SMALLINT
Getting column names for table TOF_SHORTCUTS
        0) SHO_ID - SMALLINT
        1) SHO_DES_ID - INTEGER
        2) SHO_PICTURE - VARCHAR
Getting column names for table TOF_STR_FAMILY_TREE
        0) SFT_ANCESTOR_STR_ID - INTEGER
        1) SFT_DESCENDANT_STR_ID - INTEGER
Getting column names for table TOF_STR_LOOKUP
        0) STL_LNG_ID - SMALLINT
        1) STL_SEARCH_TEXT - VARCHAR
        2) STL_STR_ID - INTEGER
        3) STL_GA_ID - INTEGER
Getting column names for table TOF_SUPERSEDED_ARTICLES
        0) SUA_ART_ID - INTEGER
        1) SUA_CTM - CHAR
        2) SUA_NUMBER - VARCHAR
        3) SUA_SORT - INTEGER
Getting column names for table TOF_SUPPLIERS
        0) SUP_ID - SMALLINT
        1) SUP_BRAND - VARCHAR
        2) SUP_SUPPLIER_NR - SMALLINT
        3) SUP_COU_ID - SMALLINT
        4) SUP_IS_HESS - SMALLINT
Getting column names for table TOF_SUPPLIER_ADDRESSES
        0) SAD_SUP_ID - SMALLINT
        1) SAD_TYPE_OF_ADDRESS - VARCHAR
        2) SAD_COU_ID - SMALLINT
        3) SAD_NAME1 - VARCHAR
        4) SAD_NAME2 - VARCHAR
        5) SAD_STREET1 - VARCHAR
        6) SAD_STREET2 - VARCHAR
        7) SAD_POB - VARCHAR
        8) SAD_COU_ID_POSTAL - SMALLINT
        9) SAD_POSTAL_CODE_PLACE - VARCHAR
        10) SAD_POSTAL_CODE_POB - VARCHAR
        11) SAD_POSTAL_CODE_CUST - VARCHAR
        12) SAD_CITY1 - VARCHAR
        13) SAD_CITY2 - VARCHAR
        14) SAD_TEL - VARCHAR
        15) SAD_FAX - VARCHAR
        16) SAD_EMAIL - VARCHAR
        17) SAD_WEB - VARCHAR
Getting column names for table TOF_SUPPLIER_LOGOS
        0) SLO_SUP_ID - SMALLINT
        1) SLO_CTM - CHAR
        2) SLO_LNG_ID - SMALLINT
        3) SLO_LOGO - LONGVARBINARY
Getting column names for table TOF_SUPPRESSED_MESSAGES
        0) SUM_USS_ID - SMALLINT
        1) SUM_MESSAGE_ID - VARCHAR
Getting column names for table TOF_TECSEL_DEALERS
        0) TSD_ID - SMALLINT
        1) TSD_DATE - INTEGER
        2) TSD_MATCHCODE - VARCHAR
        3) TSD_NAME - VARCHAR
        4) TSD_STREET - VARCHAR
        5) TSD_CITY - VARCHAR
        6) TSD_POSTAL_CODE - VARCHAR
        7) TSD_POB - VARCHAR
        8) TSD_POSTAL_CODE_POB - VARCHAR
        9) TSD_CC_POSTAL - VARCHAR
        10) TSD_PHONE - VARCHAR
        11) TSD_PHONE_MOBILE - VARCHAR
        12) TSD_FAX - VARCHAR
        13) TSD_CDID - SMALLINT
        14) TSD_DEALER_CUSTOMER - SMALLINT
        15) TSD_ADDRESS - VARCHAR
        16) TSD_DEALER_CUSTOMER_NUMBER - VARCHAR
        17) TSD_RETAIL_FILTER - VARCHAR
        18) TSD_FILTER_DELETABLE - VARCHAR
        19) TSD_EMAIL - VARCHAR
        20) TSD_DEALER_CUSTOMER_NR - VARCHAR
Getting column names for table TOF_TECSEL_LINK_USER_SALE
        0) TSL_TSS_TSD_ID - SMALLINT
        1) TSL_TSS_NAME - VARCHAR
        2) TSL_USS_ID - SMALLINT
Getting column names for table TOF_TECSEL_PRICES
        0) TSP_TSD_ID - SMALLINT
        1) TSP_ART_ID - INTEGER
        2) TSP_CTM - CHAR
        3) TSP_EVK - VARCHAR
        4) TSP_KV_PRICE_TYPE - VARCHAR
        5) TSP_KV_PRICE_UNIT_DES_ID - INTEGER
        6) TSP_KV_QUANTITY_UNIT_DES_ID - INTEGER
        7) TSP_VAL_START - TIMESTAMP
        8) TSP_VAL_END - TIMESTAMP
        9) TSP_PRICE - VARCHAR
        10) TSP_CURRENCY_CODE - VARCHAR
        11) TSP_AVAILABILITY - SMALLINT
        12) TSP_REBATE - VARCHAR
        13) TSP_DEALER_ARTICLE_NR - VARCHAR
        14) TSP_SEARCH_NUMBER - VARCHAR
Getting column names for table TOF_TECSEL_PRICE_IMPORT
        0) TSPI_TSD_ID - SMALLINT
        1) TSPI_ARTICLE_NR - VARCHAR
        2) TSPI_SUPPLIER_NR - SMALLINT
        3) TSPI_CC - VARCHAR
        4) TSPI_EVK - VARCHAR
        5) TSPI_KV_PRICE_TYPE - VARCHAR
        6) TSPI_KV_PRICE_UNIT - VARCHAR
        7) TSPI_VAL_START - TIMESTAMP
        8) TSPI_VAL_END - TIMESTAMP
        9) TSPI_PRICE - VARCHAR
        10) TSPI_KV_QUANTITY_UNIT - VARCHAR
        11) TSPI_AVAILABILITY - SMALLINT
        12) TSPI_REBATE - VARCHAR
        13) TSPI_CURRENCY_CODE - VARCHAR
        14) TSPI_ART_ID - INTEGER
        15) TSPI_CTM - CHAR
        16) TSPI_KV_PRICE_UNIT_DES_ID - INTEGER
        17) TSPI_KV_QUANTITY_UNIT_DES_ID - INTEGER
        18) TSPI_DEALER_ARTICLE_NR - VARCHAR
Getting column names for table TOF_TECSEL_SALE_ADDRESSES
        0) TSS_TSD_ID - SMALLINT
        1) TSS_NAME - VARCHAR
        2) TSS_DEALER_NR - VARCHAR
        3) TSS_COMPANY_NAME - VARCHAR
        4) TSS_STREET - VARCHAR
        5) TSS_CITY - VARCHAR
        6) TSS_POSTAL_CODE - VARCHAR
        7) TSS_POB - VARCHAR
        8) TSS_POSTAL_CODE_POB - VARCHAR
        9) TSS_CC_POSTAL - VARCHAR
        10) TSS_PHONE - VARCHAR
        11) TSS_PHONE_MOBILE - VARCHAR
        12) TSS_FAX - VARCHAR
        13) TSS_EMAIL - VARCHAR
Getting column names for table TOF_TEXT_MODULES
        0) TMO_ID - INTEGER
        1) TMO_LNG_ID - SMALLINT
        2) TMO_FIXED - SMALLINT
        3) TMO_TMT_ID - INTEGER
Getting column names for table TOF_TEXT_MODULE_TEXTS
        0) TMT_ID - INTEGER
        1) TMT_TEXT - LONGVARBINARY
Getting column names for table TOF_TRANS_CONTROLS
        0) TC_TRANS_UNIT - VARCHAR
        1) TC_CLASSNAME - VARCHAR
Getting column names for table TOF_TRANS_IS_PART_OF
        0) TPO_TRANS_UNIT - VARCHAR
        1) TPO_ISPARTOF - VARCHAR
Getting column names for table TOF_TRANS_TERMS
        0) TTE_ID - INTEGER
        1) TTE_LNG_ID - SMALLINT
        2) TTE_TERM - VARCHAR
Getting column names for table TOF_TRANS_TRANSLATIONS
        0) TTR_TTE_ID_FROM - INTEGER
        1) TTR_TOF_TTE_ID_TO - INTEGER
Getting column names for table TOF_TRANS_UNITS
        0) TU_CLASSNAME - VARCHAR
        1) TU_TYPE - VARCHAR
Getting column names for table TOF_TRANS_USED_TRANSLATION
        0) TUT_TC_CLASSNAME - VARCHAR
        1) TUT_TC_TRANS_UNIT - VARCHAR
        2) TUT_LNG_ID - SMALLINT
        3) TUT_TTE_ID - INTEGER
Getting column names for table TOF_TYPES
        0) TYP_ID - INTEGER
        1) TYP_CDS_ID - INTEGER
        2) TYP_MMT_CDS_ID - INTEGER
        3) TYP_MOD_ID - INTEGER
        4) TYP_CTM - CHAR
        5) TYP_LA_CTM - CHAR
        6) TYP_SORT - INTEGER
        7) TYP_PCON_START - INTEGER
        8) TYP_PCON_END - INTEGER
        9) TYP_KW_FROM - INTEGER
        10) TYP_KW_UPTO - INTEGER
        11) TYP_HP_FROM - INTEGER
        12) TYP_HP_UPTO - INTEGER
        13) TYP_CCM - INTEGER
        14) TYP_CYLINDERS - SMALLINT
        15) TYP_DOORS - SMALLINT
        16) TYP_TANK - SMALLINT
        17) TYP_KV_VOLTAGE_DES_ID - INTEGER
        18) TYP_KV_ABS_DES_ID - INTEGER
        19) TYP_KV_ASR_DES_ID - INTEGER
        20) TYP_KV_ENGINE_DES_ID - INTEGER
        21) TYP_KV_BRAKE_TYPE_DES_ID - INTEGER
        22) TYP_KV_BRAKE_SYST_DES_ID - INTEGER
        23) TYP_KV_FUEL_DES_ID - INTEGER
        24) TYP_KV_CATALYST_DES_ID - INTEGER
        25) TYP_KV_BODY_DES_ID - INTEGER
        26) TYP_KV_STEERING_DES_ID - INTEGER
        27) TYP_KV_STEERING_SIDE_DES_ID - INTEGER
        28) TYP_MAX_WEIGHT - NUMERIC
        29) TYP_KV_MODEL_DES_ID - INTEGER
        30) TYP_KV_AXLE_DES_ID - INTEGER
        31) TYP_CCM_TAX - INTEGER
        32) TYP_LITRES - NUMERIC
        33) TYP_KV_DRIVE_DES_ID - INTEGER
        34) TYP_KV_TRANS_DES_ID - INTEGER
        35) TYP_KV_FUEL_SUPPLY_DES_ID - INTEGER
        36) TYP_VALVES - SMALLINT
        37) TYP_RT_EXISTS - SMALLINT
Getting column names for table TOF_TYPE_NUMBERS
        0) TYN_TYP_ID - INTEGER
        1) TYN_SEARCH_TEXT - VARCHAR
        2) TYN_KIND - SMALLINT
        3) TYN_DISPLAY_NR - VARCHAR
        4) TYN_CTM - CHAR
        5) TYN_GOP_NR - VARCHAR
        6) TYN_GOP_START - INTEGER
Getting column names for table TOF_TYP_COUNTRY_SPECIFICS
        0) TYC_TYP_ID - INTEGER
        1) TYC_COU_ID - SMALLINT
        2) TYC_PCON_START - INTEGER
        3) TYC_PCON_END - INTEGER
        4) TYC_KW_FROM - INTEGER
        5) TYC_KW_UPTO - INTEGER
        6) TYC_HP_FROM - INTEGER
        7) TYC_HP_UPTO - INTEGER
        8) TYC_CCM - INTEGER
        9) TYC_CYLINDERS - SMALLINT
        10) TYC_DOORS - SMALLINT
        11) TYC_TANK - SMALLINT
        12) TYC_KV_VOLTAGE_DES_ID - INTEGER
        13) TYC_KV_ABS_DES_ID - INTEGER
        14) TYC_KV_ASR_DES_ID - INTEGER
        15) TYC_KV_ENGINE_DES_ID - INTEGER
        16) TYC_KV_BRAKE_TYPE_DES_ID - INTEGER
        17) TYC_KV_BRAKE_SYST_DES_ID - INTEGER
        18) TYC_KV_CATALYST_DES_ID - INTEGER
        19) TYC_KV_BODY_DES_ID - INTEGER
        20) TYC_KV_STEERING_DES_ID - INTEGER
        21) TYC_KV_STEERING_SIDE_DES_ID - INTEGER
        22) TYC_MAX_WEIGHT - NUMERIC
        23) TYC_KV_MODEL_DES_ID - INTEGER
        24) TYC_KV_AXLE_DES_ID - INTEGER
        25) TYC_CCM_TAX - INTEGER
        26) TYC_LITRES - NUMERIC
        27) TYC_KV_DRIVE_DES_ID - INTEGER
        28) TYC_KV_TRANS_DES_ID - INTEGER
Getting column names for table TOF_TYP_SUSPENSIONS
        0) TSU_TYP_ID - INTEGER
        1) TSU_NR - SMALLINT
        2) TSU_KV_SUSPENSION_DES_ID - INTEGER
        3) TSU_KV_AXLE_POS_DES_ID - INTEGER
        4) TSU_CTM - CHAR
Getting column names for table TOF_TYP_VOLTAGES
        0) TVO_TYP_ID - INTEGER
        1) TVO_NR - SMALLINT
        2) TVO_KV_VOLTAGE_DES_ID - INTEGER
        3) TVO_CTM - CHAR
Getting column names for table TOF_TYP_WHEEL_BASES
        0) TWB_TYP_ID - INTEGER
        1) TWB_NR - SMALLINT
        2) TWB_WHEEL_BASE - INTEGER
        3) TWB_KV_AXLE_POS_DES_ID - INTEGER
        4) TWB_CTM - CHAR
Getting column names for table TOF_USER_ERROR_REPORTS
        0) ERR_ART_ID - INTEGER
        1) ERR_LFD_NR - SMALLINT
        2) ERR_KIND - CHAR
        3) ERR_KV_CLASSIFICATION - VARCHAR
        4) ERR_SHORT_DESCRIPTION - VARCHAR
        5) ERR_ENG_ID - INTEGER
        6) ERR_TYP_ID - INTEGER
        7) ERR_AXL_ID - INTEGER
        8) ERR_MRK_ID - INTEGER
        9) ERR_TEXT - VARCHAR
        10) ERR_USS_ID - SMALLINT
        11) ERR_KV_STATE - VARCHAR
        12) ERR_DATE_STATUS_CHANGED - TIMESTAMP
        13) ERR_DATE_STATUS_REFRESHED - TIMESTAMP
        14) ERR_LINK - VARCHAR
        15) ERR_EXTERNAL_ID - VARCHAR
        16) ERR_ATTACHMENT - VARCHAR
        17) ERR_PRIVAT - CHAR
Getting column names for table TOF_USER_ERROR_REPORTS_IMP
        0) ERR_ART_ARTICLE_NR - VARCHAR
        1) ERR_SUP_SUPPLIER_NR - SMALLINT
        2) ERR_LFD_NR - SMALLINT
        3) ERR_KIND - CHAR
        4) ERR_KV_CLASSIFICATION - VARCHAR
        5) ERR_SHORT_DESCRIPTION - VARCHAR
        6) ERR_ENG_ID - INTEGER
        7) ERR_TYP_ID - INTEGER
        8) ERR_AXL_ID - INTEGER
        9) ERR_MRK_ID - INTEGER
        10) ERR_TEXT - VARCHAR
        11) ERR_USS_ID - SMALLINT
        12) ERR_KV_STATE - VARCHAR
        13) ERR_DATE_STATUS_CHANGED - TIMESTAMP
        14) ERR_DATE_STATUS_REFRESHED - TIMESTAMP
        15) ERR_LINK - VARCHAR
        16) ERR_EXTERNAL_ID - VARCHAR
        17) ERR_ATTACHMENT - VARCHAR
        18) ERR_PRIVAT - CHAR
Getting column names for table TOF_USER_SETTINGS
        0) USS_ID - SMALLINT
        1) USS_PROFILE_NAME - VARCHAR
        2) USS_PROFILE_FIRST_NAME - VARCHAR
        3) USS_PROFILE_PASSWORD - VARCHAR
        4) USS_LNG_ID - SMALLINT
        5) USS_COU_ID - SMALLINT
        6) USS_PREFERRED_SECTION - CHAR
        7) USS_PREFERRED_SEARCH - CHAR
        8) USS_SHOW_LAST_VEHICLE - SMALLINT
        9) USS_SHOW_LAST_ENGINE - SMALLINT
        10) USS_SHOW_LAST_AXLE - SMALLINT
        11) USS_NODE_WITHOUT_LINKS - SMALLINT
        12) USS_EXPERT_SEARCH - SMALLINT
        13) USS_FILENAME - VARCHAR
        14) USS_DIRECTORY - VARCHAR
        15) USS_TITLE - VARCHAR
        16) USS_NAME - VARCHAR
        17) USS_FIRST_NAME - VARCHAR
        18) USS_ROLE - VARCHAR
        19) USS_COMPANY_NAME - VARCHAR
        20) USS_STREET - VARCHAR
        21) USS_POSTAL_CODE - VARCHAR
        22) USS_CITY - VARCHAR
        23) USS_POB - VARCHAR
        24) USS_POSTAL_CODE_POB - VARCHAR
        25) USS_COU_ID_ADDRESS - SMALLINT
        26) USS_TELEPHONE - VARCHAR
        27) USS_FAX - VARCHAR
        28) USS_EXTENSION - VARCHAR
        29) USS_MOBILE - VARCHAR
        30) USS_EMAIL - VARCHAR
        31) USS_WEB - VARCHAR
        32) USS_REGION - VARCHAR
        33) USS_VEHICLE_FILTER_ACTIVE - TINYINT
        34) USS_ENGINE_FILTER_ACTIVE - TINYINT
        35) USS_STREE_FILTER_ACTIVE - TINYINT
        36) USS_BRAND_FILTER_ACTIVE - TINYINT
        37) USS_MANU_MODEL_FILTER_ACTIVE - TINYINT
        38) USS_TSD_ID - SMALLINT
        39) USS_TAX - NUMERIC
        40) USS_COU_CC - VARCHAR
        41) USS_COU_CC_ADDRESS - VARCHAR
        42) USS_SHOW_CRITERIA_DIALOG - SMALLINT
        43) USS_SHOW_IMPROVEMENTS_DIALOG - SMALLINT
        44) USS_KIND_OF_FILTER - SMALLINT
        45) USS_WINDOWS_USER - VARCHAR
        46) USS_EMAIL_ORDER_SUBJECT - VARCHAR
        47) USS_EMAIL_ORDER_TEXT - VARCHAR
        48) USS_ERR_TRACK_PASSWORD - VARCHAR
        49) USS_CUSTOMER_NUMBER - VARCHAR
        50) USS_VAT - VARCHAR
        51) USS_USTID_CC - VARCHAR
        52) USS_USTID_NR - VARCHAR
        53) USS_LOGO_PATH - VARCHAR
        54) USS_HOURLY_RATE_MECHANICS - NUMERIC
        55) USS_HOURLY_RATE_BODY - NUMERIC
        56) USS_HOURLY_RATE_ELECTRONICS - NUMERIC
        57) USS_SHOW_UPDATE - VARCHAR
        58) USS_LAST_UPDATE - TIMESTAMP
        59) USS_TAX_STANDARD - NUMERIC
        60) USS_TAX_REDUCED - NUMERIC
        61) USS_HESS_USER - VARCHAR
        62) USS_HESS_PASSWORD - VARCHAR
        63) USS_VRM_UK_USER - VARCHAR
        64) USS_VRM_UK_PASSWORD - VARCHAR
        65) USS_VRM_UK_INITIALS - VARCHAR
        66) USS_VRM_IE_USER - VARCHAR
        67) USS_VRM_IE_PASSWORD - VARCHAR
        68) USS_SIV_USER - VARCHAR
        69) USS_SIV_PASSWORD - VARCHAR
Getting column names for table TOF_USER_UPDATES
        0) UPD_INFO - VARCHAR
        1) UPD_INSTALL_DATE - TIMESTAMP
        2) UPD_RESULT - TINYINT
        3) UPD_NAME - VARCHAR
        4) UPD_TYPE - TINYINT
        5) UPD_SIZE - VARCHAR
Getting column names for table TOF_UTILITY_DIRECT
        0) UTD_ART_ID - INTEGER
        1) UTD_CTM - CHAR
        2) UTD_TEXT - VARCHAR
Getting column names for table TOF_VEHICLE_HISTORIES
        0) VHI_USS_ID - SMALLINT
        1) VHI_TYP_ID - INTEGER
        2) VHI_SORT - INTEGER
        3) VHI_COU_ID_CAR_DDDW - SMALLINT
        4) VHI_COU_ID_CAR_DES - SMALLINT
        5) VHI_IS_MRK - TINYINT
Getting column names for table TUP_PACKAGE_LOG
        0) TPL_ID - SMALLINT
        1) TPL_GROUP - VARCHAR
        2) TPL_VERSION - VARCHAR
        3) TPL_IMPORT_DATE - VARCHAR
        4) TPL_VERSION_DATE - VARCHAR
        5) TPL_STATUS - SMALLINT
        6) TPL_DESCRIPTION - VARCHAR
        7) TPL_PUBLISHER - VARCHAR
        8) TPL_OSUSER - VARCHAR
Getting column names for table TUP_STEP_LOG
        0) TLG_TPL_ID - INTEGER
        1) TLG_STEP - INTEGER
        2) TLG_STATEMENT - VARCHAR
        3) TLG_MSG_TYPE - SMALLINT
        4) TLG_MESSAGE - VARCHAR
Getting column names for table TUP_SUBSTEP_LOG
        0) TSL_TPL_ID - INTEGER
        1) TSL_STEP - INTEGER
        2) TSL_SUBSTEP - INTEGER
        3) TSL_STEP_TYPE - SMALLINT
        4) TSL_MESSAGE - VARCHAR
        5) TSL_STATEMENT - VARCHAR
BUILD SUCCESSFUL (total time: 3 seconds)