31
ANNOTATED SQL Геннадий Дубина

"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Embed Size (px)

DESCRIPTION

"AnnotatedSQL - провайдер с плюшками за 5 минут" Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Citation preview

Page 1: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

ANNOTATED SQL

Геннадий Дубина

Page 2: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 3: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

• Таблица – интерфейс• Содержит

– имя таблицы– имена колонок– path для провайдера

• Схема – класс/интерфейс со всеми таблицами

Принцип описания схемы

Page 4: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Что хочется• Описываем схему один раз• Описываем схему в одном месте• Мало кода• Легкость• Читаемость

Page 5: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Создание схемы БД

• Написание скриптов руками• Срипты/база в ресурсах• Runtime framework для создания схемы• Annotation processor

Page 6: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Inline SQL External SQL RF Annotations

Один раз + - + +

В одном месте +/- - - +

Мало кода - - - +

Легкость - +/- + +

Читаемость - + + +

Page 7: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Annotation SQL• Это не ORM• Никакой магии• Это утилита/плагин для сокращения

количества кода• Все можно посмотреть и потрогать • Работает с ant

Page 8: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

#1 SQL Schema• @Schema• @Table• @Index• @PrimaryKey• @SimpleView• @RawQuery

Page 9: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@Schema

Класс содержащий описание всех таблиц и вьюшекАтрибуты

• className• dbName• dbVersion

Page 10: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@Table

• @Column– type [INTEGER, REAL, TEXT, BLOB]– defVal

• @Autoincrement• @NotNull• @PrimaryKey• @Unique[ROLLBACK, ABORT, FAIL, IGNORE, REPLACE]

Дефайним таблицу

Page 11: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 12: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@Index

Создаем индекс для таблички. Будет создан индекс с именем idx_<name> Атрибуты• name • columns

Page 13: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@PrimaryKey

Создаем составной Primary Key для таблицыАтрибуты• collumns

Page 14: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@SimpleView

Создаем view для выборки данных из нескольких таблиц/viewСтолбцы создаются с именем <alias>_<column>

Атрибуты• value – имя view

Page 15: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Дефайним вьюшку• @From• @ Join

– joinTable – таблица которую присоединяем – joinColumn– onTableAlias – алиас таблицы к которой присоединяем– onColumn– type [INNER, LEFT, RIGHT, CROSS]

• @RawJoin– joinTable – таблица переменной – onCondition – raw sql вашего условия – type [INNER, LEFT, RIGHT, CROSS]

• @Columns - что выбираем• @IgnoreColumns – ничего не выбираем

Page 16: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 17: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 18: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@RawQuery

Создаем sql запрос который будет выполняться в content provider.Как и view только с параметрами

Атрибуты• value – имя запроса

Плюшки • @SqlQuery

Page 19: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Валидация схемы • Таблица без столбцов• Более одного PrimaryKey для таблицы• Индекс не содержит полей• Дублирующиеся названия таблиц/вьюшек• Существование @From во вьюшке• Существование колонок в таблицах/view

@From/@Join• Дублирующиеся alias во view

Page 20: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

• Пустое название таблицы/столбца/индекса/вьюшки

• Индекс можно определить только для таблицы

Page 21: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

#2 Content Provider

Поддерживает: • no-notify• limit• alternative notify uri• bulkInsert• triggers

Создаем полноценный провайдер с помощью нескольких строк при этом сохраняем human style

Page 22: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Аннотации• @Provider• @URI• @Trigger• @Triggers

Page 23: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@Provider

Атрибуты:• name• schemaClass• authority• openHelperClass

Page 24: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@URI• type [DIR, ITEM, DIR_AND_ITEM]• сolumn – по умолчанию _id• altNotify • onlyQuery – по умолчанию false

все опционально

Page 25: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 26: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

@ Trigger• name• type [INSERT, DELETE, UPDATE, ALL]• when [BEFORE, AFTER]

on<Name><When>Inserted(ContentValues values){}

on<Name><When>Deleted(Uri uri, String selection, String[] selectionArgs){}

on<Name><When>Updated(Uri uri, ContentValues values, String selection, String[] selectionArg){}

Page 27: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 28: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Human Style

Page 29: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 30: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон
Page 31: "AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior Software Developer в DataArt, г. Херсон

Вопросы?