From 34a31bb184b90e4350ccdc084bab135e37e50986 Mon Sep 17 00:00:00 2001
From: Whykioh
Date: Mon, 11 Mar 2024 00:57:00 +0100
Subject: [PATCH] Import Ruty
---
ruty/mails/SQL/mssql.initial.sql | 491 ++
ruty/mails/SQL/mssql/2009103100.sql | 87 +
ruty/mails/SQL/mssql/2010100600.sql | 9 +
ruty/mails/SQL/mssql/2011011200.sql | 10 +
ruty/mails/SQL/mssql/2011092800.sql | 127 +
ruty/mails/SQL/mssql/2011111600.sql | 4 +
ruty/mails/SQL/mssql/2011121400.sql | 9 +
ruty/mails/SQL/mssql/2012051800.sql | 18 +
ruty/mails/SQL/mssql/2012080700.sql | 8 +
ruty/mails/SQL/mssql/2013011000.sql | 14 +
ruty/mails/SQL/mssql/2013042700.sql | 1 +
ruty/mails/SQL/mssql/2013052500.sql | 17 +
ruty/mails/SQL/mssql/2013061000.sql | 44 +
ruty/mails/SQL/mssql/2014042900.sql | 1 +
ruty/mails/SQL/mssql/2015030800.sql | 1 +
ruty/mails/SQL/mssql/2015111100.sql | 4 +
ruty/mails/SQL/mssql/2016081200.sql | 5 +
ruty/mails/SQL/mssql/2016100900.sql | 2 +
ruty/mails/SQL/mssql/2016112200.sql | 36 +
ruty/mails/SQL/mssql/2018021600.sql | 24 +
ruty/mails/SQL/mssql/2018122300.sql | 9 +
ruty/mails/SQL/mssql/2019092900.sql | 18 +
ruty/mails/SQL/mssql/2020020100.sql | 4 +
ruty/mails/SQL/mssql/2020020101.sql | 1 +
ruty/mails/SQL/mssql/2020091000.sql | 31 +
ruty/mails/SQL/mssql/2020122900.sql | 1 +
ruty/mails/SQL/mssql/2021081000.sql | 33 +
ruty/mails/SQL/mssql/2021100300.sql | 1 +
ruty/mails/SQL/mssql/2022081200.sql | 1 +
ruty/mails/SQL/mysql.initial.sql | 263 +
ruty/mails/SQL/mysql/2008030300.sql | 16 +
ruty/mails/SQL/mysql/2008040500.sql | 9 +
ruty/mails/SQL/mysql/2008060900.sql | 4 +
ruty/mails/SQL/mysql/2008092100.sql | 20 +
ruty/mails/SQL/mysql/2009090400.sql | 12 +
ruty/mails/SQL/mysql/2009103100.sql | 52 +
ruty/mails/SQL/mysql/2010042300.sql | 4 +
ruty/mails/SQL/mysql/2010100600.sql | 8 +
ruty/mails/SQL/mysql/2011011200.sql | 8 +
ruty/mails/SQL/mysql/2011092800.sql | 67 +
ruty/mails/SQL/mysql/2011111600.sql | 3 +
ruty/mails/SQL/mysql/2011121400.sql | 22 +
ruty/mails/SQL/mysql/2012080700.sql | 5 +
ruty/mails/SQL/mysql/2013011000.sql | 7 +
ruty/mails/SQL/mysql/2013042700.sql | 1 +
ruty/mails/SQL/mysql/2013052500.sql | 7 +
ruty/mails/SQL/mysql/2013061000.sql | 24 +
ruty/mails/SQL/mysql/2014042900.sql | 1 +
ruty/mails/SQL/mysql/2015030800.sql | 1 +
ruty/mails/SQL/mysql/2015111100.sql | 3 +
ruty/mails/SQL/mysql/2016081200.sql | 1 +
ruty/mails/SQL/mysql/2016100900.sql | 1 +
ruty/mails/SQL/mysql/2016112200.sql | 25 +
ruty/mails/SQL/mysql/2018021600.sql | 11 +
ruty/mails/SQL/mysql/2018122300.sql | 7 +
ruty/mails/SQL/mysql/2019092900.sql | 2 +
ruty/mails/SQL/mysql/2020020100.sql | 2 +
ruty/mails/SQL/mysql/2020020101.sql | 70 +
ruty/mails/SQL/mysql/2020091000.sql | 12 +
ruty/mails/SQL/mysql/2020122900.sql | 1 +
ruty/mails/SQL/mysql/2021081000.sql | 13 +
ruty/mails/SQL/mysql/2021100300.sql | 1 +
ruty/mails/SQL/mysql/2022081200.sql | 1 +
ruty/mails/SQL/oracle.initial.sql | 288 ++
ruty/mails/SQL/oracle/2015030800.sql | 1 +
ruty/mails/SQL/oracle/2015111100.sql | 2 +
ruty/mails/SQL/oracle/2016081200.sql | 1 +
ruty/mails/SQL/oracle/2016100900.sql | 1 +
ruty/mails/SQL/oracle/2016112200.sql | 23 +
ruty/mails/SQL/oracle/2018021600.sql | 19 +
ruty/mails/SQL/oracle/2018122300.sql | 4 +
ruty/mails/SQL/oracle/2019092900.sql | 1 +
ruty/mails/SQL/oracle/2020020100.sql | 2 +
ruty/mails/SQL/oracle/2020020101.sql | 1 +
ruty/mails/SQL/oracle/2020091000.sql | 21 +
ruty/mails/SQL/oracle/2020122900.sql | 1 +
ruty/mails/SQL/oracle/2021081000.sql | 22 +
ruty/mails/SQL/oracle/2021100300.sql | 1 +
ruty/mails/SQL/oracle/2022081200.sql | 1 +
ruty/mails/SQL/postgres.initial.sql | 378 ++
ruty/mails/SQL/postgres/2008030300.sql | 18 +
ruty/mails/SQL/postgres/2008060900.sql | 3 +
ruty/mails/SQL/postgres/2008092100.sql | 14 +
ruty/mails/SQL/postgres/2009090400.sql | 6 +
ruty/mails/SQL/postgres/2009103100.sql | 32 +
ruty/mails/SQL/postgres/2010042300.sql | 4 +
ruty/mails/SQL/postgres/2010100600.sql | 7 +
ruty/mails/SQL/postgres/2011011200.sql | 7 +
ruty/mails/SQL/postgres/2011092800.sql | 64 +
ruty/mails/SQL/postgres/2011111600.sql | 3 +
ruty/mails/SQL/postgres/2011121400.sql | 5 +
ruty/mails/SQL/postgres/2012080700.sql | 7 +
ruty/mails/SQL/postgres/2013011000.sql | 4 +
ruty/mails/SQL/postgres/2013042700.sql | 14 +
ruty/mails/SQL/postgres/2013052500.sql | 8 +
ruty/mails/SQL/postgres/2013061000.sql | 24 +
ruty/mails/SQL/postgres/2014042900.sql | 1 +
ruty/mails/SQL/postgres/2015030800.sql | 1 +
ruty/mails/SQL/postgres/2015111100.sql | 2 +
ruty/mails/SQL/postgres/2016081200.sql | 1 +
ruty/mails/SQL/postgres/2016100900.sql | 1 +
ruty/mails/SQL/postgres/2016112200.sql | 21 +
ruty/mails/SQL/postgres/2018021600.sql | 15 +
ruty/mails/SQL/postgres/2018122300.sql | 5 +
ruty/mails/SQL/postgres/2019092900.sql | 1 +
ruty/mails/SQL/postgres/2020020100.sql | 2 +
ruty/mails/SQL/postgres/2020020101.sql | 1 +
ruty/mails/SQL/postgres/2020091000.sql | 19 +
ruty/mails/SQL/postgres/2020122900.sql | 2 +
ruty/mails/SQL/postgres/2021081000.sql | 21 +
ruty/mails/SQL/postgres/2021100300.sql | 1 +
ruty/mails/SQL/postgres/2022081200.sql | 2 +
ruty/mails/SQL/sqlite.initial.sql | 263 +
ruty/mails/SQL/sqlite/2008030300.sql | 25 +
ruty/mails/SQL/sqlite/2008060900.sql | 3 +
ruty/mails/SQL/sqlite/2008092100.sql | 4 +
ruty/mails/SQL/sqlite/2009090400.sql | 8 +
ruty/mails/SQL/sqlite/2009103100.sql | 61 +
ruty/mails/SQL/sqlite/2010042300.sql | 35 +
ruty/mails/SQL/sqlite/2010100600.sql | 40 +
ruty/mails/SQL/sqlite/2011011200.sql | 41 +
ruty/mails/SQL/sqlite/2011092800.sql | 54 +
ruty/mails/SQL/sqlite/2011111600.sql | 11 +
ruty/mails/SQL/sqlite/2011121400.sql | 38 +
ruty/mails/SQL/sqlite/2012080700.sql | 44 +
ruty/mails/SQL/sqlite/2013011000.sql | 6 +
ruty/mails/SQL/sqlite/2013011700.sql | 2 +
ruty/mails/SQL/sqlite/2013042700.sql | 1 +
ruty/mails/SQL/sqlite/2013052500.sql | 8 +
ruty/mails/SQL/sqlite/2013061000.sql | 48 +
ruty/mails/SQL/sqlite/2014042900.sql | 1 +
ruty/mails/SQL/sqlite/2015030800.sql | 1 +
ruty/mails/SQL/sqlite/2015111100.sql | 35 +
ruty/mails/SQL/sqlite/2016081200.sql | 9 +
ruty/mails/SQL/sqlite/2016100900.sql | 0
ruty/mails/SQL/sqlite/2016112200.sql | 21 +
ruty/mails/SQL/sqlite/2018021600.sql | 9 +
ruty/mails/SQL/sqlite/2018122300.sql | 29 +
ruty/mails/SQL/sqlite/2019092900.sql | 1 +
ruty/mails/SQL/sqlite/2020020100.sql | 57 +
ruty/mails/SQL/sqlite/2020020101.sql | 1 +
ruty/mails/SQL/sqlite/2020091000.sql | 10 +
ruty/mails/SQL/sqlite/2020122900.sql | 35 +
ruty/mails/SQL/sqlite/2021081000.sql | 11 +
ruty/mails/SQL/sqlite/2021100300.sql | 211 +
ruty/mails/SQL/sqlite/2022081200.sql | 2 +
ruty/mails/skins/elastic/README.md | 119 +
.../elastic/deps/bootstrap.bundle.min.js | 6 +
.../skins/elastic/deps/bootstrap.min.css | 6 +
ruty/mails/skins/elastic/deps/less.min.js | 17 +
.../skins/elastic/fonts/fa-regular-400.woff | Bin 0 -> 16804 bytes
.../skins/elastic/fonts/fa-regular-400.woff2 | Bin 0 -> 13580 bytes
.../skins/elastic/fonts/fa-solid-900.woff | Bin 0 -> 98020 bytes
.../skins/elastic/fonts/fa-solid-900.woff2 | Bin 0 -> 75440 bytes
.../elastic/fonts/roboto-v29-italic-700.woff | Bin 0 -> 69796 bytes
.../elastic/fonts/roboto-v29-italic-700.woff2 | Bin 0 -> 54292 bytes
.../elastic/fonts/roboto-v29-italic.woff | Bin 0 -> 69460 bytes
.../elastic/fonts/roboto-v29-italic.woff2 | Bin 0 -> 54136 bytes
.../elastic/fonts/roboto-v29-regular-700.woff | Bin 0 -> 65292 bytes
.../fonts/roboto-v29-regular-700.woff2 | Bin 0 -> 50196 bytes
.../elastic/fonts/roboto-v29-regular.woff | Bin 0 -> 65244 bytes
.../elastic/fonts/roboto-v29-regular.woff2 | Bin 0 -> 50240 bytes
.../skins/elastic/images/contactgroup.svg | 3 +
.../mails/skins/elastic/images/contactpic.svg | 3 +
.../skins/elastic/images/corner-handle.svg | 3 +
ruty/mails/skins/elastic/images/download.svg | 3 +
.../skins/elastic/images/google-icon.svg | 1 +
ruty/mails/skins/elastic/images/logo.ico | Bin 0 -> 12495 bytes
ruty/mails/skins/elastic/images/logo.svg | 51 +
.../skins/elastic/images/microsoft-icon.svg | 8 +
ruty/mails/skins/elastic/meta.json | 20 +
ruty/mails/skins/elastic/styles/colors.less | 278 ++
ruty/mails/skins/elastic/styles/dark.less | 1123 +++++
ruty/mails/skins/elastic/styles/embed.less | 95 +
ruty/mails/skins/elastic/styles/embed.min.css | 1 +
.../skins/elastic/styles/fontawesome.less | 1397 ++++++
ruty/mails/skins/elastic/styles/global.less | 149 +
ruty/mails/skins/elastic/styles/layout.less | 414 ++
ruty/mails/skins/elastic/styles/mixins.less | 62 +
ruty/mails/skins/elastic/styles/print.less | 78 +
ruty/mails/skins/elastic/styles/print.min.css | 1 +
ruty/mails/skins/elastic/styles/styles.less | 458 ++
.../mails/skins/elastic/styles/styles.min.css | 1 +
.../mails/skins/elastic/styles/variables.less | 63 +
.../skins/elastic/styles/widgets/buttons.less | 349 ++
.../skins/elastic/styles/widgets/common.less | 585 +++
.../skins/elastic/styles/widgets/dialogs.less | 263 +
.../skins/elastic/styles/widgets/editor.less | 537 ++
.../skins/elastic/styles/widgets/forms.less | 1429 ++++++
.../elastic/styles/widgets/jqueryui.less | 440 ++
.../skins/elastic/styles/widgets/lists.less | 1085 ++++
.../skins/elastic/styles/widgets/menu.less | 952 ++++
.../elastic/styles/widgets/messages.less | 267 +
ruty/mails/skins/elastic/templates/about.html | 16 +
.../skins/elastic/templates/addressbook.html | 157 +
.../mails/skins/elastic/templates/bounce.html | 74 +
.../skins/elastic/templates/compose.html | 286 ++
.../skins/elastic/templates/contact.html | 23 +
.../skins/elastic/templates/contactedit.html | 29 +
.../elastic/templates/contactimport.html | 9 +
.../skins/elastic/templates/contactprint.html | 19 +
.../elastic/templates/contactsearch.html | 9 +
.../mails/skins/elastic/templates/dialog.html | 7 +
ruty/mails/skins/elastic/templates/error.html | 21 +
.../skins/elastic/templates/folderedit.html | 13 +
.../skins/elastic/templates/folders.html | 61 +
.../skins/elastic/templates/identities.html | 43 +
.../skins/elastic/templates/identityedit.html | 13 +
.../elastic/templates/includes/footer.html | 14 +
.../elastic/templates/includes/layout.html | 46 +
.../elastic/templates/includes/mail-menu.html | 95 +
.../elastic/templates/includes/menu.html | 42 +
.../elastic/templates/includes/pagenav.html | 20 +
.../templates/includes/settings-menu.html | 12 +
ruty/mails/skins/elastic/templates/login.html | 24 +
ruty/mails/skins/elastic/templates/mail.html | 220 +
.../skins/elastic/templates/message.html | 83 +
.../skins/elastic/templates/messagepart.html | 119 +
.../skins/elastic/templates/messageprint.html | 27 +
.../mails/skins/elastic/templates/plugin.html | 15 +
.../skins/elastic/templates/responseedit.html | 13 +
.../skins/elastic/templates/responses.html | 41 +
.../skins/elastic/templates/settings.html | 28 +
.../skins/elastic/templates/settingsedit.html | 13 +
ruty/mails/skins/elastic/thumbnail.png | Bin 0 -> 1851 bytes
ruty/mails/skins/elastic/ui.js | 4378 +++++++++++++++++
ruty/mails/skins/elastic/ui.min.js | 13 +
ruty/mails/skins/elastic/watermark.html | 38 +
ruty/mails/temp/.htaccess | 7 +
ruty/mails/vendor/autoload.php | 26 +
ruty/mails/vendor/bacon/bacon-qr-code/LICENSE | 22 +
.../vendor/bacon/bacon-qr-code/README.md | 39 +
.../vendor/bacon/bacon-qr-code/composer.json | 44 +
.../bacon-qr-code/src/Common/BitArray.php | 372 ++
.../bacon-qr-code/src/Common/BitMatrix.php | 313 ++
.../bacon-qr-code/src/Common/BitUtils.php | 41 +
.../src/Common/CharacterSetEci.php | 183 +
.../bacon-qr-code/src/Common/EcBlock.php | 49 +
.../bacon-qr-code/src/Common/EcBlocks.php | 74 +
.../src/Common/ErrorCorrectionLevel.php | 63 +
.../src/Common/FormatInformation.php | 203 +
.../bacon/bacon-qr-code/src/Common/Mode.php | 79 +
.../src/Common/ReedSolomonCodec.php | 468 ++
.../bacon-qr-code/src/Common/Version.php | 596 +++
.../bacon-qr-code/src/Encoder/BlockPair.php | 58 +
.../bacon-qr-code/src/Encoder/ByteMatrix.php | 150 +
.../bacon-qr-code/src/Encoder/Encoder.php | 668 +++
.../bacon-qr-code/src/Encoder/MaskUtil.php | 271 +
.../bacon-qr-code/src/Encoder/MatrixUtil.php | 513 ++
.../bacon-qr-code/src/Encoder/QrCode.php | 141 +
.../src/Exception/ExceptionInterface.php | 10 +
.../Exception/InvalidArgumentException.php | 8 +
.../src/Exception/OutOfBoundsException.php | 8 +
.../src/Exception/RuntimeException.php | 8 +
.../Exception/UnexpectedValueException.php | 8 +
.../src/Exception/WriterException.php | 8 +
.../src/Renderer/Color/Alpha.php | 57 +
.../bacon-qr-code/src/Renderer/Color/Cmyk.php | 103 +
.../src/Renderer/Color/ColorInterface.php | 22 +
.../bacon-qr-code/src/Renderer/Color/Gray.php | 46 +
.../bacon-qr-code/src/Renderer/Color/Rgb.php | 88 +
.../src/Renderer/Eye/CompositeEye.php | 38 +
.../src/Renderer/Eye/EyeInterface.php | 26 +
.../src/Renderer/Eye/ModuleEye.php | 54 +
.../src/Renderer/Eye/SimpleCircleEye.php | 54 +
.../src/Renderer/Eye/SquareEye.php | 53 +
.../src/Renderer/Image/EpsImageBackEnd.php | 376 ++
.../Renderer/Image/ImageBackEndInterface.php | 87 +
.../Renderer/Image/ImagickImageBackEnd.php | 336 ++
.../src/Renderer/Image/SvgImageBackEnd.php | 369 ++
.../Renderer/Image/TransformationMatrix.php | 68 +
.../src/Renderer/ImageRenderer.php | 152 +
.../src/Renderer/Module/DotsModule.php | 63 +
.../src/Renderer/Module/EdgeIterator/Edge.php | 100 +
.../Module/EdgeIterator/EdgeIterator.php | 169 +
.../src/Renderer/Module/ModuleInterface.php | 18 +
.../src/Renderer/Module/RoundnessModule.php | 129 +
.../src/Renderer/Module/SquareModule.php | 47 +
.../bacon-qr-code/src/Renderer/Path/Close.php | 29 +
.../bacon-qr-code/src/Renderer/Path/Curve.php | 92 +
.../src/Renderer/Path/EllipticArc.php | 278 ++
.../bacon-qr-code/src/Renderer/Path/Line.php | 41 +
.../bacon-qr-code/src/Renderer/Path/Move.php | 41 +
.../src/Renderer/Path/OperationInterface.php | 12 +
.../bacon-qr-code/src/Renderer/Path/Path.php | 106 +
.../src/Renderer/PlainTextRenderer.php | 86 +
.../src/Renderer/RendererInterface.php | 11 +
.../src/Renderer/RendererStyle/EyeFill.php | 74 +
.../src/Renderer/RendererStyle/Fill.php | 168 +
.../src/Renderer/RendererStyle/Gradient.php | 46 +
.../Renderer/RendererStyle/GradientType.php | 22 +
.../Renderer/RendererStyle/RendererStyle.php | 90 +
.../vendor/bacon/bacon-qr-code/src/Writer.php | 71 +
ruty/mails/vendor/bin/crypt-gpg-pinentry | 119 +
ruty/mails/vendor/composer/ClassLoader.php | 579 +++
.../vendor/composer/InstalledVersions.php | 359 ++
ruty/mails/vendor/composer/LICENSE | 21 +
.../vendor/composer/autoload_classmap.php | 47 +
ruty/mails/vendor/composer/autoload_files.php | 12 +
.../vendor/composer/autoload_namespaces.php | 15 +
ruty/mails/vendor/composer/autoload_psr4.php | 18 +
ruty/mails/vendor/composer/autoload_real.php | 54 +
.../mails/vendor/composer/autoload_static.php | 181 +
ruty/mails/vendor/composer/include_paths.php | 19 +
ruty/mails/vendor/composer/installed.json | 1640 ++++++
ruty/mails/vendor/composer/installed.php | 272 +
ruty/mails/vendor/composer/platform_check.php | 26 +
ruty/mails/vendor/dasprid/enum/LICENSE | 22 +
ruty/mails/vendor/dasprid/enum/README.md | 164 +
ruty/mails/vendor/dasprid/enum/composer.json | 34 +
.../vendor/dasprid/enum/src/AbstractEnum.php | 241 +
.../mails/vendor/dasprid/enum/src/EnumMap.php | 385 ++
.../Exception/CloneNotSupportedException.php | 10 +
.../enum/src/Exception/ExceptionInterface.php | 10 +
.../src/Exception/ExpectationException.php | 10 +
.../Exception/IllegalArgumentException.php | 10 +
.../enum/src/Exception/MismatchException.php | 10 +
.../SerializeNotSupportedException.php | 10 +
.../UnserializeNotSupportedException.php | 10 +
.../vendor/dasprid/enum/src/NullValue.php | 55 +
.../vendor/guzzlehttp/guzzle/CHANGELOG.md | 1624 ++++++
ruty/mails/vendor/guzzlehttp/guzzle/LICENSE | 27 +
ruty/mails/vendor/guzzlehttp/guzzle/README.md | 94 +
.../vendor/guzzlehttp/guzzle/UPGRADING.md | 1253 +++++
.../vendor/guzzlehttp/guzzle/composer.json | 103 +
.../guzzlehttp/guzzle/src/BodySummarizer.php | 28 +
.../guzzle/src/BodySummarizerInterface.php | 13 +
.../vendor/guzzlehttp/guzzle/src/Client.php | 483 ++
.../guzzlehttp/guzzle/src/ClientInterface.php | 84 +
.../guzzlehttp/guzzle/src/ClientTrait.php | 241 +
.../guzzle/src/Cookie/CookieJar.php | 307 ++
.../guzzle/src/Cookie/CookieJarInterface.php | 80 +
.../guzzle/src/Cookie/FileCookieJar.php | 101 +
.../guzzle/src/Cookie/SessionCookieJar.php | 77 +
.../guzzle/src/Cookie/SetCookie.php | 488 ++
.../src/Exception/BadResponseException.php | 39 +
.../guzzle/src/Exception/ClientException.php | 10 +
.../guzzle/src/Exception/ConnectException.php | 56 +
.../guzzle/src/Exception/GuzzleException.php | 9 +
.../Exception/InvalidArgumentException.php | 7 +
.../guzzle/src/Exception/RequestException.php | 166 +
.../guzzle/src/Exception/ServerException.php | 10 +
.../Exception/TooManyRedirectsException.php | 7 +
.../src/Exception/TransferException.php | 7 +
.../guzzle/src/Handler/CurlFactory.php | 638 +++
.../src/Handler/CurlFactoryInterface.php | 25 +
.../guzzle/src/Handler/CurlHandler.php | 49 +
.../guzzle/src/Handler/CurlMultiHandler.php | 267 +
.../guzzle/src/Handler/EasyHandle.php | 112 +
.../guzzle/src/Handler/HeaderProcessor.php | 42 +
.../guzzle/src/Handler/MockHandler.php | 212 +
.../guzzlehttp/guzzle/src/Handler/Proxy.php | 51 +
.../guzzle/src/Handler/StreamHandler.php | 615 +++
.../guzzlehttp/guzzle/src/HandlerStack.php | 275 ++
.../guzzle/src/MessageFormatter.php | 199 +
.../guzzle/src/MessageFormatterInterface.php | 18 +
.../guzzlehttp/guzzle/src/Middleware.php | 268 +
.../vendor/guzzlehttp/guzzle/src/Pool.php | 125 +
.../guzzle/src/PrepareBodyMiddleware.php | 105 +
.../guzzle/src/RedirectMiddleware.php | 228 +
.../guzzlehttp/guzzle/src/RequestOptions.php | 276 ++
.../guzzlehttp/guzzle/src/RetryMiddleware.php | 119 +
.../guzzlehttp/guzzle/src/TransferStats.php | 133 +
.../vendor/guzzlehttp/guzzle/src/Utils.php | 385 ++
.../guzzlehttp/guzzle/src/functions.php | 167 +
.../guzzle/src/functions_include.php | 6 +
.../vendor/guzzlehttp/promises/CHANGELOG.md | 145 +
ruty/mails/vendor/guzzlehttp/promises/LICENSE | 24 +
.../vendor/guzzlehttp/promises/README.md | 559 +++
.../vendor/guzzlehttp/promises/composer.json | 58 +
.../promises/src/AggregateException.php | 19 +
.../promises/src/CancellationException.php | 12 +
.../guzzlehttp/promises/src/Coroutine.php | 162 +
.../vendor/guzzlehttp/promises/src/Create.php | 79 +
.../vendor/guzzlehttp/promises/src/Each.php | 86 +
.../guzzlehttp/promises/src/EachPromise.php | 250 +
.../promises/src/FulfilledPromise.php | 89 +
.../vendor/guzzlehttp/promises/src/Is.php | 40 +
.../guzzlehttp/promises/src/Promise.php | 281 ++
.../promises/src/PromiseInterface.php | 91 +
.../promises/src/PromisorInterface.php | 16 +
.../promises/src/RejectedPromise.php | 95 +
.../promises/src/RejectionException.php | 49 +
.../guzzlehttp/promises/src/TaskQueue.php | 71 +
.../promises/src/TaskQueueInterface.php | 24 +
.../vendor/guzzlehttp/promises/src/Utils.php | 259 +
.../mails/vendor/guzzlehttp/psr7/CHANGELOG.md | 437 ++
ruty/mails/vendor/guzzlehttp/psr7/LICENSE | 26 +
ruty/mails/vendor/guzzlehttp/psr7/README.md | 880 ++++
.../vendor/guzzlehttp/psr7/composer.json | 93 +
.../guzzlehttp/psr7/src/AppendStream.php | 248 +
.../guzzlehttp/psr7/src/BufferStream.php | 147 +
.../guzzlehttp/psr7/src/CachingStream.php | 153 +
.../guzzlehttp/psr7/src/DroppingStream.php | 49 +
.../src/Exception/MalformedUriException.php | 14 +
.../vendor/guzzlehttp/psr7/src/FnStream.php | 179 +
.../vendor/guzzlehttp/psr7/src/Header.php | 134 +
.../guzzlehttp/psr7/src/HttpFactory.php | 94 +
.../guzzlehttp/psr7/src/InflateStream.php | 37 +
.../guzzlehttp/psr7/src/LazyOpenStream.php | 49 +
.../guzzlehttp/psr7/src/LimitStream.php | 157 +
.../vendor/guzzlehttp/psr7/src/Message.php | 246 +
.../guzzlehttp/psr7/src/MessageTrait.php | 265 +
.../vendor/guzzlehttp/psr7/src/MimeType.php | 1259 +++++
.../guzzlehttp/psr7/src/MultipartStream.php | 157 +
.../guzzlehttp/psr7/src/NoSeekStream.php | 28 +
.../vendor/guzzlehttp/psr7/src/PumpStream.php | 179 +
.../vendor/guzzlehttp/psr7/src/Query.php | 113 +
.../vendor/guzzlehttp/psr7/src/Request.php | 159 +
.../vendor/guzzlehttp/psr7/src/Response.php | 161 +
.../vendor/guzzlehttp/psr7/src/Rfc7230.php | 23 +
.../guzzlehttp/psr7/src/ServerRequest.php | 340 ++
.../vendor/guzzlehttp/psr7/src/Stream.php | 283 ++
.../psr7/src/StreamDecoratorTrait.php | 156 +
.../guzzlehttp/psr7/src/StreamWrapper.php | 175 +
.../guzzlehttp/psr7/src/UploadedFile.php | 211 +
ruty/mails/vendor/guzzlehttp/psr7/src/Uri.php | 741 +++
.../guzzlehttp/psr7/src/UriComparator.php | 52 +
.../guzzlehttp/psr7/src/UriNormalizer.php | 220 +
.../guzzlehttp/psr7/src/UriResolver.php | 211 +
.../vendor/guzzlehttp/psr7/src/Utils.php | 463 ++
ruty/mails/vendor/kolab/net_ldap3/.arcconfig | 3 +
ruty/mails/vendor/kolab/net_ldap3/LICENSE | 674 +++
.../vendor/kolab/net_ldap3/composer.json | 32 +
.../vendor/kolab/net_ldap3/lib/Net/LDAP3.php | 3260 ++++++++++++
.../kolab/net_ldap3/lib/Net/LDAP3/Result.php | 184 +
ruty/mails/vendor/masterminds/html5/CREDITS | 11 +
.../vendor/masterminds/html5/LICENSE.txt | 66 +
ruty/mails/vendor/masterminds/html5/README.md | 270 +
.../mails/vendor/masterminds/html5/RELEASE.md | 157 +
.../vendor/masterminds/html5/UPGRADING.md | 21 +
.../vendor/masterminds/html5/bin/entities.php | 26 +
.../vendor/masterminds/html5/composer.json | 42 +
.../vendor/masterminds/html5/src/HTML5.php | 246 +
.../masterminds/html5/src/HTML5/Elements.php | 619 +++
.../masterminds/html5/src/HTML5/Entities.php | 2236 +++++++++
.../masterminds/html5/src/HTML5/Exception.php | 10 +
.../html5/src/HTML5/InstructionProcessor.php | 41 +
.../src/HTML5/Parser/CharacterReference.php | 61 +
.../html5/src/HTML5/Parser/DOMTreeBuilder.php | 705 +++
.../html5/src/HTML5/Parser/EventHandler.php | 114 +
.../src/HTML5/Parser/FileInputStream.php | 33 +
.../html5/src/HTML5/Parser/InputStream.php | 87 +
.../html5/src/HTML5/Parser/ParseError.php | 10 +
.../html5/src/HTML5/Parser/README.md | 53 +
.../html5/src/HTML5/Parser/Scanner.php | 416 ++
.../src/HTML5/Parser/StringInputStream.php | 331 ++
.../html5/src/HTML5/Parser/Tokenizer.php | 1197 +++++
.../src/HTML5/Parser/TreeBuildingRules.php | 127 +
.../html5/src/HTML5/Parser/UTF8Utils.php | 183 +
.../src/HTML5/Serializer/HTML5Entities.php | 1533 ++++++
.../src/HTML5/Serializer/OutputRules.php | 553 +++
.../html5/src/HTML5/Serializer/README.md | 33 +
.../src/HTML5/Serializer/RulesInterface.php | 99 +
.../html5/src/HTML5/Serializer/Traverser.php | 142 +
.../mails/vendor/pear/auth_sasl/Auth/SASL.php | 125 +
.../pear/auth_sasl/Auth/SASL/Anonymous.php | 71 +
.../pear/auth_sasl/Auth/SASL/Common.php | 105 +
.../pear/auth_sasl/Auth/SASL/CramMD5.php | 68 +
.../pear/auth_sasl/Auth/SASL/DigestMD5.php | 197 +
.../pear/auth_sasl/Auth/SASL/External.php | 63 +
.../vendor/pear/auth_sasl/Auth/SASL/Login.php | 65 +
.../vendor/pear/auth_sasl/Auth/SASL/Plain.php | 63 +
.../vendor/pear/auth_sasl/Auth/SASL/SCRAM.php | 306 ++
ruty/mails/vendor/pear/auth_sasl/README.md | 46 +
.../mails/vendor/pear/auth_sasl/composer.json | 41 +
ruty/mails/vendor/pear/auth_sasl/package.xml | 217 +
.../Console/CommandLine.php | 1309 +++++
.../Console/CommandLine/Action.php | 142 +
.../Console/CommandLine/Action/Callback.php | 80 +
.../Console/CommandLine/Action/Counter.php | 86 +
.../Console/CommandLine/Action/Help.php | 60 +
.../Console/CommandLine/Action/List.php | 73 +
.../Console/CommandLine/Action/Password.php | 90 +
.../Console/CommandLine/Action/StoreArray.php | 78 +
.../Console/CommandLine/Action/StoreFalse.php | 64 +
.../Console/CommandLine/Action/StoreFloat.php | 76 +
.../Console/CommandLine/Action/StoreInt.php | 76 +
.../CommandLine/Action/StoreString.php | 62 +
.../Console/CommandLine/Action/StoreTrue.php | 63 +
.../Console/CommandLine/Action/Version.php | 60 +
.../Console/CommandLine/Argument.php | 102 +
.../Console/CommandLine/Command.php | 76 +
.../CommandLine/CustomMessageProvider.php | 66 +
.../Console/CommandLine/Element.php | 151 +
.../Console/CommandLine/Exception.php | 97 +
.../Console/CommandLine/MessageProvider.php | 56 +
.../CommandLine/MessageProvider/Default.php | 153 +
.../Console/CommandLine/Option.php | 366 ++
.../Console/CommandLine/Outputter.php | 63 +
.../Console/CommandLine/Outputter/Default.php | 82 +
.../Console/CommandLine/Renderer.php | 71 +
.../Console/CommandLine/Renderer/Default.php | 430 ++
.../Console/CommandLine/Result.php | 71 +
.../Console/CommandLine/XmlParser.php | 318 ++
.../pear/console_commandline/README.rst | 55 +
.../pear/console_commandline/composer.json | 42 +
.../console_commandline/data/xmlschema.rng | 234 +
.../pear/console_commandline/phpunit.xml | 10 +
.../pear/console_getopt/Console/Getopt.php | 365 ++
ruty/mails/vendor/pear/console_getopt/LICENSE | 25 +
.../vendor/pear/console_getopt/README.rst | 26 +
.../vendor/pear/console_getopt/composer.json | 35 +
.../vendor/pear/console_getopt/package.xml | 302 ++
.../mails/vendor/pear/crypt_gpg/Crypt/GPG.php | 1932 ++++++++
.../pear/crypt_gpg/Crypt/GPG/Engine.php | 1975 ++++++++
.../pear/crypt_gpg/Crypt/GPG/Exceptions.php | 483 ++
.../vendor/pear/crypt_gpg/Crypt/GPG/Key.php | 205 +
.../pear/crypt_gpg/Crypt/GPG/KeyGenerator.php | 594 +++
.../pear/crypt_gpg/Crypt/GPG/PinEntry.php | 764 +++
.../crypt_gpg/Crypt/GPG/ProcessControl.php | 128 +
.../crypt_gpg/Crypt/GPG/ProcessHandler.php | 900 ++++
.../pear/crypt_gpg/Crypt/GPG/Signature.php | 370 ++
.../Crypt/GPG/SignatureCreationInfo.php | 225 +
.../pear/crypt_gpg/Crypt/GPG/SubKey.php | 661 +++
.../pear/crypt_gpg/Crypt/GPG/UserId.php | 328 ++
.../pear/crypt_gpg/Crypt/GPGAbstract.php | 436 ++
ruty/mails/vendor/pear/crypt_gpg/LICENSE | 502 ++
ruty/mails/vendor/pear/crypt_gpg/README.md | 48 +
.../mails/vendor/pear/crypt_gpg/composer.json | 55 +
.../pear/crypt_gpg/data/pinentry-cli.xml | 18 +
.../pear/crypt_gpg/scripts/crypt-gpg-pinentry | 33 +
.../mails/vendor/pear/mail_mime/Mail/mime.php | 1590 ++++++
.../vendor/pear/mail_mime/Mail/mimePart.php | 1302 +++++
ruty/mails/vendor/pear/mail_mime/README | 19 +
.../mails/vendor/pear/mail_mime/composer.json | 35 +
ruty/mails/vendor/pear/net_ldap2/LICENSE | 165 +
.../mails/vendor/pear/net_ldap2/Net/LDAP2.php | 1803 +++++++
.../vendor/pear/net_ldap2/Net/LDAP2/Entry.php | 1096 +++++
.../pear/net_ldap2/Net/LDAP2/Filter.php | 675 +++
.../vendor/pear/net_ldap2/Net/LDAP2/LDIF.php | 925 ++++
.../pear/net_ldap2/Net/LDAP2/RootDSE.php | 240 +
.../pear/net_ldap2/Net/LDAP2/Schema.php | 622 +++
.../Net/LDAP2/SchemaCache.interface.php | 59 +
.../pear/net_ldap2/Net/LDAP2/Search.php | 631 +++
.../Net/LDAP2/SimpleFileSchemaCache.php | 97 +
.../vendor/pear/net_ldap2/Net/LDAP2/Util.php | 620 +++
.../mails/vendor/pear/net_ldap2/composer.json | 25 +
ruty/mails/vendor/pear/net_ldap2/package.xml | 877 ++++
ruty/mails/vendor/pear/net_sieve/Sieve.php | 1509 ++++++
.../mails/vendor/pear/net_sieve/composer.json | 52 +
ruty/mails/vendor/pear/net_smtp/LICENSE | 23 +
ruty/mails/vendor/pear/net_smtp/Net/SMTP.php | 1478 ++++++
ruty/mails/vendor/pear/net_smtp/README.rst | 298 ++
ruty/mails/vendor/pear/net_smtp/composer.json | 53 +
.../vendor/pear/net_socket/Net/Socket.php | 686 +++
.../vendor/pear/net_socket/composer.json | 41 +
ruty/mails/vendor/pear/net_socket/package.xml | 58 +
.../vendor/pear/pear-core-minimal/README.rst | 26 +
.../pear/pear-core-minimal/composer.json | 32 +
.../pear/pear-core-minimal/src/OS/Guess.php | 395 ++
.../pear/pear-core-minimal/src/PEAR.php | 1136 +++++
.../pear/pear-core-minimal/src/PEAR/Error.php | 14 +
.../pear-core-minimal/src/PEAR/ErrorStack.php | 979 ++++
.../pear/pear-core-minimal/src/System.php | 630 +++
ruty/mails/vendor/pear/pear_exception/LICENSE | 27 +
.../pear/pear_exception/PEAR/Exception.php | 456 ++
.../vendor/pear/pear_exception/composer.json | 41 +
.../mails/vendor/psr/http-client/CHANGELOG.md | 23 +
ruty/mails/vendor/psr/http-client/LICENSE | 19 +
ruty/mails/vendor/psr/http-client/README.md | 12 +
.../vendor/psr/http-client/composer.json | 27 +
.../src/ClientExceptionInterface.php | 10 +
.../psr/http-client/src/ClientInterface.php | 20 +
.../src/NetworkExceptionInterface.php | 24 +
.../src/RequestExceptionInterface.php | 24 +
ruty/mails/vendor/psr/http-factory/LICENSE | 21 +
ruty/mails/vendor/psr/http-factory/README.md | 12 +
.../vendor/psr/http-factory/composer.json | 35 +
.../src/RequestFactoryInterface.php | 18 +
.../src/ResponseFactoryInterface.php | 18 +
.../src/ServerRequestFactoryInterface.php | 24 +
.../src/StreamFactoryInterface.php | 45 +
.../src/UploadedFileFactoryInterface.php | 34 +
.../http-factory/src/UriFactoryInterface.php | 17 +
.../vendor/psr/http-message/CHANGELOG.md | 36 +
ruty/mails/vendor/psr/http-message/LICENSE | 19 +
ruty/mails/vendor/psr/http-message/README.md | 16 +
.../vendor/psr/http-message/composer.json | 26 +
.../psr/http-message/docs/PSR7-Interfaces.md | 130 +
.../psr/http-message/docs/PSR7-Usage.md | 159 +
.../psr/http-message/src/MessageInterface.php | 187 +
.../psr/http-message/src/RequestInterface.php | 130 +
.../http-message/src/ResponseInterface.php | 68 +
.../src/ServerRequestInterface.php | 261 +
.../psr/http-message/src/StreamInterface.php | 158 +
.../src/UploadedFileInterface.php | 123 +
.../psr/http-message/src/UriInterface.php | 324 ++
.../vendor/ralouphie/getallheaders/LICENSE | 21 +
.../vendor/ralouphie/getallheaders/README.md | 27 +
.../ralouphie/getallheaders/composer.json | 26 +
.../getallheaders/src/getallheaders.php | 46 +
.../roundcube/plugin-installer/README.md | 74 +
.../roundcube/plugin-installer/composer.json | 36 +
.../Roundcube/Composer/ExtensionInstaller.php | 442 ++
.../Roundcube/Composer/PluginInstaller.php | 58 +
.../Roundcube/Composer/RoundcubeInstaller.php | 33 +
.../src/Roundcube/Composer/SkinInstaller.php | 58 +
.../roundcube/rtf-html-php/CHANGELOG.md | 61 +
.../vendor/roundcube/rtf-html-php/LICENSE | 341 ++
.../vendor/roundcube/rtf-html-php/README.md | 46 +
.../roundcube/rtf-html-php/composer.json | 35 +
.../rtf-html-php/src/ControlSymbol.php | 21 +
.../rtf-html-php/src/ControlWord.php | 21 +
.../roundcube/rtf-html-php/src/Document.php | 415 ++
.../roundcube/rtf-html-php/src/Element.php | 11 +
.../roundcube/rtf-html-php/src/Group.php | 102 +
.../roundcube/rtf-html-php/src/Html/Font.php | 35 +
.../rtf-html-php/src/Html/HtmlFormatter.php | 740 +++
.../roundcube/rtf-html-php/src/Html/Image.php | 56 +
.../roundcube/rtf-html-php/src/Html/State.php | 163 +
.../roundcube/rtf-html-php/src/Text.php | 30 +
.../deprecation-contracts/CHANGELOG.md | 5 +
.../symfony/deprecation-contracts/LICENSE | 19 +
.../symfony/deprecation-contracts/README.md | 26 +
.../deprecation-contracts/composer.json | 35 +
.../deprecation-contracts/function.php | 27 +
617 files changed, 106612 insertions(+)
create mode 100644 ruty/mails/SQL/mssql.initial.sql
create mode 100644 ruty/mails/SQL/mssql/2009103100.sql
create mode 100644 ruty/mails/SQL/mssql/2010100600.sql
create mode 100644 ruty/mails/SQL/mssql/2011011200.sql
create mode 100644 ruty/mails/SQL/mssql/2011092800.sql
create mode 100644 ruty/mails/SQL/mssql/2011111600.sql
create mode 100644 ruty/mails/SQL/mssql/2011121400.sql
create mode 100644 ruty/mails/SQL/mssql/2012051800.sql
create mode 100644 ruty/mails/SQL/mssql/2012080700.sql
create mode 100644 ruty/mails/SQL/mssql/2013011000.sql
create mode 100644 ruty/mails/SQL/mssql/2013042700.sql
create mode 100644 ruty/mails/SQL/mssql/2013052500.sql
create mode 100644 ruty/mails/SQL/mssql/2013061000.sql
create mode 100644 ruty/mails/SQL/mssql/2014042900.sql
create mode 100644 ruty/mails/SQL/mssql/2015030800.sql
create mode 100644 ruty/mails/SQL/mssql/2015111100.sql
create mode 100644 ruty/mails/SQL/mssql/2016081200.sql
create mode 100644 ruty/mails/SQL/mssql/2016100900.sql
create mode 100644 ruty/mails/SQL/mssql/2016112200.sql
create mode 100644 ruty/mails/SQL/mssql/2018021600.sql
create mode 100644 ruty/mails/SQL/mssql/2018122300.sql
create mode 100644 ruty/mails/SQL/mssql/2019092900.sql
create mode 100644 ruty/mails/SQL/mssql/2020020100.sql
create mode 100644 ruty/mails/SQL/mssql/2020020101.sql
create mode 100644 ruty/mails/SQL/mssql/2020091000.sql
create mode 100644 ruty/mails/SQL/mssql/2020122900.sql
create mode 100644 ruty/mails/SQL/mssql/2021081000.sql
create mode 100644 ruty/mails/SQL/mssql/2021100300.sql
create mode 100644 ruty/mails/SQL/mssql/2022081200.sql
create mode 100644 ruty/mails/SQL/mysql.initial.sql
create mode 100644 ruty/mails/SQL/mysql/2008030300.sql
create mode 100644 ruty/mails/SQL/mysql/2008040500.sql
create mode 100644 ruty/mails/SQL/mysql/2008060900.sql
create mode 100644 ruty/mails/SQL/mysql/2008092100.sql
create mode 100644 ruty/mails/SQL/mysql/2009090400.sql
create mode 100644 ruty/mails/SQL/mysql/2009103100.sql
create mode 100644 ruty/mails/SQL/mysql/2010042300.sql
create mode 100644 ruty/mails/SQL/mysql/2010100600.sql
create mode 100644 ruty/mails/SQL/mysql/2011011200.sql
create mode 100644 ruty/mails/SQL/mysql/2011092800.sql
create mode 100644 ruty/mails/SQL/mysql/2011111600.sql
create mode 100644 ruty/mails/SQL/mysql/2011121400.sql
create mode 100644 ruty/mails/SQL/mysql/2012080700.sql
create mode 100644 ruty/mails/SQL/mysql/2013011000.sql
create mode 100644 ruty/mails/SQL/mysql/2013042700.sql
create mode 100644 ruty/mails/SQL/mysql/2013052500.sql
create mode 100644 ruty/mails/SQL/mysql/2013061000.sql
create mode 100644 ruty/mails/SQL/mysql/2014042900.sql
create mode 100644 ruty/mails/SQL/mysql/2015030800.sql
create mode 100644 ruty/mails/SQL/mysql/2015111100.sql
create mode 100644 ruty/mails/SQL/mysql/2016081200.sql
create mode 100644 ruty/mails/SQL/mysql/2016100900.sql
create mode 100644 ruty/mails/SQL/mysql/2016112200.sql
create mode 100644 ruty/mails/SQL/mysql/2018021600.sql
create mode 100644 ruty/mails/SQL/mysql/2018122300.sql
create mode 100644 ruty/mails/SQL/mysql/2019092900.sql
create mode 100644 ruty/mails/SQL/mysql/2020020100.sql
create mode 100644 ruty/mails/SQL/mysql/2020020101.sql
create mode 100644 ruty/mails/SQL/mysql/2020091000.sql
create mode 100644 ruty/mails/SQL/mysql/2020122900.sql
create mode 100644 ruty/mails/SQL/mysql/2021081000.sql
create mode 100644 ruty/mails/SQL/mysql/2021100300.sql
create mode 100644 ruty/mails/SQL/mysql/2022081200.sql
create mode 100644 ruty/mails/SQL/oracle.initial.sql
create mode 100644 ruty/mails/SQL/oracle/2015030800.sql
create mode 100644 ruty/mails/SQL/oracle/2015111100.sql
create mode 100644 ruty/mails/SQL/oracle/2016081200.sql
create mode 100644 ruty/mails/SQL/oracle/2016100900.sql
create mode 100644 ruty/mails/SQL/oracle/2016112200.sql
create mode 100644 ruty/mails/SQL/oracle/2018021600.sql
create mode 100644 ruty/mails/SQL/oracle/2018122300.sql
create mode 100644 ruty/mails/SQL/oracle/2019092900.sql
create mode 100644 ruty/mails/SQL/oracle/2020020100.sql
create mode 100644 ruty/mails/SQL/oracle/2020020101.sql
create mode 100644 ruty/mails/SQL/oracle/2020091000.sql
create mode 100644 ruty/mails/SQL/oracle/2020122900.sql
create mode 100644 ruty/mails/SQL/oracle/2021081000.sql
create mode 100644 ruty/mails/SQL/oracle/2021100300.sql
create mode 100644 ruty/mails/SQL/oracle/2022081200.sql
create mode 100644 ruty/mails/SQL/postgres.initial.sql
create mode 100644 ruty/mails/SQL/postgres/2008030300.sql
create mode 100644 ruty/mails/SQL/postgres/2008060900.sql
create mode 100644 ruty/mails/SQL/postgres/2008092100.sql
create mode 100644 ruty/mails/SQL/postgres/2009090400.sql
create mode 100644 ruty/mails/SQL/postgres/2009103100.sql
create mode 100644 ruty/mails/SQL/postgres/2010042300.sql
create mode 100644 ruty/mails/SQL/postgres/2010100600.sql
create mode 100644 ruty/mails/SQL/postgres/2011011200.sql
create mode 100644 ruty/mails/SQL/postgres/2011092800.sql
create mode 100644 ruty/mails/SQL/postgres/2011111600.sql
create mode 100644 ruty/mails/SQL/postgres/2011121400.sql
create mode 100644 ruty/mails/SQL/postgres/2012080700.sql
create mode 100644 ruty/mails/SQL/postgres/2013011000.sql
create mode 100644 ruty/mails/SQL/postgres/2013042700.sql
create mode 100644 ruty/mails/SQL/postgres/2013052500.sql
create mode 100644 ruty/mails/SQL/postgres/2013061000.sql
create mode 100644 ruty/mails/SQL/postgres/2014042900.sql
create mode 100644 ruty/mails/SQL/postgres/2015030800.sql
create mode 100644 ruty/mails/SQL/postgres/2015111100.sql
create mode 100644 ruty/mails/SQL/postgres/2016081200.sql
create mode 100644 ruty/mails/SQL/postgres/2016100900.sql
create mode 100644 ruty/mails/SQL/postgres/2016112200.sql
create mode 100644 ruty/mails/SQL/postgres/2018021600.sql
create mode 100644 ruty/mails/SQL/postgres/2018122300.sql
create mode 100644 ruty/mails/SQL/postgres/2019092900.sql
create mode 100644 ruty/mails/SQL/postgres/2020020100.sql
create mode 100644 ruty/mails/SQL/postgres/2020020101.sql
create mode 100644 ruty/mails/SQL/postgres/2020091000.sql
create mode 100644 ruty/mails/SQL/postgres/2020122900.sql
create mode 100644 ruty/mails/SQL/postgres/2021081000.sql
create mode 100644 ruty/mails/SQL/postgres/2021100300.sql
create mode 100644 ruty/mails/SQL/postgres/2022081200.sql
create mode 100644 ruty/mails/SQL/sqlite.initial.sql
create mode 100644 ruty/mails/SQL/sqlite/2008030300.sql
create mode 100644 ruty/mails/SQL/sqlite/2008060900.sql
create mode 100644 ruty/mails/SQL/sqlite/2008092100.sql
create mode 100644 ruty/mails/SQL/sqlite/2009090400.sql
create mode 100644 ruty/mails/SQL/sqlite/2009103100.sql
create mode 100644 ruty/mails/SQL/sqlite/2010042300.sql
create mode 100644 ruty/mails/SQL/sqlite/2010100600.sql
create mode 100644 ruty/mails/SQL/sqlite/2011011200.sql
create mode 100644 ruty/mails/SQL/sqlite/2011092800.sql
create mode 100644 ruty/mails/SQL/sqlite/2011111600.sql
create mode 100644 ruty/mails/SQL/sqlite/2011121400.sql
create mode 100644 ruty/mails/SQL/sqlite/2012080700.sql
create mode 100644 ruty/mails/SQL/sqlite/2013011000.sql
create mode 100644 ruty/mails/SQL/sqlite/2013011700.sql
create mode 100644 ruty/mails/SQL/sqlite/2013042700.sql
create mode 100644 ruty/mails/SQL/sqlite/2013052500.sql
create mode 100644 ruty/mails/SQL/sqlite/2013061000.sql
create mode 100644 ruty/mails/SQL/sqlite/2014042900.sql
create mode 100644 ruty/mails/SQL/sqlite/2015030800.sql
create mode 100644 ruty/mails/SQL/sqlite/2015111100.sql
create mode 100644 ruty/mails/SQL/sqlite/2016081200.sql
create mode 100644 ruty/mails/SQL/sqlite/2016100900.sql
create mode 100644 ruty/mails/SQL/sqlite/2016112200.sql
create mode 100644 ruty/mails/SQL/sqlite/2018021600.sql
create mode 100644 ruty/mails/SQL/sqlite/2018122300.sql
create mode 100644 ruty/mails/SQL/sqlite/2019092900.sql
create mode 100644 ruty/mails/SQL/sqlite/2020020100.sql
create mode 100644 ruty/mails/SQL/sqlite/2020020101.sql
create mode 100644 ruty/mails/SQL/sqlite/2020091000.sql
create mode 100644 ruty/mails/SQL/sqlite/2020122900.sql
create mode 100644 ruty/mails/SQL/sqlite/2021081000.sql
create mode 100644 ruty/mails/SQL/sqlite/2021100300.sql
create mode 100644 ruty/mails/SQL/sqlite/2022081200.sql
create mode 100644 ruty/mails/skins/elastic/README.md
create mode 100644 ruty/mails/skins/elastic/deps/bootstrap.bundle.min.js
create mode 100644 ruty/mails/skins/elastic/deps/bootstrap.min.css
create mode 100644 ruty/mails/skins/elastic/deps/less.min.js
create mode 100644 ruty/mails/skins/elastic/fonts/fa-regular-400.woff
create mode 100644 ruty/mails/skins/elastic/fonts/fa-regular-400.woff2
create mode 100644 ruty/mails/skins/elastic/fonts/fa-solid-900.woff
create mode 100644 ruty/mails/skins/elastic/fonts/fa-solid-900.woff2
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-italic-700.woff
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-italic-700.woff2
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-italic.woff
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-italic.woff2
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-regular-700.woff
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-regular-700.woff2
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-regular.woff
create mode 100644 ruty/mails/skins/elastic/fonts/roboto-v29-regular.woff2
create mode 100644 ruty/mails/skins/elastic/images/contactgroup.svg
create mode 100644 ruty/mails/skins/elastic/images/contactpic.svg
create mode 100644 ruty/mails/skins/elastic/images/corner-handle.svg
create mode 100644 ruty/mails/skins/elastic/images/download.svg
create mode 100644 ruty/mails/skins/elastic/images/google-icon.svg
create mode 100644 ruty/mails/skins/elastic/images/logo.ico
create mode 100644 ruty/mails/skins/elastic/images/logo.svg
create mode 100644 ruty/mails/skins/elastic/images/microsoft-icon.svg
create mode 100644 ruty/mails/skins/elastic/meta.json
create mode 100644 ruty/mails/skins/elastic/styles/colors.less
create mode 100644 ruty/mails/skins/elastic/styles/dark.less
create mode 100644 ruty/mails/skins/elastic/styles/embed.less
create mode 100644 ruty/mails/skins/elastic/styles/embed.min.css
create mode 100644 ruty/mails/skins/elastic/styles/fontawesome.less
create mode 100644 ruty/mails/skins/elastic/styles/global.less
create mode 100644 ruty/mails/skins/elastic/styles/layout.less
create mode 100644 ruty/mails/skins/elastic/styles/mixins.less
create mode 100644 ruty/mails/skins/elastic/styles/print.less
create mode 100644 ruty/mails/skins/elastic/styles/print.min.css
create mode 100644 ruty/mails/skins/elastic/styles/styles.less
create mode 100644 ruty/mails/skins/elastic/styles/styles.min.css
create mode 100644 ruty/mails/skins/elastic/styles/variables.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/buttons.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/common.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/dialogs.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/editor.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/forms.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/jqueryui.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/lists.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/menu.less
create mode 100644 ruty/mails/skins/elastic/styles/widgets/messages.less
create mode 100644 ruty/mails/skins/elastic/templates/about.html
create mode 100644 ruty/mails/skins/elastic/templates/addressbook.html
create mode 100644 ruty/mails/skins/elastic/templates/bounce.html
create mode 100644 ruty/mails/skins/elastic/templates/compose.html
create mode 100644 ruty/mails/skins/elastic/templates/contact.html
create mode 100644 ruty/mails/skins/elastic/templates/contactedit.html
create mode 100644 ruty/mails/skins/elastic/templates/contactimport.html
create mode 100644 ruty/mails/skins/elastic/templates/contactprint.html
create mode 100644 ruty/mails/skins/elastic/templates/contactsearch.html
create mode 100644 ruty/mails/skins/elastic/templates/dialog.html
create mode 100644 ruty/mails/skins/elastic/templates/error.html
create mode 100644 ruty/mails/skins/elastic/templates/folderedit.html
create mode 100644 ruty/mails/skins/elastic/templates/folders.html
create mode 100644 ruty/mails/skins/elastic/templates/identities.html
create mode 100644 ruty/mails/skins/elastic/templates/identityedit.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/footer.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/layout.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/mail-menu.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/menu.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/pagenav.html
create mode 100644 ruty/mails/skins/elastic/templates/includes/settings-menu.html
create mode 100644 ruty/mails/skins/elastic/templates/login.html
create mode 100644 ruty/mails/skins/elastic/templates/mail.html
create mode 100644 ruty/mails/skins/elastic/templates/message.html
create mode 100644 ruty/mails/skins/elastic/templates/messagepart.html
create mode 100644 ruty/mails/skins/elastic/templates/messageprint.html
create mode 100644 ruty/mails/skins/elastic/templates/plugin.html
create mode 100644 ruty/mails/skins/elastic/templates/responseedit.html
create mode 100644 ruty/mails/skins/elastic/templates/responses.html
create mode 100644 ruty/mails/skins/elastic/templates/settings.html
create mode 100644 ruty/mails/skins/elastic/templates/settingsedit.html
create mode 100644 ruty/mails/skins/elastic/thumbnail.png
create mode 100644 ruty/mails/skins/elastic/ui.js
create mode 100644 ruty/mails/skins/elastic/ui.min.js
create mode 100644 ruty/mails/skins/elastic/watermark.html
create mode 100644 ruty/mails/temp/.htaccess
create mode 100644 ruty/mails/vendor/autoload.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/LICENSE
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/README.md
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/composer.json
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/BitArray.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/BitUtils.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/Mode.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Common/Version.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Exception/WriterException.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.php
create mode 100644 ruty/mails/vendor/bacon/bacon-qr-code/src/Writer.php
create mode 100644 ruty/mails/vendor/bin/crypt-gpg-pinentry
create mode 100644 ruty/mails/vendor/composer/ClassLoader.php
create mode 100644 ruty/mails/vendor/composer/InstalledVersions.php
create mode 100644 ruty/mails/vendor/composer/LICENSE
create mode 100644 ruty/mails/vendor/composer/autoload_classmap.php
create mode 100644 ruty/mails/vendor/composer/autoload_files.php
create mode 100644 ruty/mails/vendor/composer/autoload_namespaces.php
create mode 100644 ruty/mails/vendor/composer/autoload_psr4.php
create mode 100644 ruty/mails/vendor/composer/autoload_real.php
create mode 100644 ruty/mails/vendor/composer/autoload_static.php
create mode 100644 ruty/mails/vendor/composer/include_paths.php
create mode 100644 ruty/mails/vendor/composer/installed.json
create mode 100644 ruty/mails/vendor/composer/installed.php
create mode 100644 ruty/mails/vendor/composer/platform_check.php
create mode 100644 ruty/mails/vendor/dasprid/enum/LICENSE
create mode 100644 ruty/mails/vendor/dasprid/enum/README.md
create mode 100644 ruty/mails/vendor/dasprid/enum/composer.json
create mode 100644 ruty/mails/vendor/dasprid/enum/src/AbstractEnum.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/EnumMap.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/ExceptionInterface.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/ExpectationException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/IllegalArgumentException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/MismatchException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php
create mode 100644 ruty/mails/vendor/dasprid/enum/src/NullValue.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/CHANGELOG.md
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/LICENSE
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/README.md
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/UPGRADING.md
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/composer.json
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/BodySummarizer.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Client.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/ClientInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/ClientTrait.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/HandlerStack.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Middleware.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Pool.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/RequestOptions.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/TransferStats.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/Utils.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/functions.php
create mode 100644 ruty/mails/vendor/guzzlehttp/guzzle/src/functions_include.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/CHANGELOG.md
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/LICENSE
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/README.md
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/composer.json
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/AggregateException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/CancellationException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Coroutine.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Create.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Each.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/EachPromise.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/FulfilledPromise.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Is.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Promise.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/PromiseInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/PromisorInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/RejectedPromise.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/RejectionException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/TaskQueue.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/TaskQueueInterface.php
create mode 100644 ruty/mails/vendor/guzzlehttp/promises/src/Utils.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/CHANGELOG.md
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/LICENSE
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/README.md
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/composer.json
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/AppendStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/BufferStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/CachingStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/DroppingStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/FnStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Header.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/HttpFactory.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/InflateStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/LimitStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Message.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/MessageTrait.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/MimeType.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/MultipartStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/NoSeekStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/PumpStream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Query.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Request.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Response.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Rfc7230.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/ServerRequest.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Stream.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/StreamWrapper.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/UploadedFile.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Uri.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/UriComparator.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/UriNormalizer.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/UriResolver.php
create mode 100644 ruty/mails/vendor/guzzlehttp/psr7/src/Utils.php
create mode 100644 ruty/mails/vendor/kolab/net_ldap3/.arcconfig
create mode 100644 ruty/mails/vendor/kolab/net_ldap3/LICENSE
create mode 100644 ruty/mails/vendor/kolab/net_ldap3/composer.json
create mode 100644 ruty/mails/vendor/kolab/net_ldap3/lib/Net/LDAP3.php
create mode 100644 ruty/mails/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php
create mode 100644 ruty/mails/vendor/masterminds/html5/CREDITS
create mode 100644 ruty/mails/vendor/masterminds/html5/LICENSE.txt
create mode 100644 ruty/mails/vendor/masterminds/html5/README.md
create mode 100644 ruty/mails/vendor/masterminds/html5/RELEASE.md
create mode 100644 ruty/mails/vendor/masterminds/html5/UPGRADING.md
create mode 100644 ruty/mails/vendor/masterminds/html5/bin/entities.php
create mode 100644 ruty/mails/vendor/masterminds/html5/composer.json
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Elements.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Entities.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Exception.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/InstructionProcessor.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/InputStream.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/ParseError.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/README.md
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/Scanner.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Serializer/README.md
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php
create mode 100644 ruty/mails/vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/Anonymous.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/Common.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/CramMD5.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/DigestMD5.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/External.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/Login.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/Plain.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/Auth/SASL/SCRAM.php
create mode 100644 ruty/mails/vendor/pear/auth_sasl/README.md
create mode 100644 ruty/mails/vendor/pear/auth_sasl/composer.json
create mode 100644 ruty/mails/vendor/pear/auth_sasl/package.xml
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/Callback.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/Counter.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/Help.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/List.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/Password.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreArray.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreFalse.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreFloat.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreInt.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreString.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/StoreTrue.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Action/Version.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Argument.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Command.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/CustomMessageProvider.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Element.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Exception.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/MessageProvider.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/MessageProvider/Default.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Option.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Outputter.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Outputter/Default.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Renderer.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Renderer/Default.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/Result.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/Console/CommandLine/XmlParser.php
create mode 100644 ruty/mails/vendor/pear/console_commandline/README.rst
create mode 100644 ruty/mails/vendor/pear/console_commandline/composer.json
create mode 100644 ruty/mails/vendor/pear/console_commandline/data/xmlschema.rng
create mode 100644 ruty/mails/vendor/pear/console_commandline/phpunit.xml
create mode 100644 ruty/mails/vendor/pear/console_getopt/Console/Getopt.php
create mode 100644 ruty/mails/vendor/pear/console_getopt/LICENSE
create mode 100644 ruty/mails/vendor/pear/console_getopt/README.rst
create mode 100644 ruty/mails/vendor/pear/console_getopt/composer.json
create mode 100644 ruty/mails/vendor/pear/console_getopt/package.xml
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/Engine.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/Exceptions.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/Key.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/KeyGenerator.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/PinEntry.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/ProcessControl.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/ProcessHandler.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/Signature.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/SignatureCreationInfo.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/SubKey.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPG/UserId.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/Crypt/GPGAbstract.php
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/LICENSE
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/README.md
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/composer.json
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/data/pinentry-cli.xml
create mode 100644 ruty/mails/vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentry
create mode 100644 ruty/mails/vendor/pear/mail_mime/Mail/mime.php
create mode 100644 ruty/mails/vendor/pear/mail_mime/Mail/mimePart.php
create mode 100644 ruty/mails/vendor/pear/mail_mime/README
create mode 100644 ruty/mails/vendor/pear/mail_mime/composer.json
create mode 100644 ruty/mails/vendor/pear/net_ldap2/LICENSE
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/Entry.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/Filter.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/LDIF.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/RootDSE.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/Schema.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/SchemaCache.interface.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/Search.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/SimpleFileSchemaCache.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/Net/LDAP2/Util.php
create mode 100644 ruty/mails/vendor/pear/net_ldap2/composer.json
create mode 100644 ruty/mails/vendor/pear/net_ldap2/package.xml
create mode 100644 ruty/mails/vendor/pear/net_sieve/Sieve.php
create mode 100644 ruty/mails/vendor/pear/net_sieve/composer.json
create mode 100644 ruty/mails/vendor/pear/net_smtp/LICENSE
create mode 100644 ruty/mails/vendor/pear/net_smtp/Net/SMTP.php
create mode 100644 ruty/mails/vendor/pear/net_smtp/README.rst
create mode 100644 ruty/mails/vendor/pear/net_smtp/composer.json
create mode 100644 ruty/mails/vendor/pear/net_socket/Net/Socket.php
create mode 100644 ruty/mails/vendor/pear/net_socket/composer.json
create mode 100644 ruty/mails/vendor/pear/net_socket/package.xml
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/README.rst
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/composer.json
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/src/OS/Guess.php
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/src/PEAR.php
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/src/PEAR/Error.php
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php
create mode 100644 ruty/mails/vendor/pear/pear-core-minimal/src/System.php
create mode 100644 ruty/mails/vendor/pear/pear_exception/LICENSE
create mode 100644 ruty/mails/vendor/pear/pear_exception/PEAR/Exception.php
create mode 100644 ruty/mails/vendor/pear/pear_exception/composer.json
create mode 100644 ruty/mails/vendor/psr/http-client/CHANGELOG.md
create mode 100644 ruty/mails/vendor/psr/http-client/LICENSE
create mode 100644 ruty/mails/vendor/psr/http-client/README.md
create mode 100644 ruty/mails/vendor/psr/http-client/composer.json
create mode 100644 ruty/mails/vendor/psr/http-client/src/ClientExceptionInterface.php
create mode 100644 ruty/mails/vendor/psr/http-client/src/ClientInterface.php
create mode 100644 ruty/mails/vendor/psr/http-client/src/NetworkExceptionInterface.php
create mode 100644 ruty/mails/vendor/psr/http-client/src/RequestExceptionInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/LICENSE
create mode 100644 ruty/mails/vendor/psr/http-factory/README.md
create mode 100644 ruty/mails/vendor/psr/http-factory/composer.json
create mode 100644 ruty/mails/vendor/psr/http-factory/src/RequestFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/src/ResponseFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/src/StreamFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-factory/src/UriFactoryInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/CHANGELOG.md
create mode 100644 ruty/mails/vendor/psr/http-message/LICENSE
create mode 100644 ruty/mails/vendor/psr/http-message/README.md
create mode 100644 ruty/mails/vendor/psr/http-message/composer.json
create mode 100644 ruty/mails/vendor/psr/http-message/docs/PSR7-Interfaces.md
create mode 100644 ruty/mails/vendor/psr/http-message/docs/PSR7-Usage.md
create mode 100644 ruty/mails/vendor/psr/http-message/src/MessageInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/RequestInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/ResponseInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/ServerRequestInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/StreamInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/UploadedFileInterface.php
create mode 100644 ruty/mails/vendor/psr/http-message/src/UriInterface.php
create mode 100644 ruty/mails/vendor/ralouphie/getallheaders/LICENSE
create mode 100644 ruty/mails/vendor/ralouphie/getallheaders/README.md
create mode 100644 ruty/mails/vendor/ralouphie/getallheaders/composer.json
create mode 100644 ruty/mails/vendor/ralouphie/getallheaders/src/getallheaders.php
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/README.md
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/composer.json
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/src/Roundcube/Composer/ExtensionInstaller.php
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.php
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/src/Roundcube/Composer/RoundcubeInstaller.php
create mode 100644 ruty/mails/vendor/roundcube/plugin-installer/src/Roundcube/Composer/SkinInstaller.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/CHANGELOG.md
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/LICENSE
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/README.md
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/composer.json
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/ControlSymbol.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/ControlWord.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Document.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Element.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Group.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Html/Font.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Html/HtmlFormatter.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Html/Image.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Html/State.php
create mode 100644 ruty/mails/vendor/roundcube/rtf-html-php/src/Text.php
create mode 100644 ruty/mails/vendor/symfony/deprecation-contracts/CHANGELOG.md
create mode 100644 ruty/mails/vendor/symfony/deprecation-contracts/LICENSE
create mode 100644 ruty/mails/vendor/symfony/deprecation-contracts/README.md
create mode 100644 ruty/mails/vendor/symfony/deprecation-contracts/composer.json
create mode 100644 ruty/mails/vendor/symfony/deprecation-contracts/function.php
diff --git a/ruty/mails/SQL/mssql.initial.sql b/ruty/mails/SQL/mssql.initial.sql
new file mode 100644
index 0000000..b49a1ea
--- /dev/null
+++ b/ruty/mails/SQL/mssql.initial.sql
@@ -0,0 +1,491 @@
+CREATE TABLE [dbo].[cache] (
+ [user_id] [int] NOT NULL ,
+ [cache_key] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_shared] (
+ [cache_key] [varchar] (255) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_index] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [expires] [datetime] NULL ,
+ [valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_thread] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_messages] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [uid] [int] NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
+ [flags] [int] NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[collected_addresses] (
+ [address_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [type] [int] NOT NULL
+) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contacts] (
+ [contact_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [vcard] [text] COLLATE Latin1_General_CI_AI NULL ,
+ [words] [text] COLLATE Latin1_General_CI_AI NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contactgroups] (
+ [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contactgroupmembers] (
+ [contactgroup_id] [int] NOT NULL ,
+ [contact_id] [int] NOT NULL ,
+ [created] [datetime] NOT NULL
+) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[identities] (
+ [identity_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [signature] [text] COLLATE Latin1_General_CI_AI NULL,
+ [html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[responses] (
+ [response_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL,
+ [is_html] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[session] (
+ [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [changed] [datetime] NULL ,
+ [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [vars] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[users] (
+ [user_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [username] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL ,
+ [mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [created] [datetime] NOT NULL ,
+ [last_login] [datetime] NULL ,
+ [failed_login] [datetime] NULL ,
+ [failed_login_counter] [int] NULL ,
+ [language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL ,
+ [preferences] [text] COLLATE Latin1_General_CI_AI NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[dictionary] (
+ [user_id] [int] ,
+ [language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[searches] (
+ [search_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [type] [tinyint] NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[filestore] (
+ [file_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [context] [varchar] (32) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [filename] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [mtime] [int] NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NULL ,
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[system] (
+ [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [value] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[cache_key]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [cache_key]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox],[uid]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[collected_addresses] WITH NOCHECK ADD
+ CONSTRAINT [PK_collected_addresses_address_id] PRIMARY KEY CLUSTERED
+ (
+ [address_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD
+ CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY CLUSTERED
+ (
+ [contact_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD
+ CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED
+ (
+ [contactgroup_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD
+ CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED
+ (
+ [contactgroup_id], [contact_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[identities] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [identity_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[responses] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [response_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[session] WITH NOCHECK ADD
+ CONSTRAINT [PK_session_sess_id] PRIMARY KEY CLUSTERED
+ (
+ [sess_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[users] WITH NOCHECK ADD
+ CONSTRAINT [PK_users_user_id] PRIMARY KEY CLUSTERED
+ (
+ [user_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] WITH NOCHECK ADD
+ CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED
+ (
+ [search_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[filestore] WITH NOCHECK ADD
+ CONSTRAINT [PK_filestore_file_id] PRIMARY KEY CLUSTERED
+ (
+ [file_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[system] WITH NOCHECK ADD
+ CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED
+ (
+ [name]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache] ADD
+ CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
+ CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key]
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD
+ CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD
+ CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
+GO
+
+CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[collected_addresses] ADD
+ CONSTRAINT [DF_collected_addresses_user_id] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_collected_addresses_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_collected_addresses_name] DEFAULT ('') FOR [name]
+GO
+
+CREATE UNIQUE INDEX [IX_collected_addresses_user_id] ON [dbo].[collected_addresses]([user_id],[type],[email]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contacts] ADD
+ CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name],
+ CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email],
+ CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname],
+ CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname],
+ CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD
+ CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
+ CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contactgroups]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD
+ CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
+ CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
+ CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[identities] ADD
+ CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id],
+ CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard],
+ CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name],
+ CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization],
+ CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email],
+ CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to],
+ CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc],
+ CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature],
+ CHECK ([standard] = '1' or [standard] = '0'),
+ CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[responses] ADD
+ CONSTRAINT [DF_responses_user] DEFAULT ('0') FOR [user_id],
+ CONSTRAINT [DF_responses_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_responses_is_html] DEFAULT ('0') FOR [is_html],
+ CHECK ([del] = '1' or [del] = '0'),
+ CHECK ([is_html] = '1' or [is_html] = '0')
+GO
+
+CREATE INDEX [IX_responses_user_id] ON [dbo].[responses]([user_id]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[session] ADD
+ CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id],
+ CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip]
+GO
+
+CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_filestore_user_id] ON [dbo].[filestore]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[users] ADD
+ CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username],
+ CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host],
+ CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
+GO
+
+CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] ADD
+ CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type]
+GO
+
+CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
+GO
+
+CREATE UNIQUE INDEX [IX_filestore_user_id_context_filename] ON [dbo].[filestore]([user_id],[context],[filename]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[responses] ADD CONSTRAINT [FK_responses_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[collected_addresses] ADD CONSTRAINT [FK_collected_addresses_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
+ FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[filestore] ADD CONSTRAINT [FK_filestore_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+-- Use trigger instead of foreign key (#1487112)
+-- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths."
+CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
+ AFTER DELETE AS
+ DELETE FROM [dbo].[contactgroupmembers]
+ WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
+GO
+
+INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2022081200')
+GO
+
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2009103100.sql b/ruty/mails/SQL/mssql/2009103100.sql
new file mode 100644
index 0000000..356f6c0
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2009103100.sql
@@ -0,0 +1,87 @@
+-- Updates from version 0.3.1
+
+ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[identities] ADD [changed] [datetime] NULL
+GO
+
+CREATE TABLE [dbo].[contactgroups] (
+ [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[contactgroupmembers] (
+ [contactgroup_id] [int] NOT NULL ,
+ [contact_id] [int] NOT NULL ,
+ [created] [datetime] NOT NULL
+) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD
+ CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED
+ (
+ [contactgroup_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD
+ CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED
+ (
+ [contactgroup_id], [contact_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD
+ CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],
+ CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')
+GO
+
+CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD
+ CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],
+ CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],
+ CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]
+GO
+
+ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]
+ FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
+ AFTER DELETE AS
+ DELETE FROM [dbo].[contactgroupmembers]
+ WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
+GO
+
+ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
diff --git a/ruty/mails/SQL/mssql/2010100600.sql b/ruty/mails/SQL/mssql/2010100600.sql
new file mode 100644
index 0000000..fb045e3
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2010100600.sql
@@ -0,0 +1,9 @@
+-- Updates from version 0.4.2
+
+DROP INDEX [IX_users_username]
+GO
+CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2011011200.sql b/ruty/mails/SQL/mssql/2011011200.sql
new file mode 100644
index 0000000..b0c6966
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2011011200.sql
@@ -0,0 +1,10 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE [dbo].[contacts] ADD [words] [text] COLLATE Latin1_General_CI_AI NULL
+GO
+CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]
+GO
+DELETE FROM [dbo].[messages]
+GO
+DELETE FROM [dbo].[cache]
+GO
diff --git a/ruty/mails/SQL/mssql/2011092800.sql b/ruty/mails/SQL/mssql/2011092800.sql
new file mode 100644
index 0000000..8cc9ecb
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2011092800.sql
@@ -0,0 +1,127 @@
+-- Updates from version 0.6
+
+CREATE TABLE [dbo].[dictionary] (
+ [user_id] [int] ,
+ [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[searches] (
+ [search_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [type] [tinyint] NOT NULL ,
+ [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] WITH NOCHECK ADD
+ CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED
+ (
+ [search_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] ADD
+ CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type],
+GO
+
+CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+DROP TABLE [dbo].[messages]
+GO
+CREATE TABLE [dbo].[cache_index] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_thread] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+CREATE TABLE [dbo].[cache_messages] (
+ [user_id] [int] NOT NULL ,
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [uid] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
+ [flags] [int] NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [user_id],[mailbox],[uid]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD
+ CONSTRAINT [DF_cache_index_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]
+GO
+
+CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD
+ CONSTRAINT [DF_cache_thread_changed] DEFAULT (getdate()) FOR [changed]
+GO
+
+CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD
+ CONSTRAINT [DF_cache_messages_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags]
+GO
+
+CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
+ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
diff --git a/ruty/mails/SQL/mssql/2011111600.sql b/ruty/mails/SQL/mssql/2011111600.sql
new file mode 100644
index 0000000..2b73184
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2011111600.sql
@@ -0,0 +1,4 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE [dbo].[session] ALTER COLUMN [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL
+GO
diff --git a/ruty/mails/SQL/mssql/2011121400.sql b/ruty/mails/SQL/mssql/2011121400.sql
new file mode 100644
index 0000000..fde63ea
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2011121400.sql
@@ -0,0 +1,9 @@
+-- Updates from version 0.7
+
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL
+GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2012051800.sql b/ruty/mails/SQL/mssql/2012051800.sql
new file mode 100644
index 0000000..8dcf7bf
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2012051800.sql
@@ -0,0 +1,18 @@
+-- Updates from version 0.8-rc
+
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
+-- Updates from version 0.8
+
+ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
+GO
+ALTER TABLE [dbo].[users] DROP COLUMN [alias]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
+
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2012080700.sql b/ruty/mails/SQL/mssql/2012080700.sql
new file mode 100644
index 0000000..4db512c
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2012080700.sql
@@ -0,0 +1,8 @@
+-- Updates from version 0.8
+
+ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id]
+GO
+ALTER TABLE [dbo].[users] DROP COLUMN [alias]
+GO
+CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY]
+GO
diff --git a/ruty/mails/SQL/mssql/2013011000.sql b/ruty/mails/SQL/mssql/2013011000.sql
new file mode 100644
index 0000000..c4bcb86
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2013011000.sql
@@ -0,0 +1,14 @@
+-- Upgrades from 0.9-beta
+
+CREATE TABLE [dbo].[system] (
+ [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [value] [text] COLLATE Latin1_General_CI_AI
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[system] WITH NOCHECK ADD
+ CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED
+ (
+ [name]
+ ) ON [PRIMARY]
+GO
diff --git a/ruty/mails/SQL/mssql/2013042700.sql b/ruty/mails/SQL/mssql/2013042700.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2013042700.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2013052500.sql b/ruty/mails/SQL/mssql/2013052500.sql
new file mode 100644
index 0000000..1fddfed
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2013052500.sql
@@ -0,0 +1,17 @@
+CREATE TABLE [dbo].[cache_shared] (
+ [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [created] [datetime] NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[cache_shared] ADD
+ CONSTRAINT [DF_cache_shared_created] DEFAULT (getdate()) FOR [created]
+GO
+
+CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_cache_shared_created] ON [dbo].[cache_shared]([created]) ON [PRIMARY]
+GO
+
diff --git a/ruty/mails/SQL/mssql/2013061000.sql b/ruty/mails/SQL/mssql/2013061000.sql
new file mode 100644
index 0000000..5e8b791
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2013061000.sql
@@ -0,0 +1,44 @@
+ALTER TABLE [dbo].[cache] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_shared] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_index] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_thread] ADD [expires] [datetime] NULL
+GO
+ALTER TABLE [dbo].[cache_messages] ADD [expires] [datetime] NULL
+GO
+
+UPDATE [dbo].[cache] SET [expires] = DATEADD(second, 604800, [created])
+GO
+UPDATE [dbo].[cache_shared] SET [expires] = DATEADD(second, 604800, [created])
+GO
+UPDATE [dbo].[cache_index] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+UPDATE [dbo].[cache_thread] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+UPDATE [dbo].[cache_messages] SET [expires] = DATEADD(second, 604800, [changed])
+GO
+
+DROP INDEX [IX_cache_created]
+GO
+DROP INDEX [IX_cache_shared_created]
+GO
+ALTER TABLE [dbo].[cache_index] DROP COLUMN [changed]
+GO
+ALTER TABLE [dbo].[cache_thread] DROP COLUMN [changed]
+GO
+ALTER TABLE [dbo].[cache_messages] DROP COLUMN [changed]
+GO
+
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY]
+GO
+
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2014042900.sql b/ruty/mails/SQL/mssql/2014042900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2014042900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2015030800.sql b/ruty/mails/SQL/mssql/2015030800.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2015030800.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2015111100.sql b/ruty/mails/SQL/mssql/2015111100.sql
new file mode 100644
index 0000000..9abff98
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2015111100.sql
@@ -0,0 +1,4 @@
+ALTER TABLE [dbo].[users] ADD [failed_login] [datetime] NULL
+GO
+ALTER TABLE [dbo].[users] ADD [failed_login_counter] [int] NULL
+GO
diff --git a/ruty/mails/SQL/mssql/2016081200.sql b/ruty/mails/SQL/mssql/2016081200.sql
new file mode 100644
index 0000000..a8ee99c
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2016081200.sql
@@ -0,0 +1,5 @@
+ALTER TABLE [dbo].[session] DROP CONSTRAINT [DF_session_created]
+GO
+
+ALTER TABLE [dbo].[session] DROP COLUMN [created]
+GO
diff --git a/ruty/mails/SQL/mssql/2016100900.sql b/ruty/mails/SQL/mssql/2016100900.sql
new file mode 100644
index 0000000..38b359a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2016100900.sql
@@ -0,0 +1,2 @@
+ALTER TABLE [dbo].[session] ALTER COLUMN [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL
+GO
diff --git a/ruty/mails/SQL/mssql/2016112200.sql b/ruty/mails/SQL/mssql/2016112200.sql
new file mode 100644
index 0000000..302a3ae
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2016112200.sql
@@ -0,0 +1,36 @@
+DROP TABLE [dbo].[cache]
+GO
+DROP TABLE [dbo].[cache_shared]
+GO
+
+CREATE TABLE [dbo].[cache] (
+ [user_id] [int] NOT NULL ,
+ [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+CREATE TABLE [dbo].[cache_shared] (
+ [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [expires] [datetime] NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache] ADD
+ CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],
+ CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key]
+GO
+CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY]
+GO
+CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED (
+ [user_id],[cache_key]
+ ) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED (
+ [cache_key]
+ ) ON [PRIMARY]
+GO
diff --git a/ruty/mails/SQL/mssql/2018021600.sql b/ruty/mails/SQL/mssql/2018021600.sql
new file mode 100644
index 0000000..176a712
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2018021600.sql
@@ -0,0 +1,24 @@
+CREATE TABLE [dbo].[filestore] (
+ [file_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [filename] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [mtime] [int] NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NULL ,
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[filestore] WITH NOCHECK ADD
+ CONSTRAINT [PK_filestore_file_id] PRIMARY KEY CLUSTERED
+ (
+ [file_id]
+ ) ON [PRIMARY]
+GO
+
+CREATE INDEX [IX_filestore_user_id] ON [dbo].[filestore]([user_id]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[filestore] ADD CONSTRAINT [FK_filestore_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
diff --git a/ruty/mails/SQL/mssql/2018122300.sql b/ruty/mails/SQL/mssql/2018122300.sql
new file mode 100644
index 0000000..175b93f
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2018122300.sql
@@ -0,0 +1,9 @@
+ALTER TABLE [dbo].[filestore] ADD [context] varchar(32) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+
+UPDATE [dbo].[filestore] SET [context] = 'enigma'
+GO
+
+CREATE UNIQUE INDEX [IX_filestore_user_id_context_filename] ON [dbo].[filestore]([user_id],[context],[filename]) ON [PRIMARY]
+GO
+
diff --git a/ruty/mails/SQL/mssql/2019092900.sql b/ruty/mails/SQL/mssql/2019092900.sql
new file mode 100644
index 0000000..3a14a5a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2019092900.sql
@@ -0,0 +1,18 @@
+ALTER TABLE [dbo].[cache] ALTER COLUMN
+ [cache_key] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
+GO
+ALTER TABLE [dbo].[cache_shared] ALTER COLUMN
+ [cache_key] [varchar] (255) COLLATE Latin1_General_CS_AS NOT NULL
+GO
+ALTER TABLE [dbo].[cache_index] ALTER COLUMN
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
+GO
+ALTER TABLE [dbo].[cache_messages] ALTER COLUMN
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
+GO
+ALTER TABLE [dbo].[cache_thread] ALTER COLUMN
+ [mailbox] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
+GO
+ALTER TABLE [dbo].[users] ALTER COLUMN
+ [username] [varchar] (128) COLLATE Latin1_General_CS_AS NOT NULL
+GO
diff --git a/ruty/mails/SQL/mssql/2020020100.sql b/ruty/mails/SQL/mssql/2020020100.sql
new file mode 100644
index 0000000..355e5a5
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2020020100.sql
@@ -0,0 +1,4 @@
+ALTER TABLE [dbo].[users] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL
+GO
+ALTER TABLE [dbo].[dictionary] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL
+GO
diff --git a/ruty/mails/SQL/mssql/2020020101.sql b/ruty/mails/SQL/mssql/2020020101.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2020020101.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2020091000.sql b/ruty/mails/SQL/mssql/2020091000.sql
new file mode 100644
index 0000000..2edb309
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2020091000.sql
@@ -0,0 +1,31 @@
+CREATE TABLE [dbo].[collected_addresses] (
+ [address_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [type] [int] NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[collected_addresses] WITH NOCHECK ADD
+ CONSTRAINT [PK_collected_addresses_address_id] PRIMARY KEY CLUSTERED
+ (
+ [address_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[collected_addresses] ADD
+ CONSTRAINT [DF_collected_addresses_user_id] DEFAULT (0) FOR [user_id],
+ CONSTRAINT [DF_collected_addresses_changed] DEFAULT (getdate()) FOR [changed],
+ CONSTRAINT [DF_collected_addresses_name] DEFAULT ('') FOR [name],
+GO
+
+CREATE UNIQUE INDEX [IX_collected_addresses_user_id] ON [dbo].[collected_addresses]([user_id],[type],[email]) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[collected_addresses] ADD CONSTRAINT [FK_collected_addresses_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
diff --git a/ruty/mails/SQL/mssql/2020122900.sql b/ruty/mails/SQL/mssql/2020122900.sql
new file mode 100644
index 0000000..73cbb58
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2020122900.sql
@@ -0,0 +1 @@
+--empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2021081000.sql b/ruty/mails/SQL/mssql/2021081000.sql
new file mode 100644
index 0000000..011b155
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2021081000.sql
@@ -0,0 +1,33 @@
+CREATE TABLE [dbo].[responses] (
+ [response_id] [int] IDENTITY (1, 1) NOT NULL ,
+ [user_id] [int] NOT NULL ,
+ [changed] [datetime] NOT NULL ,
+ [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [name] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,
+ [data] [text] COLLATE Latin1_General_CI_AI NOT NULL,
+ [is_html] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[responses] WITH NOCHECK ADD
+ PRIMARY KEY CLUSTERED
+ (
+ [response_id]
+ ) ON [PRIMARY]
+GO
+
+ALTER TABLE [dbo].[responses] ADD
+ CONSTRAINT [DF_responses_user] DEFAULT ('0') FOR [user_id],
+ CONSTRAINT [DF_responses_del] DEFAULT ('0') FOR [del],
+ CONSTRAINT [DF_responses_is_html] DEFAULT ('0') FOR [is_html],
+ CHECK ([del] = '1' or [del] = '0'),
+ CHECK ([is_html] = '1' or [is_html] = '0')
+GO
+
+CREATE INDEX [IX_responses_user_id] ON [dbo].[responses]([user_id]) ON [PRIMARY]
+GO
+ALTER TABLE [dbo].[responses] ADD CONSTRAINT [FK_responses_user_id]
+ FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])
+ ON DELETE CASCADE ON UPDATE CASCADE
+GO
+
diff --git a/ruty/mails/SQL/mssql/2021100300.sql b/ruty/mails/SQL/mssql/2021100300.sql
new file mode 100644
index 0000000..49daeda
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2021100300.sql
@@ -0,0 +1 @@
+-- SQLite only
\ No newline at end of file
diff --git a/ruty/mails/SQL/mssql/2022081200.sql b/ruty/mails/SQL/mssql/2022081200.sql
new file mode 100644
index 0000000..105e39e
--- /dev/null
+++ b/ruty/mails/SQL/mssql/2022081200.sql
@@ -0,0 +1 @@
+-- SQLite/Postgres only
\ No newline at end of file
diff --git a/ruty/mails/SQL/mysql.initial.sql b/ruty/mails/SQL/mysql.initial.sql
new file mode 100644
index 0000000..f829cb3
--- /dev/null
+++ b/ruty/mails/SQL/mysql.initial.sql
@@ -0,0 +1,263 @@
+-- Roundcube Webmail initial database structure
+
+
+SET FOREIGN_KEY_CHECKS=0;
+
+-- Table structure for table `session`
+
+CREATE TABLE `session` (
+ `sess_id` varchar(128) NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `ip` varchar(40) NOT NULL,
+ `vars` mediumtext NOT NULL,
+ PRIMARY KEY(`sess_id`),
+ INDEX `changed_index` (`changed`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `users`
+
+CREATE TABLE `users` (
+ `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `username` varchar(128) BINARY NOT NULL,
+ `mail_host` varchar(128) NOT NULL,
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `last_login` datetime,
+ `failed_login` datetime,
+ `failed_login_counter` int(10) UNSIGNED,
+ `language` varchar(16),
+ `preferences` longtext,
+ PRIMARY KEY(`user_id`),
+ UNIQUE `username` (`username`, `mail_host`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `cache`
+
+CREATE TABLE `cache` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `cache_key` varchar(128) BINARY NOT NULL,
+ `expires` datetime,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`user_id`, `cache_key`),
+ CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `cache_shared`
+
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) BINARY NOT NULL,
+ `expires` datetime,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`cache_key`),
+ INDEX `expires_index` (`expires`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `cache_index`
+
+CREATE TABLE `cache_index` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `expires` datetime,
+ `valid` tinyint(1) NOT NULL DEFAULT '0',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `cache_thread`
+
+CREATE TABLE `cache_thread` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `expires` datetime,
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `cache_messages`
+
+CREATE TABLE `cache_messages` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
+ `expires` datetime,
+ `data` longtext NOT NULL,
+ `flags` int(11) NOT NULL DEFAULT '0',
+ CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`),
+ PRIMARY KEY (`user_id`, `mailbox`, `uid`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `collected_addresses`
+
+CREATE TABLE `collected_addresses` (
+ `address_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `email` varchar(255) NOT NULL,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `type` int(10) UNSIGNED NOT NULL,
+ PRIMARY KEY(`address_id`),
+ CONSTRAINT `user_id_fk_collected_addresses` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE INDEX `user_email_collected_addresses_index` (`user_id`, `type`, `email`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `contacts`
+
+CREATE TABLE `contacts` (
+ `contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL DEFAULT '',
+ `email` text NOT NULL,
+ `firstname` varchar(128) NOT NULL DEFAULT '',
+ `surname` varchar(128) NOT NULL DEFAULT '',
+ `vcard` longtext,
+ `words` text,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ PRIMARY KEY(`contact_id`),
+ CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_contacts_index` (`user_id`,`del`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `contactgroups`
+
+CREATE TABLE `contactgroups` (
+ `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL DEFAULT '',
+ PRIMARY KEY(`contactgroup_id`),
+ CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `contactgroups_user_index` (`user_id`,`del`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `contactgroupmembers`
+
+CREATE TABLE `contactgroupmembers` (
+ `contactgroup_id` int(10) UNSIGNED NOT NULL,
+ `contact_id` int(10) UNSIGNED NOT NULL,
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ PRIMARY KEY (`contactgroup_id`, `contact_id`),
+ CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
+ REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
+ REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `contactgroupmembers_contact_index` (`contact_id`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB;
+
+
+-- Table structure for table `identities`
+
+CREATE TABLE `identities` (
+ `identity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `standard` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL,
+ `organization` varchar(128) NOT NULL DEFAULT '',
+ `email` varchar(128) NOT NULL,
+ `reply-to` varchar(128) NOT NULL DEFAULT '',
+ `bcc` varchar(128) NOT NULL DEFAULT '',
+ `signature` longtext,
+ `html_signature` tinyint(1) NOT NULL DEFAULT '0',
+ PRIMARY KEY(`identity_id`),
+ CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_identities_index` (`user_id`, `del`),
+ INDEX `email_identities_index` (`email`, `del`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `responses`
+
+CREATE TABLE `responses` (
+ `response_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `name` varchar(255) NOT NULL,
+ `data` longtext NOT NULL,
+ `is_html` tinyint(1) NOT NULL DEFAULT '0',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`response_id`),
+ CONSTRAINT `user_id_fk_responses` FOREIGN KEY (`user_id`)
+ REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_responses_index` (`user_id`, `del`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `dictionary`
+
+CREATE TABLE `dictionary` (
+ `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- redundant, for compat. with Galera Cluster
+ `user_id` int(10) UNSIGNED, -- NULL here is for "shared dictionaries"
+ `language` varchar(16) NOT NULL,
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `language`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+
+-- Table structure for table `searches`
+
+CREATE TABLE `searches` (
+ `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `type` int(3) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL,
+ `data` text,
+ PRIMARY KEY(`search_id`),
+ CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `type`, `name`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- Table structure for table `filestore`
+
+CREATE TABLE `filestore` (
+ `file_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `context` varchar(32) NOT NULL,
+ `filename` varchar(128) NOT NULL,
+ `mtime` int(10) NOT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`file_id`),
+ CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
+ REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `context`, `filename`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- Table structure for table `system`
+
+CREATE TABLE `system` (
+ `name` varchar(64) NOT NULL,
+ `value` mediumtext,
+ PRIMARY KEY(`name`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS=1;
+
+INSERT INTO `system` (`name`, `value`) VALUES ('roundcube-version', '2022081200');
diff --git a/ruty/mails/SQL/mysql/2008030300.sql b/ruty/mails/SQL/mysql/2008030300.sql
new file mode 100644
index 0000000..9a3d048
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2008030300.sql
@@ -0,0 +1,16 @@
+-- Updates from version 0.1-stable
+
+TRUNCATE TABLE `messages`;
+
+ALTER TABLE `messages`
+ DROP INDEX `idx`,
+ DROP INDEX `uid`;
+
+ALTER TABLE `cache`
+ DROP INDEX `cache_key`,
+ DROP INDEX `session_id`,
+ ADD INDEX `user_cache_index` (`user_id`,`cache_key`);
+
+ALTER TABLE `users`
+ ADD INDEX `username_index` (`username`),
+ ADD INDEX `alias_index` (`alias`);
diff --git a/ruty/mails/SQL/mysql/2008040500.sql b/ruty/mails/SQL/mysql/2008040500.sql
new file mode 100644
index 0000000..f538f63
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2008040500.sql
@@ -0,0 +1,9 @@
+-- Updates from version 0.1.1
+
+ALTER TABLE `identities`
+ MODIFY `signature` text,
+ MODIFY `bcc` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `organization` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `name` varchar(128) NOT NULL,
+ MODIFY `email` varchar(128) NOT NULL;
diff --git a/ruty/mails/SQL/mysql/2008060900.sql b/ruty/mails/SQL/mysql/2008060900.sql
new file mode 100644
index 0000000..9f8de0a
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2008060900.sql
@@ -0,0 +1,4 @@
+-- Updates from version 0.2-alpha
+
+ALTER TABLE `messages`
+ ADD INDEX `created_index` (`created`);
diff --git a/ruty/mails/SQL/mysql/2008092100.sql b/ruty/mails/SQL/mysql/2008092100.sql
new file mode 100644
index 0000000..3989c75
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2008092100.sql
@@ -0,0 +1,20 @@
+-- Updates from version 0.2-beta (InnoDB required)
+
+ALTER TABLE `cache`
+ DROP `session_id`;
+
+ALTER TABLE `session`
+ ADD INDEX `changed_index` (`changed`);
+
+ALTER TABLE `cache`
+ ADD INDEX `created_index` (`created`);
+
+ALTER TABLE `users`
+ CHANGE `language` `language` varchar(5);
+
+ALTER TABLE `cache` ENGINE=InnoDB;
+ALTER TABLE `session` ENGINE=InnoDB;
+ALTER TABLE `messages` ENGINE=InnoDB;
+ALTER TABLE `users` ENGINE=InnoDB;
+ALTER TABLE `contacts` ENGINE=InnoDB;
+ALTER TABLE `identities` ENGINE=InnoDB;
diff --git a/ruty/mails/SQL/mysql/2009090400.sql b/ruty/mails/SQL/mysql/2009090400.sql
new file mode 100644
index 0000000..fd31bed
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2009090400.sql
@@ -0,0 +1,12 @@
+-- Updates from version 0.3-stable
+
+TRUNCATE `messages`;
+
+ALTER TABLE `messages`
+ ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`);
+
+ALTER TABLE `session`
+ CHANGE `vars` `vars` MEDIUMTEXT NOT NULL;
+
+ALTER TABLE `contacts`
+ ADD INDEX `user_contacts_index` (`user_id`,`email`);
diff --git a/ruty/mails/SQL/mysql/2009103100.sql b/ruty/mails/SQL/mysql/2009103100.sql
new file mode 100644
index 0000000..aafbe23
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2009103100.sql
@@ -0,0 +1,52 @@
+-- Updates from version 0.3.1
+-- WARNING: Make sure that all tables are using InnoDB engine!!!
+-- If not, use: ALTER TABLE xxx ENGINE=InnoDB;
+
+/* MySQL bug workaround: http://bugs.mysql.com/bug.php?id=46293 */
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `messages` DROP FOREIGN KEY `user_id_fk_messages`;
+ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`;
+ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
+ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`;
+
+ALTER TABLE `messages` ADD CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `cache` ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `identities` ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `contacts` ALTER `name` SET DEFAULT '';
+ALTER TABLE `contacts` ALTER `firstname` SET DEFAULT '';
+ALTER TABLE `contacts` ALTER `surname` SET DEFAULT '';
+
+ALTER TABLE `identities` ADD INDEX `user_identities_index` (`user_id`, `del`);
+ALTER TABLE `identities` ADD `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `user_id`;
+
+CREATE TABLE `contactgroups` (
+ `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL DEFAULT '',
+ PRIMARY KEY(`contactgroup_id`),
+ CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `contactgroups_user_index` (`user_id`,`del`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `contactgroupmembers` (
+ `contactgroup_id` int(10) UNSIGNED NOT NULL,
+ `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ PRIMARY KEY (`contactgroup_id`, `contact_id`),
+ CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`)
+ REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`)
+ REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) /*!40000 ENGINE=INNODB */;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
diff --git a/ruty/mails/SQL/mysql/2010042300.sql b/ruty/mails/SQL/mysql/2010042300.sql
new file mode 100644
index 0000000..8b90af4
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2010042300.sql
@@ -0,0 +1,4 @@
+-- Updates from version 0.4-beta
+
+ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL;
+UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00';
diff --git a/ruty/mails/SQL/mysql/2010100600.sql b/ruty/mails/SQL/mysql/2010100600.sql
new file mode 100644
index 0000000..ca0fec8
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2010100600.sql
@@ -0,0 +1,8 @@
+-- Updates from version 0.4.2
+
+ALTER TABLE `users` DROP INDEX `username_index`;
+ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`);
+
+ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL;
+
+TRUNCATE TABLE `messages`;
diff --git a/ruty/mails/SQL/mysql/2011011200.sql b/ruty/mails/SQL/mysql/2011011200.sql
new file mode 100644
index 0000000..6597034
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2011011200.sql
@@ -0,0 +1,8 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE `contacts` ADD `words` TEXT NULL AFTER `vcard`;
+ALTER TABLE `contacts` CHANGE `vcard` `vcard` LONGTEXT /*!40101 CHARACTER SET utf8 */ NULL DEFAULT NULL;
+ALTER TABLE `contactgroupmembers` ADD INDEX `contactgroupmembers_contact_index` (`contact_id`);
+
+TRUNCATE TABLE `messages`;
+TRUNCATE TABLE `cache`;
diff --git a/ruty/mails/SQL/mysql/2011092800.sql b/ruty/mails/SQL/mysql/2011092800.sql
new file mode 100644
index 0000000..6b7cbe1
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2011092800.sql
@@ -0,0 +1,67 @@
+-- Updates from version 0.6
+
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL;
+ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
+
+CREATE TABLE `dictionary` (
+ `user_id` int(10) UNSIGNED DEFAULT NULL,
+ `language` varchar(5) NOT NULL,
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `language`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `searches` (
+ `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `type` int(3) NOT NULL DEFAULT '0',
+ `name` varchar(128) NOT NULL,
+ `data` text,
+ PRIMARY KEY(`search_id`),
+ CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `type`, `name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+DROP TABLE `messages`;
+
+CREATE TABLE `cache_index` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `valid` tinyint(1) NOT NULL DEFAULT '0',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `cache_thread` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+CREATE TABLE `cache_messages` (
+ `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
+ `mailbox` varchar(255) BINARY NOT NULL,
+ `uid` int(11) UNSIGNED NOT NULL DEFAULT '0',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ `flags` int(11) NOT NULL DEFAULT '0',
+ CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `changed_index` (`changed`),
+ PRIMARY KEY (`user_id`, `mailbox`, `uid`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
diff --git a/ruty/mails/SQL/mysql/2011111600.sql b/ruty/mails/SQL/mysql/2011111600.sql
new file mode 100644
index 0000000..6f53daa
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2011111600.sql
@@ -0,0 +1,3 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL;
diff --git a/ruty/mails/SQL/mysql/2011121400.sql b/ruty/mails/SQL/mysql/2011121400.sql
new file mode 100644
index 0000000..5aee806
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2011121400.sql
@@ -0,0 +1,22 @@
+-- Updates from version 0.7
+
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
+ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
+ALTER TABLE `contacts` DROP INDEX `user_contacts_index`;
+ALTER TABLE `contacts` MODIFY `email` text NOT NULL;
+ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`del`);
+ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+
+ALTER TABLE `cache` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_index` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_thread` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `cache_messages` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contacts` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contactgroups` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `contactgroupmembers` ALTER `contact_id` DROP DEFAULT;
+ALTER TABLE `identities` ALTER `user_id` DROP DEFAULT;
+ALTER TABLE `searches` ALTER `user_id` DROP DEFAULT;
+
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
diff --git a/ruty/mails/SQL/mysql/2012080700.sql b/ruty/mails/SQL/mysql/2012080700.sql
new file mode 100644
index 0000000..789b712
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2012080700.sql
@@ -0,0 +1,5 @@
+-- Updates from version 0.8
+
+ALTER TABLE `cache` DROP COLUMN `cache_id`;
+ALTER TABLE `users` DROP COLUMN `alias`;
+ALTER TABLE `identities` ADD INDEX `email_identities_index` (`email`, `del`);
diff --git a/ruty/mails/SQL/mysql/2013011000.sql b/ruty/mails/SQL/mysql/2013011000.sql
new file mode 100644
index 0000000..d1ea001
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2013011000.sql
@@ -0,0 +1,7 @@
+-- Upgrade from 0.9-beta
+
+CREATE TABLE IF NOT EXISTS `system` (
+ `name` varchar(64) NOT NULL,
+ `value` mediumtext,
+ PRIMARY KEY(`name`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
diff --git a/ruty/mails/SQL/mysql/2013042700.sql b/ruty/mails/SQL/mysql/2013042700.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2013042700.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/mysql/2013052500.sql b/ruty/mails/SQL/mysql/2013052500.sql
new file mode 100644
index 0000000..b5f72b8
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2013052500.sql
@@ -0,0 +1,7 @@
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `data` longtext NOT NULL,
+ INDEX `created_index` (`created`),
+ INDEX `cache_key_index` (`cache_key`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
diff --git a/ruty/mails/SQL/mysql/2013061000.sql b/ruty/mails/SQL/mysql/2013061000.sql
new file mode 100644
index 0000000..54041b3
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2013061000.sql
@@ -0,0 +1,24 @@
+ALTER TABLE `cache` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_shared` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_index` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_thread` ADD `expires` datetime DEFAULT NULL;
+ALTER TABLE `cache_messages` ADD `expires` datetime DEFAULT NULL;
+
+-- initialize expires column with created/changed date + 7days
+UPDATE `cache` SET `expires` = `created` + interval 604800 second;
+UPDATE `cache_shared` SET `expires` = `created` + interval 604800 second;
+UPDATE `cache_index` SET `expires` = `changed` + interval 604800 second;
+UPDATE `cache_thread` SET `expires` = `changed` + interval 604800 second;
+UPDATE `cache_messages` SET `expires` = `changed` + interval 604800 second;
+
+ALTER TABLE `cache` DROP INDEX `created_index`;
+ALTER TABLE `cache_shared` DROP INDEX `created_index`;
+ALTER TABLE `cache_index` DROP `changed`;
+ALTER TABLE `cache_thread` DROP `changed`;
+ALTER TABLE `cache_messages` DROP `changed`;
+
+ALTER TABLE `cache` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_shared` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_index` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_thread` ADD INDEX `expires_index` (`expires`);
+ALTER TABLE `cache_messages` ADD INDEX `expires_index` (`expires`);
diff --git a/ruty/mails/SQL/mysql/2014042900.sql b/ruty/mails/SQL/mysql/2014042900.sql
new file mode 100644
index 0000000..9d93716
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2014042900.sql
@@ -0,0 +1 @@
+ALTER TABLE `users` CHANGE `preferences` `preferences` longtext;
diff --git a/ruty/mails/SQL/mysql/2015030800.sql b/ruty/mails/SQL/mysql/2015030800.sql
new file mode 100644
index 0000000..5ff6f14
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2015030800.sql
@@ -0,0 +1 @@
+ALTER TABLE `identities` CHANGE `signature` `signature` longtext;
diff --git a/ruty/mails/SQL/mysql/2015111100.sql b/ruty/mails/SQL/mysql/2015111100.sql
new file mode 100644
index 0000000..08ea8fc
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2015111100.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `users`
+ ADD `failed_login` datetime DEFAULT NULL,
+ ADD `failed_login_counter` int(10) UNSIGNED DEFAULT NULL;
diff --git a/ruty/mails/SQL/mysql/2016081200.sql b/ruty/mails/SQL/mysql/2016081200.sql
new file mode 100644
index 0000000..aa09087
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2016081200.sql
@@ -0,0 +1 @@
+ALTER TABLE `session` DROP COLUMN `created`;
diff --git a/ruty/mails/SQL/mysql/2016100900.sql b/ruty/mails/SQL/mysql/2016100900.sql
new file mode 100644
index 0000000..ea096e9
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2016100900.sql
@@ -0,0 +1 @@
+ALTER TABLE `session` MODIFY `ip` varchar(40) NOT NULL;
diff --git a/ruty/mails/SQL/mysql/2016112200.sql b/ruty/mails/SQL/mysql/2016112200.sql
new file mode 100644
index 0000000..1bfc9ef
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2016112200.sql
@@ -0,0 +1,25 @@
+-- redundant column, for compat. with Galera Cluster
+ALTER TABLE `dictionary` ADD COLUMN `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
+
+DROP TABLE `cache`;
+DROP TABLE `cache_shared`;
+
+CREATE TABLE `cache` (
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`user_id`, `cache_key`),
+ CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+
+
+CREATE TABLE `cache_shared` (
+ `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
+ `expires` datetime DEFAULT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`cache_key`),
+ INDEX `expires_index` (`expires`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
diff --git a/ruty/mails/SQL/mysql/2018021600.sql b/ruty/mails/SQL/mysql/2018021600.sql
new file mode 100644
index 0000000..ed72c0e
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2018021600.sql
@@ -0,0 +1,11 @@
+CREATE TABLE `filestore` (
+ `file_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `filename` varchar(128) NOT NULL,
+ `mtime` int(10) NOT NULL,
+ `data` longtext NOT NULL,
+ PRIMARY KEY (`file_id`),
+ CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
+ REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE `uniqueness` (`user_id`, `filename`)
+) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
diff --git a/ruty/mails/SQL/mysql/2018122300.sql b/ruty/mails/SQL/mysql/2018122300.sql
new file mode 100644
index 0000000..26e90a1
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2018122300.sql
@@ -0,0 +1,7 @@
+ALTER TABLE `filestore` ADD COLUMN `context` varchar(32) NOT NULL;
+UPDATE `filestore` SET `context` = 'enigma';
+ALTER TABLE `filestore` DROP FOREIGN KEY `user_id_fk_filestore`;
+ALTER TABLE `filestore` DROP INDEX `uniqueness`;
+ALTER TABLE `filestore` ADD UNIQUE INDEX `uniqueness` (`user_id`, `context`, `filename`);
+ALTER TABLE `filestore` ADD CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
+ REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/ruty/mails/SQL/mysql/2019092900.sql b/ruty/mails/SQL/mysql/2019092900.sql
new file mode 100644
index 0000000..204b159
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2019092900.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
+ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
diff --git a/ruty/mails/SQL/mysql/2020020100.sql b/ruty/mails/SQL/mysql/2020020100.sql
new file mode 100644
index 0000000..51b2f77
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2020020100.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `users` MODIFY `language` varchar(16);
+ALTER TABLE `dictionary` MODIFY `language` varchar(16) NOT NULL;
diff --git a/ruty/mails/SQL/mysql/2020020101.sql b/ruty/mails/SQL/mysql/2020020101.sql
new file mode 100644
index 0000000..0a0402b
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2020020101.sql
@@ -0,0 +1,70 @@
+-- Dropping foreign keys and changing table format is needed for some versions of MySQL (#7277)
+ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`;
+ALTER TABLE `cache_index` DROP FOREIGN KEY `user_id_fk_cache_index`;
+ALTER TABLE `cache_thread` DROP FOREIGN KEY `user_id_fk_cache_thread`;
+ALTER TABLE `cache_messages` DROP FOREIGN KEY `user_id_fk_cache_messages`;
+ALTER TABLE `contactgroups` DROP FOREIGN KEY `user_id_fk_contactgroups`;
+ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`;
+ALTER TABLE `dictionary` DROP FOREIGN KEY `user_id_fk_dictionary`;
+ALTER TABLE `filestore` DROP FOREIGN KEY `user_id_fk_filestore`;
+ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`;
+ALTER TABLE `searches` DROP FOREIGN KEY `user_id_fk_searches`;
+
+ALTER TABLE `session` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `users` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `cache` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `cache_shared` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `cache_index` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `cache_thread` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `cache_messages` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `contacts` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `contactgroups` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `contactgroupmembers` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `identities` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `dictionary` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `searches` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `filestore` ROW_FORMAT=DYNAMIC;
+ALTER TABLE `system` ROW_FORMAT=DYNAMIC;
+
+ALTER TABLE `session` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `users` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `cache` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `cache_shared` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `cache_index` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `cache_thread` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `cache_messages` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `contacts` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `contactgroups` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `identities` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `dictionary` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `searches` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `filestore` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `system` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
+ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
+ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
+ALTER TABLE `cache_index` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
+ALTER TABLE `cache_thread` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
+ALTER TABLE `cache_messages` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
+
+ALTER TABLE `cache`
+ ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `cache_index`
+ ADD CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `cache_thread`
+ ADD CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `cache_messages`
+ ADD CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `contactgroups`
+ ADD CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `contacts`
+ ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `dictionary`
+ ADD CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `filestore`
+ ADD CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `identities`
+ ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `searches`
+ ADD CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/ruty/mails/SQL/mysql/2020091000.sql b/ruty/mails/SQL/mysql/2020091000.sql
new file mode 100644
index 0000000..aa098e3
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2020091000.sql
@@ -0,0 +1,12 @@
+CREATE TABLE `collected_addresses` (
+ `address_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `email` varchar(255) NOT NULL,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `type` int(10) UNSIGNED NOT NULL,
+ PRIMARY KEY(`address_id`),
+ CONSTRAINT `user_id_fk_collected_addresses` FOREIGN KEY (`user_id`)
+ REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ UNIQUE INDEX `user_email_collected_addresses_index` (`user_id`, `type`, `email`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
diff --git a/ruty/mails/SQL/mysql/2020122900.sql b/ruty/mails/SQL/mysql/2020122900.sql
new file mode 100644
index 0000000..0711ed9
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2020122900.sql
@@ -0,0 +1 @@
+-- empty
diff --git a/ruty/mails/SQL/mysql/2021081000.sql b/ruty/mails/SQL/mysql/2021081000.sql
new file mode 100644
index 0000000..19068d1
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2021081000.sql
@@ -0,0 +1,13 @@
+CREATE TABLE `responses` (
+ `response_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) UNSIGNED NOT NULL,
+ `name` varchar(255) NOT NULL,
+ `data` longtext NOT NULL,
+ `is_html` tinyint(1) NOT NULL DEFAULT '0',
+ `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
+ `del` tinyint(1) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`response_id`),
+ CONSTRAINT `user_id_fk_responses` FOREIGN KEY (`user_id`)
+ REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ INDEX `user_responses_index` (`user_id`, `del`)
+) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
diff --git a/ruty/mails/SQL/mysql/2021100300.sql b/ruty/mails/SQL/mysql/2021100300.sql
new file mode 100644
index 0000000..49daeda
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2021100300.sql
@@ -0,0 +1 @@
+-- SQLite only
\ No newline at end of file
diff --git a/ruty/mails/SQL/mysql/2022081200.sql b/ruty/mails/SQL/mysql/2022081200.sql
new file mode 100644
index 0000000..105e39e
--- /dev/null
+++ b/ruty/mails/SQL/mysql/2022081200.sql
@@ -0,0 +1 @@
+-- SQLite/Postgres only
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle.initial.sql b/ruty/mails/SQL/oracle.initial.sql
new file mode 100644
index 0000000..989681c
--- /dev/null
+++ b/ruty/mails/SQL/oracle.initial.sql
@@ -0,0 +1,288 @@
+-- Roundcube Webmail initial database structure
+-- This was tested with Oracle 11g
+
+CREATE TABLE "users" (
+ "user_id" integer PRIMARY KEY,
+ "username" varchar(128) NOT NULL,
+ "mail_host" varchar(128) NOT NULL,
+ "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "last_login" timestamp with time zone DEFAULT NULL,
+ "failed_login" timestamp with time zone DEFAULT NULL,
+ "failed_login_counter" integer DEFAULT NULL,
+ "language" varchar(16),
+ "preferences" long DEFAULT NULL,
+ CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host")
+);
+
+CREATE SEQUENCE "users_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "users_seq_trig"
+BEFORE INSERT ON "users" FOR EACH ROW
+BEGIN
+ :NEW."user_id" := "users_seq".nextval;
+END;
+/
+
+CREATE TABLE "session" (
+ "sess_id" varchar(128) NOT NULL PRIMARY KEY,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "ip" varchar(41) NOT NULL,
+ "vars" long NOT NULL
+);
+
+CREATE INDEX "session_changed_idx" ON "session" ("changed");
+
+
+CREATE TABLE "identities" (
+ "identity_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "del" smallint DEFAULT 0 NOT NULL,
+ "standard" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "organization" varchar(128),
+ "email" varchar(128) NOT NULL,
+ "reply-to" varchar(128),
+ "bcc" varchar(128),
+ "signature" long,
+ "html_signature" integer DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX "identities_user_id_idx" ON "identities" ("user_id", "del");
+CREATE INDEX "identities_email_idx" ON "identities" ("email", "del");
+
+CREATE SEQUENCE "identities_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "identities_seq_trig"
+BEFORE INSERT ON "identities" FOR EACH ROW
+BEGIN
+ :NEW."identity_id" := "identities_seq".nextval;
+END;
+/
+
+
+CREATE TABLE "responses" (
+ "response_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "del" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "data" long NOT NULL,
+ "is_html" smallint DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX "responses_user_id_idx" ON "responses" ("user_id", "del");
+
+CREATE SEQUENCE "responses_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "responses_seq_trig"
+BEFORE INSERT ON "responses" FOR EACH ROW
+BEGIN
+ :NEW."response_id" := "response_seq".nextval;
+END;
+/
+
+
+CREATE TABLE "collected_addresses" (
+ "address_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "name" varchar(255) DEFAULT NULL,
+ "email" varchar(255) DEFAULT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX "collected_addresses_user_id_idx" ON "collected_addresses" ("user_id", "type", "email");
+
+CREATE SEQUENCE "collected_addresses_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "collected_addresses_seq_trig"
+BEFORE INSERT ON "collected_addresses" FOR EACH ROW
+BEGIN
+ :NEW."address_id" := "collected_addresses_seq".nextval;
+END;
+/
+
+CREATE TABLE "contacts" (
+ "contact_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "del" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) DEFAULT NULL,
+ "email" varchar(4000) DEFAULT NULL,
+ "firstname" varchar(128) DEFAULT NULL,
+ "surname" varchar(128) DEFAULT NULL,
+ "vcard" long,
+ "words" varchar(4000)
+);
+
+CREATE INDEX "contacts_user_id_idx" ON "contacts" ("user_id", "del");
+
+CREATE SEQUENCE "contacts_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "contacts_seq_trig"
+BEFORE INSERT ON "contacts" FOR EACH ROW
+BEGIN
+ :NEW."contact_id" := "contacts_seq".nextval;
+END;
+/
+
+CREATE TABLE "contactgroups" (
+ "contactgroup_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "del" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) NOT NULL
+);
+
+CREATE INDEX "contactgroups_user_id_idx" ON "contactgroups" ("user_id", "del");
+
+CREATE SEQUENCE "contactgroups_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "contactgroups_seq_trig"
+BEFORE INSERT ON "contactgroups" FOR EACH ROW
+BEGIN
+ :NEW."contactgroup_id" := "contactgroups_seq".nextval;
+END;
+/
+
+CREATE TABLE "contactgroupmembers" (
+ "contactgroup_id" integer NOT NULL
+ REFERENCES "contactgroups" ("contactgroup_id") ON DELETE CASCADE,
+ "contact_id" integer NOT NULL
+ REFERENCES "contacts" ("contact_id") ON DELETE CASCADE,
+ "created" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ PRIMARY KEY ("contactgroup_id", "contact_id")
+);
+
+CREATE INDEX "contactgroupmembers_idx" ON "contactgroupmembers" ("contact_id");
+
+
+CREATE TABLE "cache" (
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "cache_key" varchar(128) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("user_id", "cache_key")
+);
+
+CREATE INDEX "cache_expires_idx" ON "cache" ("expires");
+
+
+CREATE TABLE "cache_shared" (
+ "cache_key" varchar(255) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("cache_key")
+);
+
+CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
+
+
+CREATE TABLE "cache_index" (
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "mailbox" varchar(255) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "valid" smallint DEFAULT 0 NOT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("user_id", "mailbox")
+);
+
+CREATE INDEX "cache_index_expires_idx" ON "cache_index" ("expires");
+
+
+CREATE TABLE "cache_thread" (
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "mailbox" varchar(255) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("user_id", "mailbox")
+);
+
+CREATE INDEX "cache_thread_expires_idx" ON "cache_thread" ("expires");
+
+
+CREATE TABLE "cache_messages" (
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "mailbox" varchar(255) NOT NULL,
+ "uid" integer NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ "flags" integer DEFAULT 0 NOT NULL,
+ PRIMARY KEY ("user_id", "mailbox", "uid")
+);
+
+CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires");
+
+
+CREATE TABLE "dictionary" (
+ "user_id" integer DEFAULT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "language" varchar(16) NOT NULL,
+ "data" long DEFAULT NULL,
+ CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language")
+);
+
+
+CREATE TABLE "searches" (
+ "search_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "type" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "data" long NOT NULL,
+ CONSTRAINT "searches_user_id_key" UNIQUE ("user_id", "type", "name")
+);
+
+CREATE SEQUENCE "searches_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "searches_seq_trig"
+BEFORE INSERT ON "searches" FOR EACH ROW
+BEGIN
+ :NEW."search_id" := "searches_seq".nextval;
+END;
+/
+
+CREATE TABLE "filestore" (
+ "file_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE ON UPDATE CASCADE,
+ "context" varchar(32) NOT NULL,
+ "filename" varchar(128) NOT NULL,
+ "mtime" integer NOT NULL,
+ "data" long,
+ CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "context", "filename")
+);
+
+CREATE SEQUENCE "filestore_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "filestore_seq_trig"
+BEFORE INSERT ON "filestore" FOR EACH ROW
+BEGIN
+ :NEW."user_id" := "filestore_seq".nextval;
+END;
+/
+
+CREATE TABLE "system" (
+ "name" varchar(64) NOT NULL PRIMARY KEY,
+ "value" long
+);
+
+INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2022081200');
diff --git a/ruty/mails/SQL/oracle/2015030800.sql b/ruty/mails/SQL/oracle/2015030800.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2015030800.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle/2015111100.sql b/ruty/mails/SQL/oracle/2015111100.sql
new file mode 100644
index 0000000..010203f
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2015111100.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "users" ADD "failed_login" timestamp with time zone DEFAULT NULL;
+ALTER TABLE "users" ADD "failed_login_counter" integer DEFAULT NULL;
diff --git a/ruty/mails/SQL/oracle/2016081200.sql b/ruty/mails/SQL/oracle/2016081200.sql
new file mode 100644
index 0000000..aacfe41
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2016081200.sql
@@ -0,0 +1 @@
+ALTER TABLE "session" DROP COLUMN "created";
diff --git a/ruty/mails/SQL/oracle/2016100900.sql b/ruty/mails/SQL/oracle/2016100900.sql
new file mode 100644
index 0000000..030f169
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2016100900.sql
@@ -0,0 +1 @@
+ALTER TABLE "session" MODIFY "ip" varchar(41) NOT NULL;
diff --git a/ruty/mails/SQL/oracle/2016112200.sql b/ruty/mails/SQL/oracle/2016112200.sql
new file mode 100644
index 0000000..3aab265
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2016112200.sql
@@ -0,0 +1,23 @@
+DROP TABLE "cache";
+DROP TABLE "cache_shared";
+
+CREATE TABLE "cache" (
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "cache_key" varchar(128) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("user_id", "cache_key")
+);
+
+CREATE INDEX "cache_expires_idx" ON "cache" ("expires");
+
+
+CREATE TABLE "cache_shared" (
+ "cache_key" varchar(255) NOT NULL,
+ "expires" timestamp with time zone DEFAULT NULL,
+ "data" long NOT NULL,
+ PRIMARY KEY ("cache_key")
+);
+
+CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires");
diff --git a/ruty/mails/SQL/oracle/2018021600.sql b/ruty/mails/SQL/oracle/2018021600.sql
new file mode 100644
index 0000000..2fe3bcd
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2018021600.sql
@@ -0,0 +1,19 @@
+CREATE TABLE "filestore" (
+ "file_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE ON UPDATE CASCADE,
+ "filename" varchar(128) NOT NULL,
+ "mtime" integer NOT NULL,
+ "data" long,
+ CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "filename")
+);
+
+CREATE SEQUENCE "filestore_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "filestore_seq_trig"
+BEFORE INSERT ON "filestore" FOR EACH ROW
+BEGIN
+ :NEW."user_id" := "filestore_seq".nextval;
+END;
+/
diff --git a/ruty/mails/SQL/oracle/2018122300.sql b/ruty/mails/SQL/oracle/2018122300.sql
new file mode 100644
index 0000000..dd75dfc
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2018122300.sql
@@ -0,0 +1,4 @@
+ALTER TABLE "filestore" ADD COLUMN "context" varchar(32) NOT NULL;
+UPDATE "filestore" SET "context" = 'enigma';
+ALTER TABLE "filestore" DROP CONSTRAINT "filestore_user_id_key";
+ALTER TABLE "filestore" ADD CONSTRAINT "filestore_user_id_key" UNIQUE ("user_id", "context", "filename");
diff --git a/ruty/mails/SQL/oracle/2019092900.sql b/ruty/mails/SQL/oracle/2019092900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2019092900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle/2020020100.sql b/ruty/mails/SQL/oracle/2020020100.sql
new file mode 100644
index 0000000..2590179
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2020020100.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "users" MODIFY "language" varchar(16) NOT NULL;
+ALTER TABLE "dictionary" MODIFY "language" varchar(16);
diff --git a/ruty/mails/SQL/oracle/2020020101.sql b/ruty/mails/SQL/oracle/2020020101.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2020020101.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle/2020091000.sql b/ruty/mails/SQL/oracle/2020091000.sql
new file mode 100644
index 0000000..0e598cd
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2020091000.sql
@@ -0,0 +1,21 @@
+CREATE TABLE "collected_addresses" (
+ "address_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "name" varchar(255) DEFAULT NULL,
+ "email" varchar(255) DEFAULT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX "collected_addresses_user_id_idx" ON "collected_addresses" ("user_id", "type", "email");
+
+CREATE SEQUENCE "collected_addresses_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "collected_addresses_seq_trig"
+BEFORE INSERT ON "collected_addresses" FOR EACH ROW
+BEGIN
+ :NEW."address_id" := "collected_addresses_seq".nextval;
+END;
+/
diff --git a/ruty/mails/SQL/oracle/2020122900.sql b/ruty/mails/SQL/oracle/2020122900.sql
new file mode 100644
index 0000000..73cbb58
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2020122900.sql
@@ -0,0 +1 @@
+--empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle/2021081000.sql b/ruty/mails/SQL/oracle/2021081000.sql
new file mode 100644
index 0000000..fb99b5d
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2021081000.sql
@@ -0,0 +1,22 @@
+CREATE TABLE "responses" (
+ "response_id" integer PRIMARY KEY,
+ "user_id" integer NOT NULL
+ REFERENCES "users" ("user_id") ON DELETE CASCADE,
+ "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL,
+ "del" smallint DEFAULT 0 NOT NULL,
+ "name" varchar(128) NOT NULL,
+ "data" long NOT NULL,
+ "is_html" smallint DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX "responses_user_id_idx" ON "responses" ("user_id", "del");
+
+CREATE SEQUENCE "responses_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "responses_seq_trig"
+BEFORE INSERT ON "responses" FOR EACH ROW
+BEGIN
+ :NEW."response_id" := "response_seq".nextval;
+END;
+/
diff --git a/ruty/mails/SQL/oracle/2021100300.sql b/ruty/mails/SQL/oracle/2021100300.sql
new file mode 100644
index 0000000..49daeda
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2021100300.sql
@@ -0,0 +1 @@
+-- SQLite only
\ No newline at end of file
diff --git a/ruty/mails/SQL/oracle/2022081200.sql b/ruty/mails/SQL/oracle/2022081200.sql
new file mode 100644
index 0000000..105e39e
--- /dev/null
+++ b/ruty/mails/SQL/oracle/2022081200.sql
@@ -0,0 +1 @@
+-- SQLite/Postgres only
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres.initial.sql b/ruty/mails/SQL/postgres.initial.sql
new file mode 100644
index 0000000..209f006
--- /dev/null
+++ b/ruty/mails/SQL/postgres.initial.sql
@@ -0,0 +1,378 @@
+-- Roundcube Webmail initial database structure
+
+--
+-- Sequence "users_seq"
+-- Name: users_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE users_seq
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "users"
+-- Name: users; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE users (
+ user_id integer DEFAULT nextval('users_seq'::text) PRIMARY KEY,
+ username varchar(128) DEFAULT '' NOT NULL,
+ mail_host varchar(128) DEFAULT '' NOT NULL,
+ created timestamp with time zone DEFAULT now() NOT NULL,
+ last_login timestamp with time zone,
+ failed_login timestamp with time zone,
+ failed_login_counter integer,
+ "language" varchar(16),
+ preferences text,
+ CONSTRAINT users_username_key UNIQUE (username, mail_host)
+);
+
+
+--
+-- Table "session"
+-- Name: session; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "session" (
+ sess_id varchar(128) DEFAULT '' PRIMARY KEY,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ ip varchar(41) NOT NULL,
+ vars text NOT NULL
+);
+
+CREATE INDEX session_changed_idx ON session (changed);
+
+
+--
+-- Sequence "identities_seq"
+-- Name: identities_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE identities_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "identities"
+-- Name: identities; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE identities (
+ identity_id integer DEFAULT nextval('identities_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint DEFAULT 0 NOT NULL,
+ standard smallint DEFAULT 0 NOT NULL,
+ name varchar(128) NOT NULL,
+ organization varchar(128),
+ email varchar(128) NOT NULL,
+ "reply-to" varchar(128),
+ bcc varchar(128),
+ signature text,
+ html_signature smallint DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX identities_user_id_idx ON identities (user_id, del);
+CREATE INDEX identities_email_idx ON identities (email, del);
+
+
+--
+-- Sequence "responses_seq"
+-- Name: responses_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE responses_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "responses"
+-- Name: responses; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE responses (
+ response_id integer DEFAULT nextval('responses_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint DEFAULT 0 NOT NULL,
+ name varchar(255) NOT NULL,
+ data text NOT NULL,
+ is_html smallint DEFAULT 0 NOT NULL
+);
+
+CREATE INDEX responses_user_id_idx ON responses (user_id, del);
+
+
+--
+-- Sequence "collected_addresses_seq"
+-- Name: collected_addresses_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE collected_addresses_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "collected_addresses"
+-- Name: collected_addresses; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE collected_addresses (
+ address_id integer DEFAULT nextval('collected_addresses_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ name varchar(255) DEFAULT '' NOT NULL,
+ email varchar(255) NOT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX collected_addresses_user_id_idx ON collected_addresses (user_id, "type", email);
+
+
+--
+-- Sequence "contacts_seq"
+-- Name: contacts_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE contacts_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "contacts"
+-- Name: contacts; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contacts (
+ contact_id integer DEFAULT nextval('contacts_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint DEFAULT 0 NOT NULL,
+ name varchar(128) DEFAULT '' NOT NULL,
+ email text DEFAULT '' NOT NULL,
+ firstname varchar(128) DEFAULT '' NOT NULL,
+ surname varchar(128) DEFAULT '' NOT NULL,
+ vcard text,
+ words text
+);
+
+CREATE INDEX contacts_user_id_idx ON contacts (user_id, del);
+
+--
+-- Sequence "contactgroups_seq"
+-- Name: contactgroups_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE contactgroups_seq
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "contactgroups"
+-- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contactgroups (
+ contactgroup_id integer DEFAULT nextval('contactgroups_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint NOT NULL DEFAULT 0,
+ name varchar(128) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);
+
+--
+-- Table "contactgroupmembers"
+-- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE contactgroupmembers (
+ contactgroup_id integer NOT NULL
+ REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ contact_id integer NOT NULL
+ REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ created timestamp with time zone DEFAULT now() NOT NULL,
+ PRIMARY KEY (contactgroup_id, contact_id)
+);
+
+CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);
+
+--
+-- Table "cache"
+-- Name: cache; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "cache" (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ cache_key varchar(128) DEFAULT '' NOT NULL,
+ expires timestamp with time zone,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+
+--
+-- Table "cache_shared"
+-- Name: cache_shared; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "cache_shared" (
+ cache_key varchar(255) NOT NULL PRIMARY KEY,
+ expires timestamp with time zone,
+ data text NOT NULL
+);
+
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
+
+--
+-- Table "cache_index"
+-- Name: cache_index; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_index (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires timestamp with time zone,
+ valid smallint NOT NULL DEFAULT 0,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_index_expires_idx ON cache_index (expires);
+
+--
+-- Table "cache_thread"
+-- Name: cache_thread; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires timestamp with time zone,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_thread_expires_idx ON cache_thread (expires);
+
+--
+-- Table "cache_messages"
+-- Name: cache_messages; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ expires timestamp with time zone,
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT 0,
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX cache_messages_expires_idx ON cache_messages (expires);
+
+--
+-- Table "dictionary"
+-- Name: dictionary; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE dictionary (
+ user_id integer
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "language" varchar(16) NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
+);
+
+--
+-- Sequence "searches_seq"
+-- Name: searches_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE searches_seq
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "searches"
+-- Name: searches; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE searches (
+ search_id integer DEFAULT nextval('searches_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "type" smallint DEFAULT 0 NOT NULL,
+ name varchar(128) NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
+);
+
+--
+-- Sequence "filestore_seq"
+-- Name: filestore_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+--
+
+CREATE SEQUENCE "filestore_seq"
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+--
+-- Table "filestore"
+-- Name: filestore; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "filestore" (
+ file_id integer DEFAULT nextval('filestore_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ context varchar(32) NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT filestore_user_id_filename UNIQUE (user_id, context, filename)
+);
+
+--
+-- Table "system"
+-- Name: system; Type: TABLE; Schema: public; Owner: postgres
+--
+
+CREATE TABLE "system" (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text
+);
+
+INSERT INTO "system" (name, value) VALUES ('roundcube-version', '2022081200');
diff --git a/ruty/mails/SQL/postgres/2008030300.sql b/ruty/mails/SQL/postgres/2008030300.sql
new file mode 100644
index 0000000..67a8f15
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2008030300.sql
@@ -0,0 +1,18 @@
+-- Updates from version 0.1-stable to 0.1.1
+
+CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key);
+CREATE INDEX contacts_user_id_idx ON contacts (user_id);
+CREATE INDEX identities_user_id_idx ON identities (user_id);
+
+CREATE INDEX users_username_id_idx ON users (username);
+CREATE INDEX users_alias_id_idx ON users (alias);
+
+-- added ON DELETE/UPDATE actions
+ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey;
+ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE identities DROP CONSTRAINT identities_user_id_fkey;
+ALTER TABLE identities ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_fkey;
+ALTER TABLE contacts ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE cache DROP CONSTRAINT cache_user_id_fkey;
+ALTER TABLE cache ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/ruty/mails/SQL/postgres/2008060900.sql b/ruty/mails/SQL/postgres/2008060900.sql
new file mode 100644
index 0000000..7c60a44
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2008060900.sql
@@ -0,0 +1,3 @@
+-- Updates from version 0.2-alpha
+
+CREATE INDEX messages_created_idx ON messages (created);
diff --git a/ruty/mails/SQL/postgres/2008092100.sql b/ruty/mails/SQL/postgres/2008092100.sql
new file mode 100644
index 0000000..6cd1929
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2008092100.sql
@@ -0,0 +1,14 @@
+-- Updates from version 0.2-beta
+
+ALTER TABLE cache DROP session_id;
+
+CREATE INDEX session_changed_idx ON session (changed);
+CREATE INDEX cache_created_idx ON "cache" (created);
+
+ALTER TABLE users ALTER "language" DROP NOT NULL;
+ALTER TABLE users ALTER "language" DROP DEFAULT;
+
+ALTER TABLE identities ALTER del TYPE smallint;
+ALTER TABLE identities ALTER standard TYPE smallint;
+ALTER TABLE contacts ALTER del TYPE smallint;
+ALTER TABLE messages ALTER del TYPE smallint;
diff --git a/ruty/mails/SQL/postgres/2009090400.sql b/ruty/mails/SQL/postgres/2009090400.sql
new file mode 100644
index 0000000..8eb4949
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2009090400.sql
@@ -0,0 +1,6 @@
+-- Updates from version 0.3-stable
+
+TRUNCATE messages;
+CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
+DROP INDEX contacts_user_id_idx;
+CREATE INDEX contacts_user_id_idx ON contacts (user_id, email);
diff --git a/ruty/mails/SQL/postgres/2009103100.sql b/ruty/mails/SQL/postgres/2009103100.sql
new file mode 100644
index 0000000..2350f79
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2009103100.sql
@@ -0,0 +1,32 @@
+-- Updates from version 0.3.1
+
+DROP INDEX identities_user_id_idx;
+CREATE INDEX identities_user_id_idx ON identities (user_id, del);
+
+ALTER TABLE identities ADD changed timestamp with time zone DEFAULT now() NOT NULL;
+
+CREATE SEQUENCE contactgroups_ids
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+CREATE TABLE contactgroups (
+ contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint NOT NULL DEFAULT 0,
+ name varchar(128) NOT NULL DEFAULT ''
+);
+
+CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del);
+
+CREATE TABLE contactgroupmembers (
+ contactgroup_id integer NOT NULL
+ REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ contact_id integer NOT NULL
+ REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ created timestamp with time zone DEFAULT now() NOT NULL,
+ PRIMARY KEY (contactgroup_id, contact_id)
+);
diff --git a/ruty/mails/SQL/postgres/2010042300.sql b/ruty/mails/SQL/postgres/2010042300.sql
new file mode 100644
index 0000000..bc9bd82
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2010042300.sql
@@ -0,0 +1,4 @@
+-- Updates from version 0.4-beta
+
+ALTER TABLE users ALTER last_login DROP NOT NULL;
+ALTER TABLE users ALTER last_login SET DEFAULT NULL;
diff --git a/ruty/mails/SQL/postgres/2010100600.sql b/ruty/mails/SQL/postgres/2010100600.sql
new file mode 100644
index 0000000..8dfcc12
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2010100600.sql
@@ -0,0 +1,7 @@
+-- Updates from version 0.4.2
+
+DROP INDEX users_username_id_idx;
+ALTER TABLE users ADD CONSTRAINT users_username_key UNIQUE (username, mail_host);
+ALTER TABLE contacts ALTER email TYPE varchar(255);
+
+TRUNCATE messages;
diff --git a/ruty/mails/SQL/postgres/2011011200.sql b/ruty/mails/SQL/postgres/2011011200.sql
new file mode 100644
index 0000000..db468d8
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2011011200.sql
@@ -0,0 +1,7 @@
+-- Updates from version 0.5.x
+
+ALTER TABLE contacts ADD words TEXT NULL;
+CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);
+
+TRUNCATE messages;
+TRUNCATE cache;
diff --git a/ruty/mails/SQL/postgres/2011092800.sql b/ruty/mails/SQL/postgres/2011092800.sql
new file mode 100644
index 0000000..fac3cd3
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2011092800.sql
@@ -0,0 +1,64 @@
+-- Updates from version 0.6
+
+CREATE TABLE dictionary (
+ user_id integer DEFAULT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "language" varchar(5) NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
+);
+
+CREATE SEQUENCE search_ids
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+CREATE TABLE searches (
+ search_id integer DEFAULT nextval('search_ids'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "type" smallint DEFAULT 0 NOT NULL,
+ name varchar(128) NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name)
+);
+
+DROP SEQUENCE message_ids;
+DROP TABLE messages;
+
+CREATE TABLE cache_index (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ valid smallint NOT NULL DEFAULT 0,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_index_changed_idx ON cache_index (changed);
+
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX cache_thread_changed_idx ON cache_thread (changed);
+
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT 0,
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX cache_messages_changed_idx ON cache_messages (changed);
diff --git a/ruty/mails/SQL/postgres/2011111600.sql b/ruty/mails/SQL/postgres/2011111600.sql
new file mode 100644
index 0000000..a382ba0
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2011111600.sql
@@ -0,0 +1,3 @@
+-- Updates from version 0.7-beta
+
+ALTER TABLE "session" ALTER sess_id TYPE varchar(128);
diff --git a/ruty/mails/SQL/postgres/2011121400.sql b/ruty/mails/SQL/postgres/2011121400.sql
new file mode 100644
index 0000000..81a0cb8
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2011121400.sql
@@ -0,0 +1,5 @@
+-- Updates from version 0.7
+
+DROP INDEX contacts_user_id_idx;
+CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del);
+ALTER TABLE contacts ALTER email TYPE text;
diff --git a/ruty/mails/SQL/postgres/2012080700.sql b/ruty/mails/SQL/postgres/2012080700.sql
new file mode 100644
index 0000000..41f6016
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2012080700.sql
@@ -0,0 +1,7 @@
+-- Updates from version 0.8
+
+ALTER TABLE cache DROP COLUMN cache_id;
+DROP SEQUENCE cache_ids;
+
+ALTER TABLE users DROP COLUMN alias;
+CREATE INDEX identities_email_idx ON identities (email, del);
diff --git a/ruty/mails/SQL/postgres/2013011000.sql b/ruty/mails/SQL/postgres/2013011000.sql
new file mode 100644
index 0000000..a8cf917
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2013011000.sql
@@ -0,0 +1,4 @@
+CREATE TABLE "system" (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text
+);
diff --git a/ruty/mails/SQL/postgres/2013042700.sql b/ruty/mails/SQL/postgres/2013042700.sql
new file mode 100644
index 0000000..bbd5675
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2013042700.sql
@@ -0,0 +1,14 @@
+ALTER SEQUENCE user_ids RENAME TO users_seq;
+ALTER TABLE users ALTER COLUMN user_id SET DEFAULT nextval('users_seq'::text);
+
+ALTER SEQUENCE identity_ids RENAME TO identities_seq;
+ALTER TABLE identities ALTER COLUMN identity_id SET DEFAULT nextval('identities_seq'::text);
+
+ALTER SEQUENCE contact_ids RENAME TO contacts_seq;
+ALTER TABLE contacts ALTER COLUMN contact_id SET DEFAULT nextval('contacts_seq'::text);
+
+ALTER SEQUENCE contactgroups_ids RENAME TO contactgroups_seq;
+ALTER TABLE contactgroups ALTER COLUMN contactgroup_id SET DEFAULT nextval('contactgroups_seq'::text);
+
+ALTER SEQUENCE search_ids RENAME TO searches_seq;
+ALTER TABLE searches ALTER COLUMN search_id SET DEFAULT nextval('searches_seq'::text);
diff --git a/ruty/mails/SQL/postgres/2013052500.sql b/ruty/mails/SQL/postgres/2013052500.sql
new file mode 100644
index 0000000..471e571
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2013052500.sql
@@ -0,0 +1,8 @@
+CREATE TABLE "cache_shared" (
+ cache_key varchar(255) NOT NULL,
+ created timestamp with time zone DEFAULT now() NOT NULL,
+ data text NOT NULL
+);
+
+CREATE INDEX cache_shared_cache_key_idx ON "cache_shared" (cache_key);
+CREATE INDEX cache_shared_created_idx ON "cache_shared" (created);
diff --git a/ruty/mails/SQL/postgres/2013061000.sql b/ruty/mails/SQL/postgres/2013061000.sql
new file mode 100644
index 0000000..9db0ebc
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2013061000.sql
@@ -0,0 +1,24 @@
+ALTER TABLE "cache" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_shared" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_index" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_thread" ADD expires timestamp with time zone DEFAULT NULL;
+ALTER TABLE "cache_messages" ADD expires timestamp with time zone DEFAULT NULL;
+
+-- initialize expires column with created/changed date + 7days
+UPDATE "cache" SET expires = created + interval '604800 seconds';
+UPDATE "cache_shared" SET expires = created + interval '604800 seconds';
+UPDATE "cache_index" SET expires = changed + interval '604800 seconds';
+UPDATE "cache_thread" SET expires = changed + interval '604800 seconds';
+UPDATE "cache_messages" SET expires = changed + interval '604800 seconds';
+
+DROP INDEX cache_created_idx;
+DROP INDEX cache_shared_created_idx;
+ALTER TABLE "cache_index" DROP "changed";
+ALTER TABLE "cache_thread" DROP "changed";
+ALTER TABLE "cache_messages" DROP "changed";
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
+CREATE INDEX cache_index_expires_idx ON "cache_index" (expires);
+CREATE INDEX cache_thread_expires_idx ON "cache_thread" (expires);
+CREATE INDEX cache_messages_expires_idx ON "cache_messages" (expires);
diff --git a/ruty/mails/SQL/postgres/2014042900.sql b/ruty/mails/SQL/postgres/2014042900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2014042900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres/2015030800.sql b/ruty/mails/SQL/postgres/2015030800.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2015030800.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres/2015111100.sql b/ruty/mails/SQL/postgres/2015111100.sql
new file mode 100644
index 0000000..3eea6d5
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2015111100.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "users" ADD failed_login timestamp with time zone DEFAULT NULL;
+ALTER TABLE "users" ADD failed_login_counter integer DEFAULT NULL;
diff --git a/ruty/mails/SQL/postgres/2016081200.sql b/ruty/mails/SQL/postgres/2016081200.sql
new file mode 100644
index 0000000..7235b40
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2016081200.sql
@@ -0,0 +1 @@
+ALTER TABLE "session" DROP COLUMN created;
diff --git a/ruty/mails/SQL/postgres/2016100900.sql b/ruty/mails/SQL/postgres/2016100900.sql
new file mode 100644
index 0000000..8eb7eed
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2016100900.sql
@@ -0,0 +1 @@
+ALTER TABLE session ALTER COLUMN ip TYPE character varying(41);
diff --git a/ruty/mails/SQL/postgres/2016112200.sql b/ruty/mails/SQL/postgres/2016112200.sql
new file mode 100644
index 0000000..34af971
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2016112200.sql
@@ -0,0 +1,21 @@
+DROP TABLE "cache";
+DROP TABLE "cache_shared";
+
+CREATE TABLE "cache" (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ cache_key varchar(128) DEFAULT '' NOT NULL,
+ expires timestamp with time zone DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX cache_expires_idx ON "cache" (expires);
+
+CREATE TABLE "cache_shared" (
+ cache_key varchar(255) NOT NULL PRIMARY KEY,
+ expires timestamp with time zone DEFAULT NULL,
+ data text NOT NULL
+);
+
+CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
diff --git a/ruty/mails/SQL/postgres/2018021600.sql b/ruty/mails/SQL/postgres/2018021600.sql
new file mode 100644
index 0000000..e67ef1b
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2018021600.sql
@@ -0,0 +1,15 @@
+CREATE SEQUENCE "filestore_seq"
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+CREATE TABLE "filestore" (
+ file_id integer DEFAULT nextval('filestore_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL,
+ CONSTRAINT filestore_user_id_filename UNIQUE (user_id, filename)
+);
diff --git a/ruty/mails/SQL/postgres/2018122300.sql b/ruty/mails/SQL/postgres/2018122300.sql
new file mode 100644
index 0000000..1a7d895
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2018122300.sql
@@ -0,0 +1,5 @@
+ALTER TABLE "filestore" ADD COLUMN context varchar(32);
+UPDATE "filestore" SET context = 'enigma';
+ALTER TABLE "filestore" ALTER COLUMN context SET NOT NULL;
+ALTER TABLE "filestore" DROP CONSTRAINT "filestore_user_id_filename";
+ALTER TABLE "filestore" ADD CONSTRAINT "filestore_user_id_context_filename" UNIQUE (user_id, context, filename);
diff --git a/ruty/mails/SQL/postgres/2019092900.sql b/ruty/mails/SQL/postgres/2019092900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2019092900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres/2020020100.sql b/ruty/mails/SQL/postgres/2020020100.sql
new file mode 100644
index 0000000..f9c0e91
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2020020100.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "dictionary" ALTER COLUMN "language" TYPE varchar(16);
+ALTER TABLE "users" ALTER COLUMN "language" TYPE varchar(16);
diff --git a/ruty/mails/SQL/postgres/2020020101.sql b/ruty/mails/SQL/postgres/2020020101.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2020020101.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres/2020091000.sql b/ruty/mails/SQL/postgres/2020091000.sql
new file mode 100644
index 0000000..fa618b3
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2020091000.sql
@@ -0,0 +1,19 @@
+
+CREATE SEQUENCE collected_addresses_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+CREATE TABLE collected_addresses (
+ address_id integer DEFAULT nextval('collected_addresses_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ name varchar(255) DEFAULT '' NOT NULL,
+ email varchar(255) NOT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX collected_addresses_user_id_idx ON collected_addresses (user_id, "type", email);
diff --git a/ruty/mails/SQL/postgres/2020122900.sql b/ruty/mails/SQL/postgres/2020122900.sql
new file mode 100644
index 0000000..4789533
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2020122900.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "users" ALTER COLUMN "preferences" DROP NOT NULL;
+ALTER TABLE "users" ALTER COLUMN "preferences" SET DEFAULT NULL;
diff --git a/ruty/mails/SQL/postgres/2021081000.sql b/ruty/mails/SQL/postgres/2021081000.sql
new file mode 100644
index 0000000..8525521
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2021081000.sql
@@ -0,0 +1,21 @@
+CREATE SEQUENCE responses_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+CREATE TABLE responses (
+ response_id integer DEFAULT nextval('responses_seq'::text) PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed timestamp with time zone DEFAULT now() NOT NULL,
+ del smallint DEFAULT 0 NOT NULL,
+ name varchar(255) NOT NULL,
+ data text NOT NULL,
+ is_html smallint DEFAULT 0 NOT NULL
+);
+
+CREATE UNIQUE INDEX responses_user_id_idx ON responses (user_id, del);
+
+ALTER TABLE identities ALTER html_signature TYPE smallint;
diff --git a/ruty/mails/SQL/postgres/2021100300.sql b/ruty/mails/SQL/postgres/2021100300.sql
new file mode 100644
index 0000000..49daeda
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2021100300.sql
@@ -0,0 +1 @@
+-- SQLite only
\ No newline at end of file
diff --git a/ruty/mails/SQL/postgres/2022081200.sql b/ruty/mails/SQL/postgres/2022081200.sql
new file mode 100644
index 0000000..fee9438
--- /dev/null
+++ b/ruty/mails/SQL/postgres/2022081200.sql
@@ -0,0 +1,2 @@
+DROP INDEX responses_user_id_idx;
+CREATE INDEX responses_user_id_idx ON responses (user_id, del);
diff --git a/ruty/mails/SQL/sqlite.initial.sql b/ruty/mails/SQL/sqlite.initial.sql
new file mode 100644
index 0000000..dd8f2f5
--- /dev/null
+++ b/ruty/mails/SQL/sqlite.initial.sql
@@ -0,0 +1,263 @@
+-- Roundcube Webmail initial database structure
+
+--
+-- Table structure for table users
+--
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(16),
+ preferences text DEFAULT NULL
+);
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+--
+-- Table structure for table contacts and related
+--
+
+CREATE TABLE contacts (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email text NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default '',
+ words text NOT NULL default ''
+);
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
+
+
+CREATE TABLE contactgroups (
+ contactgroup_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default ''
+);
+
+CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
+
+
+CREATE TABLE contactgroupmembers (
+ contactgroup_id integer NOT NULL
+ REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ contact_id integer NOT NULL
+ REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (contactgroup_id, contact_id)
+);
+
+CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
+
+--
+-- Table structure for table collected_addresses
+--
+
+CREATE TABLE collected_addresses (
+ address_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ name varchar(255) NOT NULL default '',
+ email varchar(255) NOT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
+
+--
+-- Table structure for table identities
+--
+
+CREATE TABLE identities (
+ identity_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ standard tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ organization varchar(128) default '',
+ email varchar(128) NOT NULL default '',
+ "reply-to" varchar(128) NOT NULL default '',
+ bcc varchar(128) NOT NULL default '',
+ signature text NOT NULL default '',
+ html_signature tinyint NOT NULL default '0'
+);
+
+CREATE INDEX ix_identities_user_id ON identities(user_id, del);
+CREATE INDEX ix_identities_email ON identities(email, del);
+
+--
+-- Table structure for table responses
+--
+
+CREATE TABLE responses (
+ response_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(255) NOT NULL,
+ data text NOT NULL,
+ is_html tinyint NOT NULL default '0'
+);
+
+CREATE INDEX ix_responses_user_id ON responses(user_id, del);
+
+--
+-- Table structure for table session
+--
+
+CREATE TABLE session (
+ sess_id varchar(128) NOT NULL PRIMARY KEY,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ ip varchar(40) NOT NULL default '',
+ vars text NOT NULL
+);
+
+CREATE INDEX ix_session_changed ON session (changed);
+
+--
+-- Table structure for table dictionary
+--
+
+CREATE TABLE dictionary (
+ user_id integer DEFAULT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ language varchar(16) NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
+
+--
+-- Table structure for table searches
+--
+
+CREATE TABLE searches (
+ search_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "type" smallint NOT NULL DEFAULT '0',
+ name varchar(128) NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
+
+--
+-- Table structure for table cache
+--
+
+CREATE TABLE cache (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ cache_key varchar(128) NOT NULL default '',
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+
+--
+-- Table structure for table cache_shared
+--
+
+CREATE TABLE cache_shared (
+ cache_key varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (cache_key)
+);
+
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
+
+--
+-- Table structure for table cache_index
+--
+
+CREATE TABLE cache_index (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ valid smallint NOT NULL DEFAULT '0',
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_expires ON cache_index (expires);
+
+--
+-- Table structure for table cache_thread
+--
+
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);
+
+--
+-- Table structure for table cache_messages
+--
+
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT '0',
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
+
+--
+-- Table structure for table filestore
+--
+
+CREATE TABLE filestore (
+ file_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ context varchar(32) NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);
+
+--
+-- Table structure for table system
+--
+
+CREATE TABLE system (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text NOT NULL
+);
+
+INSERT INTO system (name, value) VALUES ('roundcube-version', '2022081200');
diff --git a/ruty/mails/SQL/sqlite/2008030300.sql b/ruty/mails/SQL/sqlite/2008030300.sql
new file mode 100644
index 0000000..b5b4890
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2008030300.sql
@@ -0,0 +1,25 @@
+-- Updates from version 0.1-stable to 0.1.1
+
+DROP TABLE messages;
+
+CREATE TABLE messages (
+ message_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ del tinyint NOT NULL default '0',
+ cache_key varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ idx integer NOT NULL default '0',
+ uid integer NOT NULL default '0',
+ subject varchar(255) NOT NULL default '',
+ "from" varchar(255) NOT NULL default '',
+ "to" varchar(255) NOT NULL default '',
+ "cc" varchar(255) NOT NULL default '',
+ "date" datetime NOT NULL default '0000-00-00 00:00:00',
+ size integer NOT NULL default '0',
+ headers text NOT NULL,
+ structure text
+);
+
+CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid);
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
diff --git a/ruty/mails/SQL/sqlite/2008060900.sql b/ruty/mails/SQL/sqlite/2008060900.sql
new file mode 100644
index 0000000..157029c
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2008060900.sql
@@ -0,0 +1,3 @@
+-- Updates from version 0.2-alpha
+
+CREATE INDEX ix_messages_created ON messages (created);
diff --git a/ruty/mails/SQL/sqlite/2008092100.sql b/ruty/mails/SQL/sqlite/2008092100.sql
new file mode 100644
index 0000000..8bc081c
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2008092100.sql
@@ -0,0 +1,4 @@
+-- Updates from version 0.2-beta
+
+CREATE INDEX ix_session_changed ON session (changed);
+CREATE INDEX ix_cache_created ON cache (created);
diff --git a/ruty/mails/SQL/sqlite/2009090400.sql b/ruty/mails/SQL/sqlite/2009090400.sql
new file mode 100644
index 0000000..c8a53ed
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2009090400.sql
@@ -0,0 +1,8 @@
+-- Updates from version 0.3-stable
+
+DELETE FROM messages;
+DROP INDEX ix_messages_user_cache_uid;
+CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid);
+CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx);
+DROP INDEX ix_contacts_user_id;
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
diff --git a/ruty/mails/SQL/sqlite/2009103100.sql b/ruty/mails/SQL/sqlite/2009103100.sql
new file mode 100644
index 0000000..bd7b174
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2009103100.sql
@@ -0,0 +1,61 @@
+-- Updates from version 0.3.1
+
+-- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; --
+
+CREATE TABLE temp_identities (
+ identity_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ standard tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ organization varchar(128) default '',
+ email varchar(128) NOT NULL default '',
+ "reply-to" varchar(128) NOT NULL default '',
+ bcc varchar(128) NOT NULL default '',
+ signature text NOT NULL default '',
+ html_signature tinyint NOT NULL default '0'
+);
+INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
+ SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
+ FROM identities WHERE del=0;
+
+DROP INDEX ix_identities_user_id;
+DROP TABLE identities;
+
+CREATE TABLE identities (
+ identity_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ standard tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ organization varchar(128) default '',
+ email varchar(128) NOT NULL default '',
+ "reply-to" varchar(128) NOT NULL default '',
+ bcc varchar(128) NOT NULL default '',
+ signature text NOT NULL default '',
+ html_signature tinyint NOT NULL default '0'
+);
+CREATE INDEX ix_identities_user_id ON identities(user_id, del);
+
+INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
+ SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature
+ FROM temp_identities;
+
+DROP TABLE temp_identities;
+
+CREATE TABLE contactgroups (
+ contactgroup_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default ''
+);
+
+CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
+
+CREATE TABLE contactgroupmembers (
+ contactgroup_id integer NOT NULL,
+ contact_id integer NOT NULL default '0',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (contactgroup_id, contact_id)
+);
diff --git a/ruty/mails/SQL/sqlite/2010042300.sql b/ruty/mails/SQL/sqlite/2010042300.sql
new file mode 100644
index 0000000..1a9023c
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2010042300.sql
@@ -0,0 +1,35 @@
+-- Updates from version 0.4-beta
+
+CREATE TABLE tmp_users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ alias varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime NOT NULL default '0000-00-00 00:00:00',
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ alias varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users;
+
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
+DROP TABLE tmp_users;
diff --git a/ruty/mails/SQL/sqlite/2010100600.sql b/ruty/mails/SQL/sqlite/2010100600.sql
new file mode 100644
index 0000000..5c7259f
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2010100600.sql
@@ -0,0 +1,40 @@
+-- Updates from version 0.4.2
+
+DROP INDEX ix_users_username;
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+CREATE TABLE contacts_tmp (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email varchar(255) NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;
+
+DROP TABLE contacts;
+CREATE TABLE contacts (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email varchar(255) NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
+DROP TABLE contacts_tmp;
+
+DELETE FROM messages;
diff --git a/ruty/mails/SQL/sqlite/2011011200.sql b/ruty/mails/SQL/sqlite/2011011200.sql
new file mode 100644
index 0000000..4cca740
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2011011200.sql
@@ -0,0 +1,41 @@
+-- Updates from version 0.5.x
+
+CREATE TABLE contacts_tmp (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email varchar(255) NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts;
+
+DROP TABLE contacts;
+CREATE TABLE contacts (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email varchar(255) NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default '',
+ words text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
+DROP TABLE contacts_tmp;
+
+
+DELETE FROM messages;
+DELETE FROM cache;
+CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
diff --git a/ruty/mails/SQL/sqlite/2011092800.sql b/ruty/mails/SQL/sqlite/2011092800.sql
new file mode 100644
index 0000000..27dbffc
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2011092800.sql
@@ -0,0 +1,54 @@
+-- Updates from version 0.6
+
+CREATE TABLE dictionary (
+ user_id integer DEFAULT NULL,
+ "language" varchar(5) NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language");
+
+CREATE TABLE searches (
+ search_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL DEFAULT '0',
+ "type" smallint NOT NULL DEFAULT '0',
+ name varchar(128) NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
+
+DROP TABLE messages;
+
+CREATE TABLE cache_index (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ valid smallint NOT NULL DEFAULT '0',
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_changed ON cache_index (changed);
+
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_changed ON cache_thread (changed);
+
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT '0',
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_changed ON cache_messages (changed);
diff --git a/ruty/mails/SQL/sqlite/2011111600.sql b/ruty/mails/SQL/sqlite/2011111600.sql
new file mode 100644
index 0000000..cea0d12
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2011111600.sql
@@ -0,0 +1,11 @@
+-- Updates from version 0.7-beta
+
+DROP TABLE session;
+CREATE TABLE session (
+ sess_id varchar(128) NOT NULL PRIMARY KEY,
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ ip varchar(40) NOT NULL default '',
+ vars text NOT NULL
+);
+CREATE INDEX ix_session_changed ON session (changed);
diff --git a/ruty/mails/SQL/sqlite/2011121400.sql b/ruty/mails/SQL/sqlite/2011121400.sql
new file mode 100644
index 0000000..9d92276
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2011121400.sql
@@ -0,0 +1,38 @@
+-- Updates from version 0.7
+
+CREATE TABLE contacts_tmp (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email text NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default '',
+ words text NOT NULL default ''
+);
+
+INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts;
+
+DROP TABLE contacts;
+
+CREATE TABLE contacts (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email text NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default '',
+ words text NOT NULL default ''
+);
+
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts_tmp;
+
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
+DROP TABLE contacts_tmp;
diff --git a/ruty/mails/SQL/sqlite/2012080700.sql b/ruty/mails/SQL/sqlite/2012080700.sql
new file mode 100644
index 0000000..c6ede89
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2012080700.sql
@@ -0,0 +1,44 @@
+-- Updates from version 0.8
+
+DROP TABLE cache;
+CREATE TABLE cache (
+ user_id integer NOT NULL default 0,
+ cache_key varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ data text NOT NULL
+);
+
+CREATE INDEX ix_cache_user_cache_key ON cache(user_id, cache_key);
+CREATE INDEX ix_cache_created ON cache(created);
+
+CREATE TABLE tmp_users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+CREATE INDEX ix_identities_email ON identities(email, del);
diff --git a/ruty/mails/SQL/sqlite/2013011000.sql b/ruty/mails/SQL/sqlite/2013011000.sql
new file mode 100644
index 0000000..ec261a6
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2013011000.sql
@@ -0,0 +1,6 @@
+-- Updates from version 0.9-beta
+
+CREATE TABLE IF NOT EXISTS system (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text NOT NULL
+);
diff --git a/ruty/mails/SQL/sqlite/2013011700.sql b/ruty/mails/SQL/sqlite/2013011700.sql
new file mode 100644
index 0000000..533e70f
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2013011700.sql
@@ -0,0 +1,2 @@
+-- drop temp table created in 2012080700.sql
+DROP TABLE IF EXISTS tmp_users;
diff --git a/ruty/mails/SQL/sqlite/2013042700.sql b/ruty/mails/SQL/sqlite/2013042700.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2013042700.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/sqlite/2013052500.sql b/ruty/mails/SQL/sqlite/2013052500.sql
new file mode 100644
index 0000000..19ae1b1
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2013052500.sql
@@ -0,0 +1,8 @@
+CREATE TABLE cache_shared (
+ cache_key varchar(255) NOT NULL,
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ data text NOT NULL
+);
+
+CREATE INDEX ix_cache_shared_cache_key ON cache_shared(cache_key);
+CREATE INDEX ix_cache_shared_created ON cache_shared(created);
diff --git a/ruty/mails/SQL/sqlite/2013061000.sql b/ruty/mails/SQL/sqlite/2013061000.sql
new file mode 100644
index 0000000..3c6b43e
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2013061000.sql
@@ -0,0 +1,48 @@
+DROP TABLE cache_index;
+DROP TABLE cache_thread;
+DROP TABLE cache_messages;
+
+ALTER TABLE cache ADD expires datetime DEFAULT NULL;
+DROP INDEX ix_cache_created;
+
+ALTER TABLE cache_shared ADD expires datetime DEFAULT NULL;
+DROP INDEX ix_cache_shared_created;
+
+UPDATE cache SET expires = datetime(created, '+604800 seconds');
+UPDATE cache_shared SET expires = datetime(created, '+604800 seconds');
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
+
+CREATE TABLE cache_index (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ valid smallint NOT NULL DEFAULT '0',
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_index_expires ON cache_index (expires);
+
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+
+CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);
+
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT '0',
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
diff --git a/ruty/mails/SQL/sqlite/2014042900.sql b/ruty/mails/SQL/sqlite/2014042900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2014042900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/sqlite/2015030800.sql b/ruty/mails/SQL/sqlite/2015030800.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2015030800.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/sqlite/2015111100.sql b/ruty/mails/SQL/sqlite/2015111100.sql
new file mode 100644
index 0000000..34df0ea
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2015111100.sql
@@ -0,0 +1,35 @@
+CREATE TABLE tmp_users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(5),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+DROP TABLE tmp_users;
diff --git a/ruty/mails/SQL/sqlite/2016081200.sql b/ruty/mails/SQL/sqlite/2016081200.sql
new file mode 100644
index 0000000..8c3a3f1
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2016081200.sql
@@ -0,0 +1,9 @@
+DROP TABLE session;
+CREATE TABLE session (
+ sess_id varchar(128) NOT NULL PRIMARY KEY,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ ip varchar(40) NOT NULL default '',
+ vars text NOT NULL
+);
+
+CREATE INDEX ix_session_changed ON session (changed);
diff --git a/ruty/mails/SQL/sqlite/2016100900.sql b/ruty/mails/SQL/sqlite/2016100900.sql
new file mode 100644
index 0000000..e69de29
diff --git a/ruty/mails/SQL/sqlite/2016112200.sql b/ruty/mails/SQL/sqlite/2016112200.sql
new file mode 100644
index 0000000..c185493
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2016112200.sql
@@ -0,0 +1,21 @@
+DROP TABLE cache;
+DROP TABLE cache_shared;
+
+CREATE TABLE cache (
+ user_id integer NOT NULL default 0,
+ cache_key varchar(128) NOT NULL default '',
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, cache_key)
+);
+
+CREATE INDEX ix_cache_expires ON cache(expires);
+
+CREATE TABLE cache_shared (
+ cache_key varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (cache_key)
+);
+
+CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
diff --git a/ruty/mails/SQL/sqlite/2018021600.sql b/ruty/mails/SQL/sqlite/2018021600.sql
new file mode 100644
index 0000000..c7973cd
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2018021600.sql
@@ -0,0 +1,9 @@
+CREATE TABLE filestore (
+ file_id integer PRIMARY KEY,
+ user_id integer NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, filename);
diff --git a/ruty/mails/SQL/sqlite/2018122300.sql b/ruty/mails/SQL/sqlite/2018122300.sql
new file mode 100644
index 0000000..7abb098
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2018122300.sql
@@ -0,0 +1,29 @@
+CREATE TABLE tmp_filestore (
+ file_id integer PRIMARY KEY,
+ user_id integer NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL
+);
+
+INSERT INTO tmp_filestore (file_id, user_id, filename, mtime, data)
+ SELECT file_id, user_id, filename, mtime, data FROM filestore;
+
+DROP TABLE filestore;
+
+CREATE TABLE filestore (
+ file_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL,
+ context varchar(32) NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL
+);
+
+INSERT INTO filestore (file_id, user_id, filename, mtime, data, context)
+ SELECT file_id, user_id, filename, mtime, data, 'enigma' FROM tmp_filestore;
+
+CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);
+
+DROP TABLE tmp_filestore;
+
diff --git a/ruty/mails/SQL/sqlite/2019092900.sql b/ruty/mails/SQL/sqlite/2019092900.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2019092900.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/sqlite/2020020100.sql b/ruty/mails/SQL/sqlite/2020020100.sql
new file mode 100644
index 0000000..03fdb72
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2020020100.sql
@@ -0,0 +1,57 @@
+CREATE TABLE tmp_users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(16),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(16),
+ preferences text NOT NULL default ''
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+DROP TABLE tmp_users;
+
+CREATE TABLE tmp_dictionary (
+ user_id integer DEFAULT NULL,
+ language varchar(16) NOT NULL,
+ data text NOT NULL
+);
+
+INSERT INTO tmp_dictionary (user_id, language, data) SELECT user_id, language, data FROM dictionary;
+
+DROP TABLE dictionary;
+
+CREATE TABLE dictionary (
+ user_id integer DEFAULT NULL,
+ language varchar(16) NOT NULL,
+ data text NOT NULL
+);
+
+INSERT INTO dictionary (user_id, language, data) SELECT user_id, language, data FROM tmp_dictionary;
+
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
+
+DROP TABLE tmp_dictionary;
diff --git a/ruty/mails/SQL/sqlite/2020020101.sql b/ruty/mails/SQL/sqlite/2020020101.sql
new file mode 100644
index 0000000..fe6741a
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2020020101.sql
@@ -0,0 +1 @@
+-- empty
\ No newline at end of file
diff --git a/ruty/mails/SQL/sqlite/2020091000.sql b/ruty/mails/SQL/sqlite/2020091000.sql
new file mode 100644
index 0000000..2ea3096
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2020091000.sql
@@ -0,0 +1,10 @@
+CREATE TABLE collected_addresses (
+ address_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ name varchar(255) NOT NULL default '',
+ email varchar(255) NOT NULL,
+ "type" integer NOT NULL
+);
+
+CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
diff --git a/ruty/mails/SQL/sqlite/2020122900.sql b/ruty/mails/SQL/sqlite/2020122900.sql
new file mode 100644
index 0000000..c3fb546
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2020122900.sql
@@ -0,0 +1,35 @@
+CREATE TABLE tmp_users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(16),
+ preferences text DEFAULT NULL
+);
+
+INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM users;
+
+DROP TABLE users;
+
+CREATE TABLE users (
+ user_id integer NOT NULL PRIMARY KEY,
+ username varchar(128) NOT NULL default '',
+ mail_host varchar(128) NOT NULL default '',
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ last_login datetime DEFAULT NULL,
+ failed_login datetime DEFAULT NULL,
+ failed_login_counter integer DEFAULT NULL,
+ language varchar(16),
+ preferences text DEFAULT NULL
+);
+
+INSERT INTO users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
+ SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM tmp_users;
+
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+
+DROP TABLE tmp_users;
diff --git a/ruty/mails/SQL/sqlite/2021081000.sql b/ruty/mails/SQL/sqlite/2021081000.sql
new file mode 100644
index 0000000..9fa55d9
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2021081000.sql
@@ -0,0 +1,11 @@
+CREATE TABLE responses (
+ response_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL default '0',
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(255) NOT NULL,
+ data text NOT NULL,
+ is_html tinyint NOT NULL default '0'
+);
+
+CREATE UNIQUE INDEX ix_responses_user_id ON responses(user_id, del);
diff --git a/ruty/mails/SQL/sqlite/2021100300.sql b/ruty/mails/SQL/sqlite/2021100300.sql
new file mode 100644
index 0000000..2a547a6
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2021100300.sql
@@ -0,0 +1,211 @@
+-- Add foreign keys
+
+DELETE FROM contacts WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE contacts RENAME TO old_contacts;
+DROP INDEX ix_contacts_user_id;
+CREATE TABLE contacts (
+ contact_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ email text NOT NULL default '',
+ firstname varchar(128) NOT NULL default '',
+ surname varchar(128) NOT NULL default '',
+ vcard text NOT NULL default '',
+ words text NOT NULL default ''
+);
+CREATE INDEX ix_contacts_user_id ON contacts(user_id, del);
+INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words)
+ SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM old_contacts;
+DROP TABLE old_contacts;
+
+DELETE FROM contactgroups WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE contactgroups RENAME TO old_contactgroups;
+DROP INDEX ix_contactgroups_user_id;
+CREATE TABLE contactgroups (
+ contactgroup_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default ''
+);
+CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del);
+INSERT INTO contactgroups (contactgroup_id, user_id, changed, del, name)
+ SELECT contactgroup_id, user_id, changed, del, name FROM old_contactgroups;
+DROP TABLE old_contactgroups;
+
+DELETE FROM contactgroupmembers WHERE contact_id NOT IN (SELECT contact_id FROM contacts);
+DELETE FROM contactgroupmembers WHERE contactgroup_id NOT IN (SELECT contactgroup_id FROM contactgroups);
+ALTER TABLE contactgroupmembers RENAME TO old_contactgroupmembers;
+DROP INDEX ix_contactgroupmembers_contact_id;
+CREATE TABLE contactgroupmembers (
+ contactgroup_id integer NOT NULL
+ REFERENCES contactgroups (contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ contact_id integer NOT NULL
+ REFERENCES contacts (contact_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ created datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (contactgroup_id, contact_id)
+);
+INSERT INTO contactgroupmembers (contactgroup_id, contact_id, created)
+ SELECT contactgroup_id, contact_id, created FROM old_contactgroupmembers;
+CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id);
+DROP TABLE old_contactgroupmembers;
+
+DELETE FROM collected_addresses WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE collected_addresses RENAME TO old_collected_addresses;
+DROP INDEX ix_collected_addresses_user_id;
+CREATE TABLE collected_addresses (
+ address_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ name varchar(255) NOT NULL default '',
+ email varchar(255) NOT NULL,
+ "type" integer NOT NULL
+);
+CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
+INSERT INTO collected_addresses (address_id, user_id, changed, name, email, "type")
+ SELECT address_id, user_id, changed, name, email, "type" FROM old_collected_addresses;
+DROP TABLE old_collected_addresses;
+
+DELETE FROM identities WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE identities RENAME TO old_identities;
+DROP INDEX ix_identities_user_id;
+DROP INDEX ix_identities_email;
+CREATE TABLE identities (
+ identity_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ standard tinyint NOT NULL default '0',
+ name varchar(128) NOT NULL default '',
+ organization varchar(128) default '',
+ email varchar(128) NOT NULL default '',
+ "reply-to" varchar(128) NOT NULL default '',
+ bcc varchar(128) NOT NULL default '',
+ signature text NOT NULL default '',
+ html_signature tinyint NOT NULL default '0'
+);
+CREATE INDEX ix_identities_user_id ON identities(user_id, del);
+CREATE INDEX ix_identities_email ON identities(email, del);
+INSERT INTO identities (identity_id, user_id, changed, del, standard, name, organization, email, "reply-to", bcc, signature, html_signature)
+ SELECT identity_id, user_id, changed, del, standard, name, organization, email, "reply-to", bcc, signature, html_signature FROM old_identities;
+DROP TABLE old_identities;
+
+DELETE FROM responses WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE responses RENAME TO old_responses;
+DROP INDEX ix_responses_user_id;
+CREATE TABLE responses (
+ response_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ changed datetime NOT NULL default '0000-00-00 00:00:00',
+ del tinyint NOT NULL default '0',
+ name varchar(255) NOT NULL,
+ data text NOT NULL,
+ is_html tinyint NOT NULL default '0'
+);
+CREATE INDEX ix_responses_user_id ON responses(user_id, del);
+INSERT INTO responses (response_id, user_id, changed, del, name, data, is_html)
+ SELECT response_id, user_id, changed, del, name, data, is_html FROM old_responses;
+DROP TABLE old_responses;
+
+DELETE FROM dictionary WHERE user_id IS NOT NULL AND user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE dictionary RENAME TO old_dictionary;
+DROP INDEX ix_dictionary_user_language;
+CREATE TABLE dictionary (
+ user_id integer DEFAULT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ language varchar(16) NOT NULL,
+ data text NOT NULL
+);
+CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
+INSERT INTO dictionary (user_id, language, data)
+ SELECT user_id, language, data FROM old_dictionary;
+DROP TABLE old_dictionary;
+
+DELETE FROM searches WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE searches RENAME TO old_searches;
+DROP INDEX ix_searches_user_type_name;
+CREATE TABLE searches (
+ search_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ "type" smallint NOT NULL DEFAULT '0',
+ name varchar(128) NOT NULL,
+ data text NOT NULL
+);
+CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name);
+INSERT INTO searches (search_id, user_id, "type", name, data)
+ SELECT search_id, user_id, "type", name, data FROM old_searches;
+DROP TABLE old_searches;
+
+DELETE FROM filestore WHERE user_id NOT IN (SELECT user_id FROM users);
+ALTER TABLE filestore RENAME TO old_filestore;
+DROP INDEX ix_filestore_user_id;
+CREATE TABLE filestore (
+ file_id integer NOT NULL PRIMARY KEY,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ context varchar(32) NOT NULL,
+ filename varchar(128) NOT NULL,
+ mtime integer NOT NULL,
+ data text NOT NULL
+);
+CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, context, filename);
+INSERT INTO filestore (file_id, user_id, context, filename, mtime, data)
+ SELECT file_id, user_id, context, filename, mtime, data FROM old_filestore;
+DROP TABLE old_filestore;
+
+
+DROP TABLE cache;
+CREATE TABLE cache (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ cache_key varchar(128) NOT NULL default '',
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, cache_key)
+);
+CREATE INDEX ix_cache_expires ON cache(expires);
+
+DROP TABLE cache_index;
+CREATE TABLE cache_index (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ valid smallint NOT NULL DEFAULT '0',
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+CREATE INDEX ix_cache_index_expires ON cache_index (expires);
+
+DROP TABLE cache_thread;
+CREATE TABLE cache_thread (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ PRIMARY KEY (user_id, mailbox)
+);
+CREATE INDEX ix_cache_thread_expires ON cache_thread (expires);
+
+DROP TABLE cache_messages;
+CREATE TABLE cache_messages (
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ mailbox varchar(255) NOT NULL,
+ uid integer NOT NULL,
+ expires datetime DEFAULT NULL,
+ data text NOT NULL,
+ flags integer NOT NULL DEFAULT '0',
+ PRIMARY KEY (user_id, mailbox, uid)
+);
+
+CREATE INDEX ix_cache_messages_expires ON cache_messages (expires);
diff --git a/ruty/mails/SQL/sqlite/2022081200.sql b/ruty/mails/SQL/sqlite/2022081200.sql
new file mode 100644
index 0000000..d379fc5
--- /dev/null
+++ b/ruty/mails/SQL/sqlite/2022081200.sql
@@ -0,0 +1,2 @@
+DROP INDEX ix_responses_user_id;
+CREATE INDEX ix_responses_user_id ON responses(user_id, del);
diff --git a/ruty/mails/skins/elastic/README.md b/ruty/mails/skins/elastic/README.md
new file mode 100644
index 0000000..8c663cd
--- /dev/null
+++ b/ruty/mails/skins/elastic/README.md
@@ -0,0 +1,119 @@
+Roundcube Webmail Skin "Elastic"
+================================
+
+This skin package contains a theme for the Roundcube Webmail
+software. It can be used, modified and redistributed according to
+the terms described in the LICENSE section.
+
+For information about building or modifying Roundcube skins please visit
+https://github.com/roundcube/roundcubemail/wiki/Skins
+
+
+LICENSE
+-------
+
+The contents of this folder are subject to the Creative Commons
+Attribution-ShareAlike License. It is allowed to copy, distribute,
+transmit and to adapt the work by keeping credits to the original
+authors in the README.md file.
+See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+
+This folder also contains code licensed separately:
+- Bootstrap Framework 4 from https://github.com/twbs/bootstrap
+- FontAwesome 5 fonts from https://fontawesome.com/
+- Roboto font from https://google-webfonts-helper.herokuapp.com/fonts/roboto?subsets=cyrillic,latin-ext,cyrillic-ext,latin,greek,greek-ext
+
+
+INSTALLATION
+------------
+
+All styles are written using LESS syntax. Thus it needs to be compiled
+using the `lessc` (>= 2.5.2) command line tool. This comes with the `nodejs-less`
+RPM package or using `npm install less` which depend on nodejs.
+```
+ $ lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
+ $ lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
+ $ lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css
+```
+(`--clean-css="--s1 --advanced"` minifies the css, requires the clean-css Less plugin.
+The plugin can be installed using `npm install less-plugin-clean-css`)
+
+References to image files from the included CSS files can be appended
+with cache-buster marks to avoid browser caching issues after updating.
+
+Run `bin/updatecss.sh --dir skins/elastic` before packaging the skin
+or after installing it on the destination system.
+
+
+FOR DEVELOPERS
+--------------
+
+- Supported browsers: IE11+, Edge, Last 2 versions for Chrome/Firefox/Safari,
+ Android Browser 5+, iOS Safari 9+.
+
+- Skin color palette changes and other css modifications can be done
+ via _styles.less and _variables.less files. Where you can overwrite all
+ variables and add custom styles.
+
+- Minimum supported screen width is 240px (note that even if the device screen
+ resolution is e.g.320x372 changing the text size in device settings will reduce
+ the resolution)
+
+- Every page (which is not a frame) has following required structure:
+```
+
+
+
+
+
+
+
+
+```
+ where `#layout-sidebar` and `#layout-list` are optional. Which element of the `#layout` will be displayed
+ as a main view on mobile devices can be defined by adding `selected` class to it.
+
+- The `` element will receive special classes that will be updated on resize
+ or orientation change:
+ - `touch`: A touch device, screen width <= 1024px,
+ - `layout-large`: Screen width > 1200px,
+ - `layout-normal`: Screen width <= 1200px and >= 768px,
+ - `layout-small`: Screen width < 768px and > 480px,
+ - `layout-phone`: Screen width <= 480px.
+
+ Frames will have the same classes applied as their parent windows.
+
+- Every button, that is not