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

Like this? Share it with your network

Share

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

  • 1,370 views
Uploaded on

"AnnotatedSQL - провайдер с плюшками за 5 минут" ...

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,370
On Slideshare
809
From Embeds
561
Number of Embeds
8

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 561

http://odmob.blogspot.com 304
http://www.odmob.blogspot.com 150
http://odmob.blogspot.ru 88
http://www.odmob.blogspot.ru 10
http://odmob.blogspot.ie 5
http://odmob.blogspot.in 2
http://www.odmob.blogspot.fi 1
http://www.odmob.blogspot.co.uk 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ANNOTATED SQL Геннадий Дубина
  • 2. Принцип описания схемы• Таблица – интерфейс• Содержит – имя таблицы – имена колонок – path для провайдера• Схема – класс/интерфейс со всеми таблицами
  • 3. Что хочется• Описываем схему один раз• Описываем схему в одном месте• Мало кода• Легкость• Читаемость
  • 4. Создание схемы БД• Написание скриптов руками• Срипты/база в ресурсах• Runtime framework для создания схемы• Annotation processor
  • 5. Inline SQL External SQL RF AnnotationsОдин раз + - + +В одном месте +/- - - +Мало кода - - - +Легкость - +/- + +Читаемость - + + +
  • 6. Annotation SQL• Это не ORM• Никакой магии• Это утилита/плагин для сокращения количества кода• Все можно посмотреть и потрогать• Работает с ant
  • 7. #1 SQL Schema• @Schema• @Table• @Index• @PrimaryKey• @SimpleView• @RawQuery
  • 8. @SchemaКласс содержащий описание всех таблиц ивьюшекАтрибуты • className • dbName • dbVersion
  • 9. @TableДефайним таблицу• @Column – type [INTEGER, REAL, TEXT, BLOB] – defVal• @Autoincrement• @NotNull• @PrimaryKey• @Unique[ROLLBACK, ABORT, FAIL, IGNORE, REPLACE]
  • 10. @IndexСоздаем индекс для таблички. Будет созданиндекс с именем idx_<name>Атрибуты• name• columns
  • 11. @PrimaryKeyСоздаем составной Primary Key для таблицыАтрибуты• collumns
  • 12. @SimpleViewСоздаем view для выборки данных из несколькихтаблиц/viewСтолбцы создаются с именем <alias>_<column>Атрибуты• value – имя view
  • 13. Дефайним вьюшку• @From• @ Join – joinTable – таблица которую присоединяем – joinColumn – onTableAlias – алиас таблицы к которой присоединяем – onColumn – type [INNER, LEFT, RIGHT, CROSS]• @RawJoin – joinTable – таблица переменной – onCondition – raw sql вашего условия – type [INNER, LEFT, RIGHT, CROSS]• @Columns - что выбираем• @IgnoreColumns – ничего не выбираем
  • 14. @RawQueryСоздаем sql запрос который будет выполняться вcontent provider.Как и view только с параметрамиАтрибуты• value – имя запросаПлюшки• @SqlQuery
  • 15. Валидация схемы• Таблица без столбцов• Более одного PrimaryKey для таблицы• Индекс не содержит полей• Дублирующиеся названия таблиц/вьюшек• Существование @From во вьюшке• Существование колонок в таблицах/view @From/@Join• Дублирующиеся alias во view
  • 16. • Пустое название таблицы/столбца/индекса/вьюшки• Индекс можно определить только для таблицы
  • 17. #2 Content ProviderСоздаем полноценный провайдер с помощьюнескольких строк при этом сохраняем human styleПоддерживает:• no-notify• limit• alternative notify uri• bulkInsert• triggers
  • 18. Аннотации• @Provider• @URI• @Trigger• @Triggers
  • 19. @ProviderАтрибуты:• name• schemaClass• authority• openHelperClass
  • 20. @URI• type [DIR, ITEM, DIR_AND_ITEM]• сolumn – по умолчанию _id• altNotify• onlyQuery – по умолчанию falseвсе опционально
  • 21. @ 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){}
  • 22. Human Style
  • 23. Вопросы?