From 0c0ea8897e64461b1cfa9cd86a939b48f0bdd640 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 3 Dec 2022 15:28:06 +0300 Subject: Initial PostgreSQL schema and profile --- .../java/com/juick/service/MessagesService.java | 3 +- .../com/juick/service/MessagesServiceImpl.java | 206 ++- .../com/juick/service/PushQueriesServiceImpl.java | 3 +- .../com/juick/service/SubscriptionServiceImpl.java | 30 +- .../java/com/juick/service/TagServiceImpl.java | 67 +- .../java/com/juick/service/UserServiceImpl.java | 2 +- src/main/resources/application-postgres.properties | 1 + src/main/resources/application.properties | 1 + .../db/migration/V1.00__initial_schema.sql | 380 ----- .../db/migration/V1.10__favorites_user_uri.sql | 3 - .../V1.11__increase pm timestamp precision.sql | 1 - ..._drop unused columns add ts for some tables.sql | 4 +- .../resources/db/migration/V1.16__last seen.sql | 2 - ...se messages and replies timestamp precision.sql | 5 - .../db/migration/V1.19__messages_properties.sql | 6 - .../V1.20__reply id in messages_properties.sql | 1 - ...eate messages_properties with correct index.sql | 8 - .../V1.22__increase updated_at precision.sql | 2 - .../db/migration/V1.2__Drop telegram_chats.sql | 2 - ...V1.3__Nullable user_id column in auth table.sql | 1 - .../db/migration/V1.4__ActivityPub followers.sql | 7 - .../db/migration/V1.5__Drop acct index.sql | 6 - src/main/resources/db/migration/V1.6__user_uri.sql | 1 - .../resources/db/migration/V1.7__reply_uri.sql | 1 - .../resources/db/migration/V1.8__html reply.sql | 1 - .../db/specific/h2/V1.00__initial_schema.sql | 380 +++++ .../db/specific/h2/V1.10__favorites_user_uri.sql | 3 + .../h2/V1.11__increase pm timestamp precision.sql | 1 + .../resources/db/specific/h2/V1.16__last seen.sql | 2 + ...se messages and replies timestamp precision.sql | 5 + .../db/specific/h2/V1.19__messages_properties.sql | 6 + .../h2/V1.20__reply id in messages_properties.sql | 1 + ...eate messages_properties with correct index.sql | 8 + .../h2/V1.22__increase updated_at precision.sql | 2 + .../db/specific/h2/V1.2__Drop telegram_chats.sql | 2 + ...V1.3__Nullable user_id column in auth table.sql | 1 + .../db/specific/h2/V1.4__ActivityPub followers.sql | 7 + .../db/specific/h2/V1.5__Drop acct index.sql | 6 + .../resources/db/specific/h2/V1.6__user_uri.sql | 1 + .../resources/db/specific/h2/V1.7__reply_uri.sql | 1 + .../resources/db/specific/h2/V1.8__html reply.sql | 1 + .../specific/mariadb/V1.10__favorites_user_uri.sql | 3 + .../V1.11__increase pm timestamp precision.sql | 1 + .../db/specific/mariadb/V1.16__last seen.sql | 2 + ...se messages and replies timestamp precision.sql | 5 + .../mariadb/V1.19__messages_properties.sql | 6 + .../V1.20__reply id in messages_properties.sql | 1 + ...eate messages_properties with correct index.sql | 8 + .../V1.22__increase updated_at precision.sql | 2 + .../specific/mariadb/V1.2__Drop telegram_chats.sql | 2 + ...V1.3__Nullable user_id column in auth table.sql | 1 + .../mariadb/V1.4__ActivityPub followers.sql | 7 + .../db/specific/mariadb/V1.5__Drop acct index.sql | 6 + .../db/specific/mariadb/V1.6__user_uri.sql | 1 + .../db/specific/mariadb/V1.7__reply_uri.sql | 1 + .../db/specific/mariadb/V1.8__html reply.sql | 1 + .../postgresql/V1.10__favorites_user_uri.sql | 3 + .../V1.11__increase pm timestamp precision.sql | 1 + .../db/specific/postgresql/V1.16__last seen.sql | 2 + ...ssages and replies timestamp precision copy.sql | 3 + .../postgresql/V1.19__messages_properties.sql | 6 + .../V1.20__reply id in messages_properties.sql | 1 + ...eate messages_properties with correct index.sql | 8 + .../V1.22__increase updated_at precision.sql | 1 + .../postgresql/V1.2__Drop telegram_chats.sql | 3 + ...V1.3__Nullable user_id column in auth table.sql | 1 + .../postgresql/V1.4__ActivityPub followers.sql | 5 + .../specific/postgresql/V1.5__Drop acct index.sql | 6 + .../db/specific/postgresql/V1.6__user_uri.sql | 1 + .../db/specific/postgresql/V1.7__reply_uri.sql | 1 + .../db/specific/postgresql/V1.8__html reply.sql | 1 + src/main/resources/pg_schema_wip | 1539 -------------------- .../java/com/juick/server/tests/ServerTests.java | 21 +- src/test/resources/schema-postgres.sql | 1516 +++++++++++++++++++ 74 files changed, 2241 insertions(+), 2096 deletions(-) create mode 100644 src/main/resources/application-postgres.properties delete mode 100644 src/main/resources/db/migration/V1.00__initial_schema.sql delete mode 100644 src/main/resources/db/migration/V1.10__favorites_user_uri.sql delete mode 100644 src/main/resources/db/migration/V1.11__increase pm timestamp precision.sql delete mode 100644 src/main/resources/db/migration/V1.16__last seen.sql delete mode 100644 src/main/resources/db/migration/V1.18__increase messages and replies timestamp precision.sql delete mode 100644 src/main/resources/db/migration/V1.19__messages_properties.sql delete mode 100644 src/main/resources/db/migration/V1.20__reply id in messages_properties.sql delete mode 100644 src/main/resources/db/migration/V1.21__recreate messages_properties with correct index.sql delete mode 100644 src/main/resources/db/migration/V1.22__increase updated_at precision.sql delete mode 100644 src/main/resources/db/migration/V1.2__Drop telegram_chats.sql delete mode 100644 src/main/resources/db/migration/V1.3__Nullable user_id column in auth table.sql delete mode 100644 src/main/resources/db/migration/V1.4__ActivityPub followers.sql delete mode 100644 src/main/resources/db/migration/V1.5__Drop acct index.sql delete mode 100644 src/main/resources/db/migration/V1.6__user_uri.sql delete mode 100644 src/main/resources/db/migration/V1.7__reply_uri.sql delete mode 100644 src/main/resources/db/migration/V1.8__html reply.sql create mode 100644 src/main/resources/db/specific/h2/V1.00__initial_schema.sql create mode 100644 src/main/resources/db/specific/h2/V1.10__favorites_user_uri.sql create mode 100644 src/main/resources/db/specific/h2/V1.11__increase pm timestamp precision.sql create mode 100644 src/main/resources/db/specific/h2/V1.16__last seen.sql create mode 100644 src/main/resources/db/specific/h2/V1.18__increase messages and replies timestamp precision.sql create mode 100644 src/main/resources/db/specific/h2/V1.19__messages_properties.sql create mode 100644 src/main/resources/db/specific/h2/V1.20__reply id in messages_properties.sql create mode 100644 src/main/resources/db/specific/h2/V1.21__recreate messages_properties with correct index.sql create mode 100644 src/main/resources/db/specific/h2/V1.22__increase updated_at precision.sql create mode 100644 src/main/resources/db/specific/h2/V1.2__Drop telegram_chats.sql create mode 100644 src/main/resources/db/specific/h2/V1.3__Nullable user_id column in auth table.sql create mode 100644 src/main/resources/db/specific/h2/V1.4__ActivityPub followers.sql create mode 100644 src/main/resources/db/specific/h2/V1.5__Drop acct index.sql create mode 100644 src/main/resources/db/specific/h2/V1.6__user_uri.sql create mode 100644 src/main/resources/db/specific/h2/V1.7__reply_uri.sql create mode 100644 src/main/resources/db/specific/h2/V1.8__html reply.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.10__favorites_user_uri.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.11__increase pm timestamp precision.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.16__last seen.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.18__increase messages and replies timestamp precision.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.19__messages_properties.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.20__reply id in messages_properties.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.21__recreate messages_properties with correct index.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.22__increase updated_at precision.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.2__Drop telegram_chats.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.3__Nullable user_id column in auth table.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.4__ActivityPub followers.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.5__Drop acct index.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.6__user_uri.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.7__reply_uri.sql create mode 100644 src/main/resources/db/specific/mariadb/V1.8__html reply.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.10__favorites_user_uri.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.11__increase pm timestamp precision.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.16__last seen.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.18__increase messages and replies timestamp precision copy.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.19__messages_properties.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.20__reply id in messages_properties.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.21__recreate messages_properties with correct index.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.22__increase updated_at precision.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.2__Drop telegram_chats.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.3__Nullable user_id column in auth table.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.4__ActivityPub followers.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.5__Drop acct index.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.6__user_uri.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.7__reply_uri.sql create mode 100644 src/main/resources/db/specific/postgresql/V1.8__html reply.sql delete mode 100644 src/main/resources/pg_schema_wip create mode 100644 src/test/resources/schema-postgres.sql (limited to 'src') diff --git a/src/main/java/com/juick/service/MessagesService.java b/src/main/java/com/juick/service/MessagesService.java index 0a881924..274d4f30 100644 --- a/src/main/java/com/juick/service/MessagesService.java +++ b/src/main/java/com/juick/service/MessagesService.java @@ -25,6 +25,7 @@ import com.juick.model.Tag; import org.apache.commons.lang3.tuple.Pair; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; +import org.springframework.lang.NonNull; import java.net.URI; import java.util.*; @@ -34,7 +35,7 @@ import java.util.*; */ public interface MessagesService { @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true) - int createMessage(int uid, String txt, String attachment, Set tags); + int createMessage(int uid, String txt, String attachment, @NonNull Set tags); @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true) int createReply(int mid, int rid, User user, String txt, String attachment); diff --git a/src/main/java/com/juick/service/MessagesServiceImpl.java b/src/main/java/com/juick/service/MessagesServiceImpl.java index 8251217f..c5037c31 100644 --- a/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -38,18 +38,18 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcInsert; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Nonnull; import javax.inject.Inject; import java.net.URI; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; -import java.sql.Types; import java.time.Instant; +import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -63,6 +63,8 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Inject private UserService userService; @Inject + private TagService tagService; + @Inject private SearchService searchService; @Inject private StorageService storageService; @@ -93,8 +95,8 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ msg.setReplies(rs.getInt(10)); msg.setAttachmentType(rs.getString(11)); msg.Hidden = rs.getBoolean(13); - String tagsStr = StringUtils.defaultString(rs.getString(14)); - msg.setTags(MessageUtils.parseTags(tagsStr)); + msg.setTags(tagService.getMessageTags(msg.getMid()).stream() + .map(tag -> tag.getTag()).collect(Collectors.toSet())); msg.setRepliesBy(rs.getString(15)); msg.setText(rs.getString(16)); msg.setReplyQuote(MessageUtils.formatQuote(rs.getString(17))); @@ -132,17 +134,17 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ */ @Transactional @Override - public int createMessage(final int uid, final String txt, final String attachment, @Nonnull final Set tags) { + public int createMessage(final int uid, final String txt, final String attachment, @NonNull final Set tags) { SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()).withTableName("messages") .usingColumns("user_id", "attach", "ts", "readonly").usingGeneratedKeyColumns("message_id"); - Map insertMap = new HashMap<>(); - insertMap.put("user_id", uid); - Instant now = Instant.now(); - insertMap.put("ts", Timestamp.from(now)); + var insertMap = new MapSqlParameterSource(); + insertMap.addValue("user_id", uid); + var now = Instant.now(); + insertMap.addValue("ts", now.atOffset(ZoneOffset.UTC), java.sql.Types.TIMESTAMP_WITH_TIMEZONE); if (StringUtils.isNotEmpty(attachment)) { - insertMap.put("attach", attachment); + insertMap.addValue("attach", attachment); } - insertMap.put("readonly", TagUtils.hasTag(tags, "readonly")); + insertMap.addValue("readonly", TagUtils.hasTag(tags, "readonly")); int mid = simpleJdbcInsert.executeAndReturnKey(insertMap).intValue(); if (mid > 0) { if (CollectionUtils.isNotEmpty(tags)) { @@ -150,7 +152,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id, tag_id) VALUES (?, ?)", new BatchPreparedStatementSetter() { @Override - public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException { + public void setValues(PreparedStatement ps, int i) throws SQLException { ps.setInt(1, mid); ps.setInt(2, newTags.get(i).TID); } @@ -161,13 +163,22 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ } }); } - getJdbcTemplate().update("INSERT INTO messages_txt(message_id, txt, updated_at) VALUES (?, ?, ?)", - new Object[] { mid, txt, Timestamp.from(now) }, - new int[] { Types.INTEGER, Types.VARCHAR, Types.TIMESTAMP }); - getJdbcTemplate().update("UPDATE users SET lastmessage=?, last_seen=? where id=?", Timestamp.from(now), - Timestamp.from(now), uid); + getNamedParameterJdbcTemplate() + .update("INSERT INTO messages_txt(message_id, txt, updated_at) VALUES (:mid, :txt, :now)", + new MapSqlParameterSource() + .addValue("mid", mid) + .addValue("txt", txt) + .addValue("now", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE)); + getNamedParameterJdbcTemplate() + .update("UPDATE users SET lastmessage=:lastmessage, last_seen=:last_seen where id=:uid", + new MapSqlParameterSource() + .addValue("lastmessage", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("last_seen", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("uid", uid)); } - return mid; } @@ -187,16 +198,40 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ public int createReply(final int mid, final int rid, final User user, final String txt, final String attachment) { int ridnew = getReplyIDIncrement(mid, user.getUid()); if (ridnew > 0) { - Timestamp ts = Timestamp.from(Instant.now()); - getJdbcTemplate().update( - "INSERT INTO replies(message_id, reply_id, user_id, replyto, attach, txt, ts, updated_at, user_uri) " - + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", - mid, ridnew, user.getUid(), rid, attachment, txt, ts, ts, user.getUri().toASCIIString()); - - getJdbcTemplate().update("UPDATE messages SET replies = replies + 1, updated=? WHERE message_id = ?", ts, - mid); + var now = Instant.now(); + getNamedParameterJdbcTemplate() + .update( + "INSERT INTO replies(message_id, reply_id, user_id, replyto, attach, txt, ts, updated_at, user_uri) " + + "VALUES (:mid, :rid, :uid, :replyto, :attach, :txt, :ts, :updated_at, :user_uri)", + new MapSqlParameterSource() + .addValue("mid", mid) + .addValue("rid", ridnew) + .addValue("uid", user.getUid()) + .addValue("replyto", rid) + .addValue("attach", attachment) + .addValue("txt", txt) + .addValue("ts", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("updated_at", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("user_uri", user.getUri().toASCIIString())); + + getNamedParameterJdbcTemplate() + .update( + "UPDATE messages SET replies = replies + 1, updated=:updated WHERE message_id = :message_id", + new MapSqlParameterSource() + .addValue("updated", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("message_id", mid)); setLastReadComment(user, mid, ridnew); - getJdbcTemplate().update("UPDATE users SET lastmessage=?, last_seen=? where id=?", ts, ts, user.getUid()); + getNamedParameterJdbcTemplate() + .update("UPDATE users SET lastmessage=:lastmessage, last_seen=:last_seen where id=:uid", + new MapSqlParameterSource() + .addValue("lastmessage", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("last_seen", now.atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE) + .addValue("uid", user.getUid())); } return ridnew; } @@ -205,7 +240,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ return getJdbcTemplate().execute((ConnectionCallback) conn -> { conn.setAutoCommit(false); int replyNo; - final int readOnly; + final boolean readOnly; final int userId; try (PreparedStatement ps = conn.prepareStatement( "SELECT maxreplyid+1, readonly, user_id FROM messages WHERE message_id=? FOR UPDATE")) { @@ -213,7 +248,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ try (ResultSet resultSet = ps.executeQuery()) { if (resultSet.next()) { replyNo = resultSet.getInt(1); - readOnly = resultSet.getInt(2); + readOnly = resultSet.getBoolean(2); userId = resultSet.getInt(3); } else { throw new IncorrectResultSizeDataAccessException( @@ -222,7 +257,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ } } // author can reply to his readonly post - if (readOnly == 0 || uid == userId) { + if (!readOnly || uid == userId) { try (PreparedStatement ps = conn .prepareStatement("UPDATE messages SET maxreplyid=? WHERE message_id=?")) { ps.setInt(1, replyNo); @@ -308,7 +343,8 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ } } boolean wasAdded = getJdbcTemplate().update( - "INSERT INTO favorites(user_id, message_id, ts, like_id, user_uri) VALUES (?, ?, NOW(), ?, ?)", vuid, + "INSERT INTO favorites(user_id, message_id, ts, like_id, user_uri) VALUES (?, ?, NOW(), ?, ?)", + vuid, mid, reaction, userUri) == 1; if (wasAdded) { return RecommendStatus.Added; @@ -377,7 +413,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ + "messages.user_id as uid, users.nick, users.banned as banned, " + "" + "messages.ts," + "messages.readonly, messages.privacy, messages.replies," + "messages.attach, COUNT(DISTINCT favorites.user_id) as likes, messages.hidden," - + "GROUP_CONCAT(tags.name SEPARATOR ' '), txt.repliesby, txt.txt, '' as q, messages.updated as updated, 0 as to_uid, " + + "'' as tags, txt.repliesby, txt.txt, '' as q, messages.updated as updated, 0 as to_uid, " + "NULL as to_name, txt.updated_at, '' as reply_user_uri, '' as to_uri, '' as reply_uri, 0 as html, 0 as unread FROM messages " + "INNER JOIN users ON messages.user_id = users.id " + "INNER JOIN messages_txt AS txt " + "ON messages.message_id = txt.message_id " + "LEFT JOIN favorites " @@ -386,7 +422,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ + "LEFT JOIN tags ON tags.tag_id=messages_tags.tag_id " + "WHERE messages.message_id = ? AND users.banned = 0 " + "GROUP BY mid, rid, replyto, uid, nick, banned, messages.ts, readonly, " - + "privacy, replies, attach, repliesby, q, updated_at, reply_user_uri, to_uri, reply_uri, html, unread", + + "privacy, replies, attach, repliesby, q, txt.txt, updated_at, reply_user_uri, to_uri, reply_uri, html, unread", new MessageMapper(), mid); if (!list.isEmpty()) { final Message message = list.get(0); @@ -407,7 +443,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Override public Message getReply(final int mid, final int rid) { List list = getJdbcTemplate().query("SELECT replies.user_id, users.nick," - + "replies.replyto, replies.ts," + "replies.attach, replies.txt, IFNULL(q.txt,t.txt) as quote, " + + "replies.replyto, replies.ts," + "replies.attach, replies.txt, COALESCE(q.txt,t.txt) as quote, " + "COALESCE(q.user_id, m.user_id) AS to_uid, COALESCE(qu.nick, mu.nick) AS to_name, " + "replies.updated_at, replies.user_uri as uri, " + "q.user_uri AS to_uri, replies.reply_uri AS reply_uri, replies.html, q.reply_uri " @@ -774,30 +810,30 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ if (CollectionUtils.isNotEmpty(mids)) { var query = "WITH RECURSIVE banned(message_id, reply_id) " - + "AS (SELECT message_id, reply_id FROM replies WHERE replies.message_id IN (:ids) " - + "AND (EXISTS (SELECT 1 FROM bl_users b WHERE b.user_id = :uid AND b.bl_user_id = replies.user_id) " - + "OR EXISTS (SELECT 1 from users u WHERE u.banned = 1 and u.id = replies.user_id and u.id <> :uid)) " - + "UNION ALL SELECT replies.message_id, replies.reply_id FROM replies INNER JOIN banned " - + "ON banned.reply_id = replies.replyto AND replies.reply_id != replies.replyto AND banned.message_id=replies.message_id " - + "WHERE replies.message_id IN (:ids)) " + "SELECT messages.message_id, 0 as rid, 0 as replyto, " - + "messages.user_id,users.nick, 0 as usr_banned, " + "messages.ts," - + "messages.readonly,messages.privacy, messages.replies-COUNT(DISTINCT banned.reply_id) as replies," - + "messages.attach,COUNT(DISTINCT favorites.user_id) AS likes,messages.hidden," - + "GROUP_CONCAT(DISTINCT tags.name SEPARATOR ' '), messages_txt.repliesby, messages_txt.txt, '' as q, " - + "messages.updated, 0 as to_uid, NULL as to_name, messages_txt.updated_at, '' as m_user_uri, " - + "'' as to_uri, '' as msg_reply_uri, 0 as html, cast(messages.replies as signed)-cast(subscr_messages.last_read_rid as signed) > 0 as unread " - + "FROM (messages INNER JOIN messages_txt " + "ON messages.message_id=messages_txt.message_id) " - + "INNER JOIN users ON messages.user_id=users.id " + "LEFT JOIN subscr_messages " - + "ON messages.message_id=subscr_messages.message_id AND subscr_messages.suser_id=:uid " - + "LEFT JOIN favorites " + "ON messages.message_id = favorites.message_id AND favorites.like_id=1 " - + "LEFT JOIN banned " + "ON messages.message_id = banned.message_id " - + "LEFT JOIN messages_tags ON messages_tags.message_id=messages_txt.message_id " - + "LEFT JOIN tags ON tags.tag_id=messages_tags.tag_id " - + "WHERE messages.message_id IN (:ids) GROUP BY " - + "messages.message_id, rid, replyto, messages.user_id, users.nick, usr_banned, messages.ts, " - + "messages.readonly, messages.privacy, messages.attach, messages.hidden, " - + "messages_txt.repliesby, messages_txt.txt, q, messages.updated, to_uid, to_name, updated_at, " - + "m_user_uri, msg_reply_uri, html"; + + "AS (SELECT message_id, reply_id FROM replies WHERE replies.message_id IN (:ids) " + + "AND (EXISTS (SELECT 1 FROM bl_users b WHERE b.user_id = :uid AND b.bl_user_id = replies.user_id) " + + "OR EXISTS (SELECT 1 from users u WHERE u.banned = 1 and u.id = replies.user_id and u.id <> :uid)) " + + "UNION ALL SELECT replies.message_id, replies.reply_id FROM replies INNER JOIN banned " + + "ON banned.reply_id = replies.replyto AND replies.reply_id != replies.replyto AND banned.message_id=replies.message_id " + + "WHERE replies.message_id IN (:ids)) " + "SELECT messages.message_id, 0 as rid, 0 as replyto, " + + "messages.user_id,users.nick, 0 as usr_banned, " + "messages.ts," + + "messages.readonly,messages.privacy, messages.replies-COUNT(DISTINCT banned.reply_id) as replies," + + "messages.attach,COUNT(DISTINCT favorites.user_id) AS likes,messages.hidden," + + "'' as tags, messages_txt.repliesby, messages_txt.txt, '' as q, " + + "messages.updated, 0 as to_uid, NULL as to_name, messages_txt.updated_at, '' as m_user_uri, " + + "'' as to_uri, '' as msg_reply_uri, 0 as html, (messages.replies - subscr_messages.last_read_rid) > 0 as unread " + + "FROM (messages INNER JOIN messages_txt " + "ON messages.message_id=messages_txt.message_id) " + + "INNER JOIN users ON messages.user_id=users.id " + "LEFT JOIN subscr_messages " + + "ON messages.message_id=subscr_messages.message_id AND subscr_messages.suser_id=:uid " + + "LEFT JOIN favorites " + "ON messages.message_id = favorites.message_id AND favorites.like_id=1 " + + "LEFT JOIN banned " + "ON messages.message_id = banned.message_id " + + "LEFT JOIN messages_tags ON messages_tags.message_id=messages_txt.message_id " + + "LEFT JOIN tags ON tags.tag_id=messages_tags.tag_id " + + "WHERE messages.message_id IN (:ids) GROUP BY " + + "messages.message_id, rid, replyto, messages.user_id, users.nick, usr_banned, messages.ts, " + + "messages.readonly, messages.privacy, messages.attach, messages.hidden, " + + "messages_txt.repliesby, messages_txt.txt, q, messages.updated, to_uid, to_name, updated_at, " + + "m_user_uri, msg_reply_uri, html, subscr_messages.last_read_rid"; List msgs = getNamedParameterJdbcTemplate().query(query, new MapSqlParameterSource("ids", mids).addValue("uid", visitor.getUid()), new MessageMapper()); @@ -830,7 +866,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ return getNamedParameterJdbcTemplate().query( "select f.message_id as mid, f.like_id as lid," + " r.description as descr, count(f.like_id) as cnt" + " from favorites f LEFT JOIN reactions r ON f.like_id = r.like_id " - + " where f.message_id IN (:mids) " + " group by f.message_id, f.like_id", + + " where f.message_id IN (:mids) " + " group by f.message_id, f.like_id, r.description", new MapSqlParameterSource("mids", mids), (ResultSet rs) -> { Map> results = new HashMap<>(); @@ -862,7 +898,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ + "SELECT replies.message_id as mid, replies.reply_id, replies.replyto, " + "replies.user_id, users.nick, users.banned, " + "replies.ts, " + "0 as readonly, 0 as privacy, 0 as replies, " + "replies.attach, 0 as likes, 0 as hidden, " - + "NULL as tags, NULL as repliesby, replies.txt, " + "IFNULL(qw.txt, t.txt) as q, " + "NOW(), " + + "NULL as tags, NULL as repliesby, replies.txt, " + "COALESCE(qw.txt, t.txt) as q, " + "NOW(), " + "COALESCE(qw.user_id, m.user_id) as to_uid, COALESCE(qu.nick, mu.nick) as to_name, " + "replies.updated_at, replies.user_uri as uri, " + "qw.user_uri as to_uri, replies.reply_uri, replies.html, 0 as unread " @@ -880,7 +916,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ if (replies.size() > 0 && !user.isAnonymous()) { setRead(user, mid); } - replies.forEach(i -> { + replies.forEach(i -> { i.setEntities(MessageUtils.getEntities(i)); i.getUser().setAvatar(webApp.getAvatarUrl(i.getUser())); }); @@ -967,8 +1003,14 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Transactional(readOnly = true) @Override public List getLastMessages(int hours) { - return getJdbcTemplate().queryForList( - "SELECT message_id FROM messages WHERE messages.ts>TIMESTAMPADD(HOUR,?,NOW())", Integer.class, -hours); + return getNamedParameterJdbcTemplate() + .queryForList( + "SELECT message_id FROM messages WHERE messages.ts > :hours", + new MapSqlParameterSource() + .addValue("hours", + Instant.now().minus(hours, ChronoUnit.HOURS).atOffset(ZoneOffset.UTC), + java.sql.Types.TIMESTAMP_WITH_TIMEZONE), + Integer.class); } @@ -997,18 +1039,27 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Transactional(readOnly = true) @Override public List getPopularCandidates() { - return getJdbcTemplate().queryForList("SELECT replies.message_id FROM replies " - + "INNER JOIN messages ON replies.message_id = messages.message_id " - + "LEFT JOIN favorites ON favorites.message_id = messages.message_id " - + "LEFT JOIN messages_tags ON messages_tags.message_id = messages.message_id " - + "WHERE COALESCE(messages_tags.tag_id, 0) != 2 " - + "AND COALESCE(messages_tags.tag_id, 0) != 805 AND replies.ts > TIMESTAMPADD(HOUR, -2, CURRENT_TIMESTAMP) " - + "AND NOT EXISTS (SELECT 1 FROM favorites WHERE message_id = messages.message_id AND user_id = 2) GROUP BY messages.message_id having COUNT(DISTINCT(replies.user_id)) > 5 " - + "UNION ALL SELECT favorites.message_id FROM favorites " - + "INNER JOIN messages ON messages.message_id = favorites.message_id " - + "LEFT JOIN messages_tags ON messages_tags.message_id = messages.message_id " - + "WHERE COALESCE(messages_tags.tag_id, 0) != 2 AND favorites.ts > TIMESTAMPADD(HOUR, -2, CURRENT_TIMESTAMP) " - + "AND NOT EXISTS (SELECT 1 FROM favorites WHERE message_id = messages.message_id AND user_id = 2) GROUP BY messages.message_id HAVING COUNT(DISTINCT favorites.user_id) > 2;", + var beforeTime = Instant.now().minus(2, ChronoUnit.HOURS); + var sql = """ + SELECT replies.message_id FROM replies + INNER JOIN messages ON replies.message_id = messages.message_id + LEFT JOIN favorites ON favorites.message_id = messages.message_id + LEFT JOIN messages_tags ON messages_tags.message_id = messages.message_id + WHERE COALESCE(messages_tags.tag_id, 0) != 2 + AND COALESCE(messages_tags.tag_id, 0) != 805 AND replies.ts > :before + AND NOT EXISTS (SELECT 1 FROM favorites WHERE message_id = messages.message_id + AND user_id = 2) GROUP BY replies.message_id HAVING COUNT(DISTINCT(replies.user_id)) > 5 + UNION ALL SELECT favorites.message_id FROM favorites + INNER JOIN messages ON messages.message_id = favorites.message_id + LEFT JOIN messages_tags ON messages_tags.message_id = messages.message_id + WHERE COALESCE(messages_tags.tag_id, 0) != 2 + AND favorites.ts > :before + AND NOT EXISTS (SELECT 1 FROM favorites + WHERE message_id = messages.message_id AND user_id = 2) + GROUP BY favorites.message_id HAVING COUNT(DISTINCT favorites.user_id) > 2 + """; + return getNamedParameterJdbcTemplate().queryForList(sql, new MapSqlParameterSource() + .addValue("before", beforeTime.atOffset(ZoneOffset.UTC), java.sql.Types.TIMESTAMP_WITH_TIMEZONE), Integer.class); } @@ -1111,11 +1162,12 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ SqlParameterSource parameterSource = new MapSqlParameterSource().addValue("mid", mid).addValue("rid", rid) .addValue("key", key).addValue("value", value); if (StringUtils.isNotEmpty(value)) { - try { + var exists = getMessageProperty(mid, rid, key); + if (StringUtils.isEmpty(exists)) { getNamedParameterJdbcTemplate() .update("INSERT INTO messages_properties(message_id, reply_id, property_key, property_value) " + "VALUES(:mid, :rid, :key, :value)", parameterSource); - } catch (DataIntegrityViolationException ex) { + } else { getNamedParameterJdbcTemplate().update("UPDATE messages_properties SET property_value=:value " + "WHERE message_id=:mid AND reply_id=:rid AND property_key=:key", parameterSource); } diff --git a/src/main/java/com/juick/service/PushQueriesServiceImpl.java b/src/main/java/com/juick/service/PushQueriesServiceImpl.java index a542087b..7f066ad7 100644 --- a/src/main/java/com/juick/service/PushQueriesServiceImpl.java +++ b/src/main/java/com/juick/service/PushQueriesServiceImpl.java @@ -18,6 +18,7 @@ package com.juick.service; import org.apache.commons.collections4.CollectionUtils; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.stereotype.Repository; @@ -134,7 +135,7 @@ public class PushQueriesServiceImpl extends BaseJdbcService implements PushQueri try { return getJdbcTemplate().update("INSERT INTO ios(user_id,token) VALUES (?, ?)", uid, token) > 0; - } catch (DuplicateKeyException e) { + } catch (DataIntegrityViolationException e) { return true; } } diff --git a/src/main/java/com/juick/service/SubscriptionServiceImpl.java b/src/main/java/com/juick/service/SubscriptionServiceImpl.java index 962f8460..ca813c67 100644 --- a/src/main/java/com/juick/service/SubscriptionServiceImpl.java +++ b/src/main/java/com/juick/service/SubscriptionServiceImpl.java @@ -25,6 +25,7 @@ import com.juick.util.MessageUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.collections4.ListUtils; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.stereotype.Repository; @@ -69,7 +70,8 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip Set set = new HashSet<>(users.stream() .filter(u -> !u.isBanned()) - .map(User::getUid).filter(u -> Collections.disjoint(tagService.getUserBLTags(u), tagsStr)) + .map(User::getUid) + .filter(u -> Collections.disjoint(tagService.getUserBLTags(u), tagsStr)) .collect(Collectors.toList())); if (!tags.isEmpty()) { @@ -121,7 +123,8 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip return userService.getUserReaders(uid).stream() .filter(u -> !u.equals(msg.getUser())) .filter(u -> !userService.isInBLAny(u.getUid(), msg.getUser().getUid())) - .filter(u -> Collections.disjoint(tagService.getUserBLTags(u.getUid()), msgTags)) + .filter(u -> Collections.disjoint(tagService.getUserBLTags(u.getUid()), + msgTags)) .collect(Collectors.toList()); } return Collections.emptyList(); @@ -130,11 +133,15 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip @Transactional @Override public boolean subscribeMessage(final Message message, final User user) { - boolean result = getJdbcTemplate().update( - "INSERT INTO subscr_messages(suser_id, message_id) VALUES (?, ?) ON DUPLICATE KEY UPDATE suser_id=?", - user.getUid(), message.getMid(), user.getUid()) == 1; - messagesService.setLastReadComment(user, message.getMid(), message.getReplies()); - return result; + try { + boolean result = getJdbcTemplate().update( + "INSERT INTO subscr_messages(suser_id, message_id) VALUES (?, ?)", + user.getUid(), message.getMid()) == 1; + messagesService.setLastReadComment(user, message.getMid(), message.getReplies()); + return result; + } catch (DataIntegrityViolationException e) { + return false; + } } @Transactional @@ -149,7 +156,8 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip public boolean subscribeUser(final User user, final User toUser) { try { return getJdbcTemplate().update( - "INSERT INTO subscr_users(user_id,suser_id) VALUES (?,?)", toUser.getUid(), user.getUid()) == 1; + "INSERT INTO subscr_users(user_id,suser_id) VALUES (?,?)", toUser.getUid(), + user.getUid()) == 1; } catch (DuplicateKeyException e) { return true; } @@ -159,7 +167,8 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip @Override public boolean unSubscribeUser(final User user, final User fromUser) { return getJdbcTemplate().update( - "DELETE FROM subscr_users WHERE suser_id=? AND user_id=?", user.getUid(), fromUser.getUid()) > 0; + "DELETE FROM subscr_users WHERE suser_id=? AND user_id=?", user.getUid(), + fromUser.getUid()) > 0; } @Transactional @@ -168,7 +177,8 @@ public class SubscriptionServiceImpl extends BaseJdbcService implements Subscrip try { return getJdbcTemplate().update( - "INSERT INTO subscr_tags(tag_id,suser_id) VALUES (?,?)", toTag.TID, user.getUid()) == 1; + "INSERT INTO subscr_tags(tag_id,suser_id) VALUES (?,?)", toTag.TID, + user.getUid()) == 1; } catch (DuplicateKeyException e) { return true; } diff --git a/src/main/java/com/juick/service/TagServiceImpl.java b/src/main/java/com/juick/service/TagServiceImpl.java index 81c0c3ba..1ae98c0f 100644 --- a/src/main/java/com/juick/service/TagServiceImpl.java +++ b/src/main/java/com/juick/service/TagServiceImpl.java @@ -36,6 +36,9 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.temporal.ChronoUnit; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -64,8 +67,7 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { }, tid); - return list.isEmpty() ? - null : list.get(0); + return list.isEmpty() ? null : list.get(0); } @Transactional @@ -84,8 +86,7 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { }, tag); - Tag ret = list.isEmpty() ? - null : list.get(0); + Tag ret = list.isEmpty() ? null : list.get(0); if (ret == null && autoCreate) { ret = new Tag(tag); @@ -97,8 +98,9 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { @Override public List getTags(Stream tags, final boolean autoCreate) { - return tags.filter(StringUtils::isNotBlank).map(tag -> getTag(tag, autoCreate)).filter(Objects::nonNull).distinct() - .collect(Collectors.toList()); + return tags.filter(StringUtils::isNotBlank).map(tag -> getTag(tag, autoCreate)).filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); } @Transactional(readOnly = true) @@ -124,7 +126,8 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { }, holder); - return holder.getKey().intValue(); + return holder.getKeys().size() > 1 ? ((Number) holder.getKeys().get("tag_id")).intValue() + : holder.getKey().intValue(); } private class TagStatsMapper implements RowMapper { @@ -164,19 +167,26 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { @Override public List getPopularTags() { return getJdbcTemplate().queryForList( - "select name from tags where noindex=0 order by stat_messages desc limit 20", String.class); + "select name from tags where noindex=false order by stat_messages desc limit 20", String.class); } @Transactional(readOnly = true) @Override public List getTagStats() { - return getJdbcTemplate().query( - "SELECT tags.name,COUNT(DISTINCT messages.user_id) AS cnt " + - "FROM (messages INNER JOIN messages_tags ON (messages.ts>TIMESTAMPADD(DAY,-14,NOW()) " + - "AND messages.message_id=messages_tags.message_id)) " + - "INNER JOIN tags ON messages_tags.tag_id=tags.tag_id " + - "WHERE tags.tag_id NOT IN (SELECT tag_id FROM tags_ignore) " + - "GROUP BY tags.tag_id HAVING cnt > 1 ORDER BY cnt DESC LIMIT 20", new TagStatsMapper()); + var ts = Instant.now().minus(14, ChronoUnit.DAYS); + var sql = """ + SELECT tags.name,COUNT(DISTINCT messages.user_id) AS cnt + FROM (messages INNER JOIN messages_tags ON (messages.ts > :ts + AND messages.message_id=messages_tags.message_id)) + INNER JOIN tags ON messages_tags.tag_id=tags.tag_id + WHERE tags.tag_id NOT IN (SELECT tag_id FROM tags_ignore) + GROUP BY tags.tag_id HAVING COUNT(DISTINCT messages.user_id) > 1 + ORDER BY cnt DESC LIMIT 20 + """; + return getNamedParameterJdbcTemplate() + .query(sql, new MapSqlParameterSource() + .addValue("ts", ts.atOffset(ZoneOffset.UTC), java.sql.Types.TIMESTAMP_WITH_TIMEZONE), + new TagStatsMapper()); } @Transactional @@ -202,17 +212,19 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { new MapSqlParameterSource().addValue("ids", idsForDelete).addValue("mid", mid)); List addedTags = newTags.stream().filter(t -> !currentTags.contains(t)).collect(Collectors.toList()); - getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id,tag_id) VALUES (?,?)", new BatchPreparedStatementSetter() { - @Override - public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException { - ps.setInt(1, mid); - ps.setInt(2, addedTags.get(i).TID); - } - @Override - public int getBatchSize() { - return addedTags.size(); - } - }); + getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id,tag_id) VALUES (?,?)", + new BatchPreparedStatementSetter() { + @Override + public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException { + ps.setInt(1, mid); + ps.setInt(2, addedTags.get(i).TID); + } + + @Override + public int getBatchSize() { + return addedTags.size(); + } + }); return getMessageTags(mid).stream() .map(TagStats::getTag).collect(Collectors.toSet()); @@ -257,7 +269,8 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { @Override public boolean blacklistTag(User user, Tag tag) { - int rowcount = getNamedParameterJdbcTemplate().update("DELETE FROM bl_tags WHERE tag_id = :tid AND user_id = :uid", + int rowcount = getNamedParameterJdbcTemplate().update( + "DELETE FROM bl_tags WHERE tag_id = :tid AND user_id = :uid", new MapSqlParameterSource().addValue("tid", tag.TID).addValue("uid", user.getUid())); return rowcount <= 0 && getNamedParameterJdbcTemplate() .update("INSERT INTO bl_tags(user_id, tag_id) VALUES(:uid,:tid)", diff --git a/src/main/java/com/juick/service/UserServiceImpl.java b/src/main/java/com/juick/service/UserServiceImpl.java index 0e6f9606..b9e7721b 100644 --- a/src/main/java/com/juick/service/UserServiceImpl.java +++ b/src/main/java/com/juick/service/UserServiceImpl.java @@ -133,7 +133,7 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { throw new UsernameTakenException(); } - int uid = holder.getKeys().size() > 1 ? (int)holder.getKeys().get("id") : holder.getKey().intValue(); + int uid = holder.getKeys().size() > 1 ? ((Number)holder.getKeys().get("id")).intValue() : holder.getKey().intValue(); getJdbcTemplate().update("INSERT INTO useroptions(user_id) VALUES (?)", uid); getJdbcTemplate().update("INSERT INTO subscr_users(user_id, suser_id) VALUES (2, ?)", uid); diff --git a/src/main/resources/application-postgres.properties b/src/main/resources/application-postgres.properties new file mode 100644 index 00000000..05dbc12d --- /dev/null +++ b/src/main/resources/application-postgres.properties @@ -0,0 +1 @@ +spring.sql.init.platform=postgresql diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3ef9bdfc..91117c31 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -5,6 +5,7 @@ spring.jackson.serialization.write-dates-as-timestamps=false spring.jackson.serialization.write-empty-json-arrays=true spring.h2.console.enabled=true spring.datasource.generate-unique-name=false +spring.flyway.locations=classpath:db/migration,classpath:db/specific/{vendor} spring.sql.init.platform=h2 spring.cache.type=none spring.cache.cache-names=help, usernames, users_by_name, discover, discussions, messages, replies, popular_tags diff --git a/src/main/resources/db/migration/V1.00__initial_schema.sql b/src/main/resources/db/migration/V1.00__initial_schema.sql deleted file mode 100644 index e25e3fed..00000000 --- a/src/main/resources/db/migration/V1.00__initial_schema.sql +++ /dev/null @@ -1,380 +0,0 @@ -SET DB_CLOSE_ON_EXIT TRUE; -SET MODE=MYSQL; - -CREATE TABLE IF NOT EXISTS `android` ( - `user_id` int(10) unsigned NOT NULL, - `regid` char(255) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP -); -CREATE TABLE IF NOT EXISTS `auth` ( - `user_id` int(10) unsigned NOT NULL, - `protocol` enum('xmpp','email','sms') NOT NULL, - `account` char(64) NOT NULL, - `authcode` char(8) NOT NULL -); -CREATE TABLE IF NOT EXISTS `bl_tags` ( - `user_id` int(10) unsigned NOT NULL, - `tag_id` int(10) unsigned NOT NULL -); -CREATE TABLE IF NOT EXISTS `bl_users` ( - `user_id` int(10) unsigned NOT NULL, - `bl_user_id` int(10) unsigned NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`user_id`,`bl_user_id`) -); -CREATE TABLE IF NOT EXISTS `facebook` ( - `user_id` int(10) unsigned DEFAULT NULL, - `fb_id` bigint(20) unsigned NULL, - `loginhash` char(36) DEFAULT NULL, - `access_token` char(255) DEFAULT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `fb_name` char(64) NULL, - `fb_link` char(255) NULL, - `crosspost` tinyint(1) unsigned NOT NULL DEFAULT '1' -); - -CREATE TABLE IF NOT EXISTS `reactions` ( - `like_id` int(10) unsigned NOT NULL, - `description` varchar (100) NOT NULL -); -CREATE TABLE IF NOT EXISTS `favorites` ( - `user_id` int(10) unsigned NOT NULL, - `message_id` int(10) unsigned NOT NULL, - `ts` datetime NOT NULL, - `like_id` int(10), - foreign key (like_id) references reactions(like_id) -); - - - -CREATE TABLE IF NOT EXISTS `friends_facebook` ( - `user_id` int(10) unsigned NOT NULL, - `friend_id` bigint(20) unsigned NOT NULL, - UNIQUE KEY `user_id` (`user_id`,`friend_id`) -); -CREATE TABLE IF NOT EXISTS `images` ( - `mid` int(10) unsigned NOT NULL, - `rid` int(10) unsigned NOT NULL, - `thumb` int(10) unsigned NOT NULL, - `small` int(10) unsigned NOT NULL, - `medium` int(10) unsigned NOT NULL, - `height` int(10) unsigned NOT NULL, - `width` int(10) unsigned NOT NULL, - PRIMARY KEY (`mid`,`rid`) -); - -CREATE TABLE IF NOT EXISTS `mail` ( - `user_id` int(10) unsigned NOT NULL, - `hash` char(16) NOT NULL, - PRIMARY KEY (`user_id`) -); - -CREATE TABLE IF NOT EXISTS `meon` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `user_id` int(10) unsigned NOT NULL, - `link` char(255) NOT NULL, - `name` char(32) NOT NULL, - `ico` smallint(5) unsigned DEFAULT NULL, - PRIMARY KEY (`id`) -); - - - -CREATE TABLE IF NOT EXISTS `messages_access` ( - `message_id` int(10) unsigned NOT NULL, - `user_id` int(10) unsigned NOT NULL -); - -CREATE TABLE IF NOT EXISTS `messages_tags` ( - `message_id` int(10) unsigned NOT NULL, - `tag_id` int(10) unsigned NOT NULL, - UNIQUE KEY `message_id_2` (`message_id`,`tag_id`) -); - -CREATE TABLE IF NOT EXISTS `messages_txt` ( - `message_id` int(10) unsigned NOT NULL, - `tags` varchar(255) DEFAULT NULL, - `repliesby` varchar(96) DEFAULT NULL, - `txt` mediumtext NOT NULL, - PRIMARY KEY (`message_id`) -); - -CREATE TABLE IF NOT EXISTS `messages_votes` ( - `message_id` int(10) unsigned NOT NULL, - `user_id` int(10) unsigned NOT NULL, - `vote` tinyint(4) NOT NULL DEFAULT '1', - UNIQUE KEY `message_id` (`message_id`,`user_id`) -); - -CREATE TABLE IF NOT EXISTS `messenger` ( - `user_id` int(10) unsigned DEFAULT NULL, - `sender_id` bigint(20) NOT NULL, - `display_name` char(64) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `loginhash` char(36) DEFAULT NULL -); - -CREATE TABLE IF NOT EXISTS `places` ( - `place_id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `lat` decimal(10,7) NOT NULL, - `lon` decimal(10,7) NOT NULL, - `name` char(64) NOT NULL, - `descr` char(255) DEFAULT NULL, - `url` char(128) DEFAULT NULL, - `user_id` int(10) unsigned NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`place_id`) -); - -CREATE TABLE IF NOT EXISTS `places_tags` ( - `place_id` int(10) unsigned NOT NULL, - `tag_id` int(10) unsigned NOT NULL -); - -CREATE TABLE IF NOT EXISTS `pm` ( - `user_id` int(10) unsigned NOT NULL, - `user_id_to` int(10) unsigned NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `txt` text NOT NULL -); - -CREATE TABLE IF NOT EXISTS `pm_streams` ( - `user_id` int(10) unsigned NOT NULL, - `user_id_to` int(10) unsigned NOT NULL, - `lastmessage` datetime NOT NULL, - `lastview` datetime DEFAULT NULL, - `unread` smallint(5) unsigned NOT NULL DEFAULT '0', - UNIQUE KEY (`user_id`,`user_id_to`) -); - -CREATE TABLE IF NOT EXISTS `presence` ( - `user_id` int(10) unsigned NOT NULL, - `jid` char(64) DEFAULT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY (`jid`) -); - -CREATE TABLE IF NOT EXISTS `replies` ( - `message_id` int(10) unsigned NOT NULL, - `reply_id` smallint(5) unsigned NOT NULL, - `user_id` int(10) unsigned NOT NULL, - `replyto` smallint(5) unsigned NOT NULL DEFAULT '0', - `ts` timestamp(9) NOT NULL DEFAULT CURRENT_TIMESTAMP, - `attach` nchar(3) check (attach in ('jpg', 'mp4', 'png')), - `txt` mediumtext NOT NULL -); - -CREATE TABLE IF NOT EXISTS `subscr_messages` ( - `message_id` int(10) unsigned NOT NULL, - `suser_id` int(10) unsigned NOT NULL, - `last_read_rid` smallint(5) unsigned NOT NULL DEFAULT '0', - UNIQUE KEY (`message_id`,`suser_id`) -); - -CREATE TABLE IF NOT EXISTS `subscr_tags` ( - `tag_id` int(10) unsigned NOT NULL, - `suser_id` int(10) unsigned NOT NULL, - UNIQUE KEY (`tag_id`,`suser_id`) -); - -CREATE TABLE IF NOT EXISTS `subscr_users` ( - `user_id` int(10) unsigned NOT NULL, - `suser_id` int(10) unsigned NOT NULL, - `jid` char(64) DEFAULT NULL, - `active` bit(1) NOT NULL DEFAULT TRUE, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY (`user_id`,`suser_id`) -); - -CREATE TABLE IF NOT EXISTS `tags` ( - `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `synonym_id` int(10) unsigned DEFAULT NULL, - `name` varchar_ignorecase(70) DEFAULT NULL, - `top` tinyint(1) unsigned NOT NULL DEFAULT '0', - `noindex` tinyint(1) unsigned NOT NULL DEFAULT '0', - `stat_messages` int(10) unsigned NOT NULL DEFAULT '0', - `stat_users` smallint(5) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`tag_id`) -); - -CREATE TABLE IF NOT EXISTS `tags_ignore` ( - `tag_id` int(10) unsigned NOT NULL -); - -CREATE TABLE IF NOT EXISTS `tags_synonyms` ( - `name` char(64) NOT NULL, - `changeto` char(64) NOT NULL -); - -CREATE TABLE IF NOT EXISTS `telegram` ( - `user_id` int(10) unsigned DEFAULT NULL, - `tg_id` bigint(20) NOT NULL, - `tg_name` char(64) DEFAULT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `loginhash` char(36) DEFAULT NULL -); - -CREATE TABLE IF NOT EXISTS `telegram_chats` ( - `chat_id` bigint(20) DEFAULT NULL, - UNIQUE KEY `chat_id` (`chat_id`) -); - -CREATE TABLE IF NOT EXISTS `top_ignore_messages` ( - `message_id` int(10) unsigned NOT NULL -); - -CREATE TABLE IF NOT EXISTS `top_ignore_tags` ( - `tag_id` int(10) unsigned NOT NULL, - PRIMARY KEY (`tag_id`) -); - -CREATE TABLE IF NOT EXISTS `top_ignore_users` ( - `user_id` int(10) unsigned NOT NULL, - PRIMARY KEY (`user_id`) -); - -CREATE TABLE IF NOT EXISTS `twitter` ( - `user_id` int(10) unsigned NOT NULL, - `access_token` char(64) NOT NULL, - `access_token_secret` char(64) NOT NULL, - `uname` char(64) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `crosspost` tinyint(1) unsigned NOT NULL DEFAULT '1', - PRIMARY KEY (`user_id`) -); - -CREATE TABLE IF NOT EXISTS `useroptions` ( - `user_id` int(10) unsigned NOT NULL, - `jnotify` tinyint(1) NOT NULL DEFAULT '1', - `subscr_active` tinyint(1) NOT NULL DEFAULT '1', - `off_ts` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `xmppxhtml` tinyint(1) NOT NULL DEFAULT '0', - `subscr_notify` tinyint(1) NOT NULL DEFAULT '1', - `recommendations` tinyint(1) NOT NULL DEFAULT '1', - `privacy_view` tinyint(1) NOT NULL DEFAULT '1', - `privacy_reply` tinyint(1) NOT NULL DEFAULT '1', - `privacy_pm` tinyint(1) NOT NULL DEFAULT '1', - `repliesview` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`user_id`) -); - -CREATE TABLE IF NOT EXISTS `users` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT(0), - `nick` char(64) NOT NULL, - `passw` char(32) NOT NULL, - `lang` enum('en','ru','fr','fa','__') NOT NULL DEFAULT '__', - `banned` tinyint(3) unsigned NOT NULL DEFAULT '0', - `lastmessage` timestamp(9) NOT NULL DEFAULT CURRENT_TIMESTAMP, - `lastpm` int(11) NOT NULL DEFAULT '0', - `lastphoto` int(11) NOT NULL DEFAULT '0', - `karma` smallint(6) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - UNIQUE KEY `nick` (`nick`) -); - -CREATE TABLE IF NOT EXISTS `users_refs` ( - `user_id` int(10) unsigned NOT NULL, - `ref` int(10) unsigned NOT NULL -); - -CREATE TABLE IF NOT EXISTS `users_subscr` ( - `user_id` int(10) unsigned NOT NULL, - `cnt` smallint(5) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`user_id`) -); - -CREATE TABLE IF NOT EXISTS `usersinfo` ( - `user_id` int(10) unsigned NOT NULL, - `jid` char(32) DEFAULT NULL, - `fullname` char(32) DEFAULT NULL, - `country` char(32) DEFAULT NULL, - `url` char(64) DEFAULT NULL, - `gender` char(32) DEFAULT NULL, - `bday` char(10) DEFAULT NULL, - `descr` varchar(255) DEFAULT NULL, - PRIMARY KEY (`user_id`) -); -CREATE TABLE IF NOT EXISTS `emails` ( - `user_id` int(10) unsigned NOT NULL, - `email` char(64) NOT NULL PRIMARY KEY, - `subscr_hour` tinyint(4) DEFAULT NULL, - foreign key (user_id) references users(id) -); -CREATE TABLE IF NOT EXISTS `ios` ( - `user_id` int(10) unsigned NOT NULL, - `token` char(64) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY `token` (`token`), - foreign key (user_id) references users(id) -); - -CREATE TABLE IF NOT EXISTS `jids` ( - `user_id` int(10) unsigned DEFAULT NULL, - `jid` char(64) NOT NULL, - `active` tinyint(1) NOT NULL DEFAULT '1', - `loginhash` char(36) DEFAULT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY `jid` (`jid`), - foreign key (user_id) references users(id) -); - -CREATE TABLE IF NOT EXISTS `logins` ( - `user_id` int(10) unsigned NOT NULL, - `hash` char(16) NOT NULL, - UNIQUE KEY (`user_id`) -); -CREATE TABLE IF NOT EXISTS `messages` ( - `message_id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, - `user_id` int(10) unsigned NOT NULL, - `lang` enum('en','ru','fr','fa','__') NOT NULL DEFAULT '__', - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `replies` smallint(5) unsigned NOT NULL DEFAULT '0', - `maxreplyid` smallint(5) unsigned NOT NULL DEFAULT '0', - `privacy` tinyint(4) NOT NULL DEFAULT '1', - `readonly` tinyint(1) NOT NULL DEFAULT '0', - `attach` nchar(3) check (attach in ('jpg', 'mp4', 'png')), - `place_id` int(10) unsigned DEFAULT NULL, - `lat` decimal(10,7) DEFAULT NULL, - `lon` decimal(10,7) DEFAULT NULL, - `popular` tinyint(4) NOT NULL DEFAULT '0', - `hidden` tinyint(3) unsigned NOT NULL DEFAULT '0', - `likes` smallint(6) NOT NULL DEFAULT '0', - `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (`user_id`) references users(id) -); -CREATE TABLE IF NOT EXISTS `pm_inroster` ( - `user_id` int(10) unsigned NOT NULL, - `jid` char(64) NOT NULL, - UNIQUE KEY (`user_id`,`jid`), - FOREIGN KEY (`user_id`) references users(id) -); - -CREATE TABLE IF NOT EXISTS `version` ( - `version` bigint(20) NOT NULL -); - -CREATE TABLE IF NOT EXISTS `vk` ( - `user_id` int(10) unsigned DEFAULT NULL, - `vk_id` bigint(20) NOT NULL, - `loginhash` char(36) DEFAULT NULL, - `access_token` char(128) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `vk_name` char(64) NOT NULL, - `vk_link` char(64) NOT NULL, - `crosspost` bit(1) unsigned NOT NULL DEFAULT FALSE, - FOREIGN KEY (`user_id`) references users(id) -); - -CREATE TABLE IF NOT EXISTS `winphone` ( - `user_id` int(10) unsigned NOT NULL, - `url` char(255) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY (`url`), - FOREIGN KEY (`user_id`) references users(id) -); - -CREATE TABLE IF NOT EXISTS `wl_users` ( - `user_id` int(10) unsigned NOT NULL, - `wl_user_id` int(10) unsigned NOT NULL, - PRIMARY KEY (`user_id`,`wl_user_id`) -); diff --git a/src/main/resources/db/migration/V1.10__favorites_user_uri.sql b/src/main/resources/db/migration/V1.10__favorites_user_uri.sql deleted file mode 100644 index 8f382398..00000000 --- a/src/main/resources/db/migration/V1.10__favorites_user_uri.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE favorites ADD COLUMN user_uri char(255) DEFAULT NULL; -UPDATE favorites SET user_uri='' WHERE user_uri IS NULL; -ALTER TABLE favorites MODIFY COLUMN user_uri char(255) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.11__increase pm timestamp precision.sql b/src/main/resources/db/migration/V1.11__increase pm timestamp precision.sql deleted file mode 100644 index e83eb621..00000000 --- a/src/main/resources/db/migration/V1.11__increase pm timestamp precision.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE pm MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.15__drop unused columns add ts for some tables.sql b/src/main/resources/db/migration/V1.15__drop unused columns add ts for some tables.sql index 6b3ab388..2350bff2 100644 --- a/src/main/resources/db/migration/V1.15__drop unused columns add ts for some tables.sql +++ b/src/main/resources/db/migration/V1.15__drop unused columns add ts for some tables.sql @@ -1,4 +1,4 @@ -ALTER TABLE subscr_users DROP COLUMN `jid`; -ALTER TABLE subscr_users DROP COLUMN `active`; +ALTER TABLE subscr_users DROP COLUMN jid; +ALTER TABLE subscr_users DROP COLUMN active; ALTER TABLE auth ADD COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; ALTER TABLE mail ADD COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.16__last seen.sql b/src/main/resources/db/migration/V1.16__last seen.sql deleted file mode 100644 index 52ca4e90..00000000 --- a/src/main/resources/db/migration/V1.16__last seen.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE users ADD COLUMN last_seen timestamp(6) NULL; -UPDATE users SET last_seen=lastmessage; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.18__increase messages and replies timestamp precision.sql b/src/main/resources/db/migration/V1.18__increase messages and replies timestamp precision.sql deleted file mode 100644 index 5b298c46..00000000 --- a/src/main/resources/db/migration/V1.18__increase messages and replies timestamp precision.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE replies MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE messages MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE messages MODIFY COLUMN updated timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE users MODIFY COLUMN lastmessage timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/src/main/resources/db/migration/V1.19__messages_properties.sql b/src/main/resources/db/migration/V1.19__messages_properties.sql deleted file mode 100644 index 2bb3baf2..00000000 --- a/src/main/resources/db/migration/V1.19__messages_properties.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE messages_properties ( - message_id int(10) unsigned NOT NULL, - property_key varchar(255) NOT NULL, - property_value mediumtext NOT NULL, - UNIQUE KEY message_key(message_id, property_key) -) \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.20__reply id in messages_properties.sql b/src/main/resources/db/migration/V1.20__reply id in messages_properties.sql deleted file mode 100644 index 2ca5e018..00000000 --- a/src/main/resources/db/migration/V1.20__reply id in messages_properties.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE messages_properties ADD COLUMN reply_id smallint(5) unsigned NOT NULL \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.21__recreate messages_properties with correct index.sql b/src/main/resources/db/migration/V1.21__recreate messages_properties with correct index.sql deleted file mode 100644 index 685318af..00000000 --- a/src/main/resources/db/migration/V1.21__recreate messages_properties with correct index.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE messages_properties; -CREATE TABLE messages_properties ( - message_id int(10) unsigned NOT NULL, - reply_id smallint(5) unsigned NOT NULL, - property_key varchar(255) NOT NULL, - property_value mediumtext NOT NULL, - UNIQUE KEY message_key(message_id, reply_id, property_key) -) \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.22__increase updated_at precision.sql b/src/main/resources/db/migration/V1.22__increase updated_at precision.sql deleted file mode 100644 index 22034ea2..00000000 --- a/src/main/resources/db/migration/V1.22__increase updated_at precision.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE replies MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.2__Drop telegram_chats.sql b/src/main/resources/db/migration/V1.2__Drop telegram_chats.sql deleted file mode 100644 index c8faee0d..00000000 --- a/src/main/resources/db/migration/V1.2__Drop telegram_chats.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO telegram(tg_id, tg_name, loginhash) SELECT chat_id AS tg_id, 'Anonymous', UUID() FROM telegram_chats; -DROP TABLE telegram_chats; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.3__Nullable user_id column in auth table.sql b/src/main/resources/db/migration/V1.3__Nullable user_id column in auth table.sql deleted file mode 100644 index ced85ade..00000000 --- a/src/main/resources/db/migration/V1.3__Nullable user_id column in auth table.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE auth MODIFY COLUMN user_id int(10) unsigned NULL; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.4__ActivityPub followers.sql b/src/main/resources/db/migration/V1.4__ActivityPub followers.sql deleted file mode 100644 index 16b39f62..00000000 --- a/src/main/resources/db/migration/V1.4__ActivityPub followers.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE IF NOT EXISTS `followers` ( - `user_id` int(10) unsigned DEFAULT NULL, - `acct` char(64) NOT NULL, - `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY `acct` (`acct`), - foreign key (user_id) references users(id) -); \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.5__Drop acct index.sql b/src/main/resources/db/migration/V1.5__Drop acct index.sql deleted file mode 100644 index 58757d88..00000000 --- a/src/main/resources/db/migration/V1.5__Drop acct index.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE followers ADD COLUMN `acct_migr` char(64) NOT NULL; -UPDATE followers SET `acct_migr` = `acct`; -ALTER TABLE followers DROP COLUMN `acct`; -ALTER TABLE followers ADD COLUMN `acct` char(64) NOT NULL; -UPDATE followers SET `acct` = `acct_migr`; -ALTER TABLE followers DROP COLUMN `acct_migr`; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.6__user_uri.sql b/src/main/resources/db/migration/V1.6__user_uri.sql deleted file mode 100644 index c302907c..00000000 --- a/src/main/resources/db/migration/V1.6__user_uri.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE replies ADD COLUMN user_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.7__reply_uri.sql b/src/main/resources/db/migration/V1.7__reply_uri.sql deleted file mode 100644 index 9ec35485..00000000 --- a/src/main/resources/db/migration/V1.7__reply_uri.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE replies ADD COLUMN reply_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.8__html reply.sql b/src/main/resources/db/migration/V1.8__html reply.sql deleted file mode 100644 index 9f939971..00000000 --- a/src/main/resources/db/migration/V1.8__html reply.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE replies ADD COLUMN html tinyint(4) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.00__initial_schema.sql b/src/main/resources/db/specific/h2/V1.00__initial_schema.sql new file mode 100644 index 00000000..e25e3fed --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.00__initial_schema.sql @@ -0,0 +1,380 @@ +SET DB_CLOSE_ON_EXIT TRUE; +SET MODE=MYSQL; + +CREATE TABLE IF NOT EXISTS `android` ( + `user_id` int(10) unsigned NOT NULL, + `regid` char(255) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE TABLE IF NOT EXISTS `auth` ( + `user_id` int(10) unsigned NOT NULL, + `protocol` enum('xmpp','email','sms') NOT NULL, + `account` char(64) NOT NULL, + `authcode` char(8) NOT NULL +); +CREATE TABLE IF NOT EXISTS `bl_tags` ( + `user_id` int(10) unsigned NOT NULL, + `tag_id` int(10) unsigned NOT NULL +); +CREATE TABLE IF NOT EXISTS `bl_users` ( + `user_id` int(10) unsigned NOT NULL, + `bl_user_id` int(10) unsigned NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`user_id`,`bl_user_id`) +); +CREATE TABLE IF NOT EXISTS `facebook` ( + `user_id` int(10) unsigned DEFAULT NULL, + `fb_id` bigint(20) unsigned NULL, + `loginhash` char(36) DEFAULT NULL, + `access_token` char(255) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `fb_name` char(64) NULL, + `fb_link` char(255) NULL, + `crosspost` tinyint(1) unsigned NOT NULL DEFAULT '1' +); + +CREATE TABLE IF NOT EXISTS `reactions` ( + `like_id` int(10) unsigned NOT NULL, + `description` varchar (100) NOT NULL +); +CREATE TABLE IF NOT EXISTS `favorites` ( + `user_id` int(10) unsigned NOT NULL, + `message_id` int(10) unsigned NOT NULL, + `ts` datetime NOT NULL, + `like_id` int(10), + foreign key (like_id) references reactions(like_id) +); + + + +CREATE TABLE IF NOT EXISTS `friends_facebook` ( + `user_id` int(10) unsigned NOT NULL, + `friend_id` bigint(20) unsigned NOT NULL, + UNIQUE KEY `user_id` (`user_id`,`friend_id`) +); +CREATE TABLE IF NOT EXISTS `images` ( + `mid` int(10) unsigned NOT NULL, + `rid` int(10) unsigned NOT NULL, + `thumb` int(10) unsigned NOT NULL, + `small` int(10) unsigned NOT NULL, + `medium` int(10) unsigned NOT NULL, + `height` int(10) unsigned NOT NULL, + `width` int(10) unsigned NOT NULL, + PRIMARY KEY (`mid`,`rid`) +); + +CREATE TABLE IF NOT EXISTS `mail` ( + `user_id` int(10) unsigned NOT NULL, + `hash` char(16) NOT NULL, + PRIMARY KEY (`user_id`) +); + +CREATE TABLE IF NOT EXISTS `meon` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(10) unsigned NOT NULL, + `link` char(255) NOT NULL, + `name` char(32) NOT NULL, + `ico` smallint(5) unsigned DEFAULT NULL, + PRIMARY KEY (`id`) +); + + + +CREATE TABLE IF NOT EXISTS `messages_access` ( + `message_id` int(10) unsigned NOT NULL, + `user_id` int(10) unsigned NOT NULL +); + +CREATE TABLE IF NOT EXISTS `messages_tags` ( + `message_id` int(10) unsigned NOT NULL, + `tag_id` int(10) unsigned NOT NULL, + UNIQUE KEY `message_id_2` (`message_id`,`tag_id`) +); + +CREATE TABLE IF NOT EXISTS `messages_txt` ( + `message_id` int(10) unsigned NOT NULL, + `tags` varchar(255) DEFAULT NULL, + `repliesby` varchar(96) DEFAULT NULL, + `txt` mediumtext NOT NULL, + PRIMARY KEY (`message_id`) +); + +CREATE TABLE IF NOT EXISTS `messages_votes` ( + `message_id` int(10) unsigned NOT NULL, + `user_id` int(10) unsigned NOT NULL, + `vote` tinyint(4) NOT NULL DEFAULT '1', + UNIQUE KEY `message_id` (`message_id`,`user_id`) +); + +CREATE TABLE IF NOT EXISTS `messenger` ( + `user_id` int(10) unsigned DEFAULT NULL, + `sender_id` bigint(20) NOT NULL, + `display_name` char(64) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `loginhash` char(36) DEFAULT NULL +); + +CREATE TABLE IF NOT EXISTS `places` ( + `place_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lat` decimal(10,7) NOT NULL, + `lon` decimal(10,7) NOT NULL, + `name` char(64) NOT NULL, + `descr` char(255) DEFAULT NULL, + `url` char(128) DEFAULT NULL, + `user_id` int(10) unsigned NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`place_id`) +); + +CREATE TABLE IF NOT EXISTS `places_tags` ( + `place_id` int(10) unsigned NOT NULL, + `tag_id` int(10) unsigned NOT NULL +); + +CREATE TABLE IF NOT EXISTS `pm` ( + `user_id` int(10) unsigned NOT NULL, + `user_id_to` int(10) unsigned NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `txt` text NOT NULL +); + +CREATE TABLE IF NOT EXISTS `pm_streams` ( + `user_id` int(10) unsigned NOT NULL, + `user_id_to` int(10) unsigned NOT NULL, + `lastmessage` datetime NOT NULL, + `lastview` datetime DEFAULT NULL, + `unread` smallint(5) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY (`user_id`,`user_id_to`) +); + +CREATE TABLE IF NOT EXISTS `presence` ( + `user_id` int(10) unsigned NOT NULL, + `jid` char(64) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY (`jid`) +); + +CREATE TABLE IF NOT EXISTS `replies` ( + `message_id` int(10) unsigned NOT NULL, + `reply_id` smallint(5) unsigned NOT NULL, + `user_id` int(10) unsigned NOT NULL, + `replyto` smallint(5) unsigned NOT NULL DEFAULT '0', + `ts` timestamp(9) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `attach` nchar(3) check (attach in ('jpg', 'mp4', 'png')), + `txt` mediumtext NOT NULL +); + +CREATE TABLE IF NOT EXISTS `subscr_messages` ( + `message_id` int(10) unsigned NOT NULL, + `suser_id` int(10) unsigned NOT NULL, + `last_read_rid` smallint(5) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY (`message_id`,`suser_id`) +); + +CREATE TABLE IF NOT EXISTS `subscr_tags` ( + `tag_id` int(10) unsigned NOT NULL, + `suser_id` int(10) unsigned NOT NULL, + UNIQUE KEY (`tag_id`,`suser_id`) +); + +CREATE TABLE IF NOT EXISTS `subscr_users` ( + `user_id` int(10) unsigned NOT NULL, + `suser_id` int(10) unsigned NOT NULL, + `jid` char(64) DEFAULT NULL, + `active` bit(1) NOT NULL DEFAULT TRUE, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY (`user_id`,`suser_id`) +); + +CREATE TABLE IF NOT EXISTS `tags` ( + `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `synonym_id` int(10) unsigned DEFAULT NULL, + `name` varchar_ignorecase(70) DEFAULT NULL, + `top` tinyint(1) unsigned NOT NULL DEFAULT '0', + `noindex` tinyint(1) unsigned NOT NULL DEFAULT '0', + `stat_messages` int(10) unsigned NOT NULL DEFAULT '0', + `stat_users` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`tag_id`) +); + +CREATE TABLE IF NOT EXISTS `tags_ignore` ( + `tag_id` int(10) unsigned NOT NULL +); + +CREATE TABLE IF NOT EXISTS `tags_synonyms` ( + `name` char(64) NOT NULL, + `changeto` char(64) NOT NULL +); + +CREATE TABLE IF NOT EXISTS `telegram` ( + `user_id` int(10) unsigned DEFAULT NULL, + `tg_id` bigint(20) NOT NULL, + `tg_name` char(64) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `loginhash` char(36) DEFAULT NULL +); + +CREATE TABLE IF NOT EXISTS `telegram_chats` ( + `chat_id` bigint(20) DEFAULT NULL, + UNIQUE KEY `chat_id` (`chat_id`) +); + +CREATE TABLE IF NOT EXISTS `top_ignore_messages` ( + `message_id` int(10) unsigned NOT NULL +); + +CREATE TABLE IF NOT EXISTS `top_ignore_tags` ( + `tag_id` int(10) unsigned NOT NULL, + PRIMARY KEY (`tag_id`) +); + +CREATE TABLE IF NOT EXISTS `top_ignore_users` ( + `user_id` int(10) unsigned NOT NULL, + PRIMARY KEY (`user_id`) +); + +CREATE TABLE IF NOT EXISTS `twitter` ( + `user_id` int(10) unsigned NOT NULL, + `access_token` char(64) NOT NULL, + `access_token_secret` char(64) NOT NULL, + `uname` char(64) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `crosspost` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`user_id`) +); + +CREATE TABLE IF NOT EXISTS `useroptions` ( + `user_id` int(10) unsigned NOT NULL, + `jnotify` tinyint(1) NOT NULL DEFAULT '1', + `subscr_active` tinyint(1) NOT NULL DEFAULT '1', + `off_ts` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `xmppxhtml` tinyint(1) NOT NULL DEFAULT '0', + `subscr_notify` tinyint(1) NOT NULL DEFAULT '1', + `recommendations` tinyint(1) NOT NULL DEFAULT '1', + `privacy_view` tinyint(1) NOT NULL DEFAULT '1', + `privacy_reply` tinyint(1) NOT NULL DEFAULT '1', + `privacy_pm` tinyint(1) NOT NULL DEFAULT '1', + `repliesview` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`user_id`) +); + +CREATE TABLE IF NOT EXISTS `users` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT(0), + `nick` char(64) NOT NULL, + `passw` char(32) NOT NULL, + `lang` enum('en','ru','fr','fa','__') NOT NULL DEFAULT '__', + `banned` tinyint(3) unsigned NOT NULL DEFAULT '0', + `lastmessage` timestamp(9) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `lastpm` int(11) NOT NULL DEFAULT '0', + `lastphoto` int(11) NOT NULL DEFAULT '0', + `karma` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `nick` (`nick`) +); + +CREATE TABLE IF NOT EXISTS `users_refs` ( + `user_id` int(10) unsigned NOT NULL, + `ref` int(10) unsigned NOT NULL +); + +CREATE TABLE IF NOT EXISTS `users_subscr` ( + `user_id` int(10) unsigned NOT NULL, + `cnt` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`user_id`) +); + +CREATE TABLE IF NOT EXISTS `usersinfo` ( + `user_id` int(10) unsigned NOT NULL, + `jid` char(32) DEFAULT NULL, + `fullname` char(32) DEFAULT NULL, + `country` char(32) DEFAULT NULL, + `url` char(64) DEFAULT NULL, + `gender` char(32) DEFAULT NULL, + `bday` char(10) DEFAULT NULL, + `descr` varchar(255) DEFAULT NULL, + PRIMARY KEY (`user_id`) +); +CREATE TABLE IF NOT EXISTS `emails` ( + `user_id` int(10) unsigned NOT NULL, + `email` char(64) NOT NULL PRIMARY KEY, + `subscr_hour` tinyint(4) DEFAULT NULL, + foreign key (user_id) references users(id) +); +CREATE TABLE IF NOT EXISTS `ios` ( + `user_id` int(10) unsigned NOT NULL, + `token` char(64) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY `token` (`token`), + foreign key (user_id) references users(id) +); + +CREATE TABLE IF NOT EXISTS `jids` ( + `user_id` int(10) unsigned DEFAULT NULL, + `jid` char(64) NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '1', + `loginhash` char(36) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY `jid` (`jid`), + foreign key (user_id) references users(id) +); + +CREATE TABLE IF NOT EXISTS `logins` ( + `user_id` int(10) unsigned NOT NULL, + `hash` char(16) NOT NULL, + UNIQUE KEY (`user_id`) +); +CREATE TABLE IF NOT EXISTS `messages` ( + `message_id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, + `user_id` int(10) unsigned NOT NULL, + `lang` enum('en','ru','fr','fa','__') NOT NULL DEFAULT '__', + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `replies` smallint(5) unsigned NOT NULL DEFAULT '0', + `maxreplyid` smallint(5) unsigned NOT NULL DEFAULT '0', + `privacy` tinyint(4) NOT NULL DEFAULT '1', + `readonly` tinyint(1) NOT NULL DEFAULT '0', + `attach` nchar(3) check (attach in ('jpg', 'mp4', 'png')), + `place_id` int(10) unsigned DEFAULT NULL, + `lat` decimal(10,7) DEFAULT NULL, + `lon` decimal(10,7) DEFAULT NULL, + `popular` tinyint(4) NOT NULL DEFAULT '0', + `hidden` tinyint(3) unsigned NOT NULL DEFAULT '0', + `likes` smallint(6) NOT NULL DEFAULT '0', + `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (`user_id`) references users(id) +); +CREATE TABLE IF NOT EXISTS `pm_inroster` ( + `user_id` int(10) unsigned NOT NULL, + `jid` char(64) NOT NULL, + UNIQUE KEY (`user_id`,`jid`), + FOREIGN KEY (`user_id`) references users(id) +); + +CREATE TABLE IF NOT EXISTS `version` ( + `version` bigint(20) NOT NULL +); + +CREATE TABLE IF NOT EXISTS `vk` ( + `user_id` int(10) unsigned DEFAULT NULL, + `vk_id` bigint(20) NOT NULL, + `loginhash` char(36) DEFAULT NULL, + `access_token` char(128) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `vk_name` char(64) NOT NULL, + `vk_link` char(64) NOT NULL, + `crosspost` bit(1) unsigned NOT NULL DEFAULT FALSE, + FOREIGN KEY (`user_id`) references users(id) +); + +CREATE TABLE IF NOT EXISTS `winphone` ( + `user_id` int(10) unsigned NOT NULL, + `url` char(255) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY (`url`), + FOREIGN KEY (`user_id`) references users(id) +); + +CREATE TABLE IF NOT EXISTS `wl_users` ( + `user_id` int(10) unsigned NOT NULL, + `wl_user_id` int(10) unsigned NOT NULL, + PRIMARY KEY (`user_id`,`wl_user_id`) +); diff --git a/src/main/resources/db/specific/h2/V1.10__favorites_user_uri.sql b/src/main/resources/db/specific/h2/V1.10__favorites_user_uri.sql new file mode 100644 index 00000000..8f382398 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.10__favorites_user_uri.sql @@ -0,0 +1,3 @@ +ALTER TABLE favorites ADD COLUMN user_uri char(255) DEFAULT NULL; +UPDATE favorites SET user_uri='' WHERE user_uri IS NULL; +ALTER TABLE favorites MODIFY COLUMN user_uri char(255) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.11__increase pm timestamp precision.sql b/src/main/resources/db/specific/h2/V1.11__increase pm timestamp precision.sql new file mode 100644 index 00000000..e83eb621 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.11__increase pm timestamp precision.sql @@ -0,0 +1 @@ +ALTER TABLE pm MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.16__last seen.sql b/src/main/resources/db/specific/h2/V1.16__last seen.sql new file mode 100644 index 00000000..52ca4e90 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.16__last seen.sql @@ -0,0 +1,2 @@ +ALTER TABLE users ADD COLUMN last_seen timestamp(6) NULL; +UPDATE users SET last_seen=lastmessage; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.18__increase messages and replies timestamp precision.sql b/src/main/resources/db/specific/h2/V1.18__increase messages and replies timestamp precision.sql new file mode 100644 index 00000000..5b298c46 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.18__increase messages and replies timestamp precision.sql @@ -0,0 +1,5 @@ +ALTER TABLE replies MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages MODIFY COLUMN updated timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE users MODIFY COLUMN lastmessage timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/src/main/resources/db/specific/h2/V1.19__messages_properties.sql b/src/main/resources/db/specific/h2/V1.19__messages_properties.sql new file mode 100644 index 00000000..2bb3baf2 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.19__messages_properties.sql @@ -0,0 +1,6 @@ +CREATE TABLE messages_properties ( + message_id int(10) unsigned NOT NULL, + property_key varchar(255) NOT NULL, + property_value mediumtext NOT NULL, + UNIQUE KEY message_key(message_id, property_key) +) \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.20__reply id in messages_properties.sql b/src/main/resources/db/specific/h2/V1.20__reply id in messages_properties.sql new file mode 100644 index 00000000..2ca5e018 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.20__reply id in messages_properties.sql @@ -0,0 +1 @@ +ALTER TABLE messages_properties ADD COLUMN reply_id smallint(5) unsigned NOT NULL \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.21__recreate messages_properties with correct index.sql b/src/main/resources/db/specific/h2/V1.21__recreate messages_properties with correct index.sql new file mode 100644 index 00000000..685318af --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.21__recreate messages_properties with correct index.sql @@ -0,0 +1,8 @@ +DROP TABLE messages_properties; +CREATE TABLE messages_properties ( + message_id int(10) unsigned NOT NULL, + reply_id smallint(5) unsigned NOT NULL, + property_key varchar(255) NOT NULL, + property_value mediumtext NOT NULL, + UNIQUE KEY message_key(message_id, reply_id, property_key) +) \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.22__increase updated_at precision.sql b/src/main/resources/db/specific/h2/V1.22__increase updated_at precision.sql new file mode 100644 index 00000000..22034ea2 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.22__increase updated_at precision.sql @@ -0,0 +1,2 @@ +ALTER TABLE replies MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.2__Drop telegram_chats.sql b/src/main/resources/db/specific/h2/V1.2__Drop telegram_chats.sql new file mode 100644 index 00000000..c8faee0d --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.2__Drop telegram_chats.sql @@ -0,0 +1,2 @@ +INSERT INTO telegram(tg_id, tg_name, loginhash) SELECT chat_id AS tg_id, 'Anonymous', UUID() FROM telegram_chats; +DROP TABLE telegram_chats; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.3__Nullable user_id column in auth table.sql b/src/main/resources/db/specific/h2/V1.3__Nullable user_id column in auth table.sql new file mode 100644 index 00000000..ced85ade --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.3__Nullable user_id column in auth table.sql @@ -0,0 +1 @@ +ALTER TABLE auth MODIFY COLUMN user_id int(10) unsigned NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.4__ActivityPub followers.sql b/src/main/resources/db/specific/h2/V1.4__ActivityPub followers.sql new file mode 100644 index 00000000..16b39f62 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.4__ActivityPub followers.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS `followers` ( + `user_id` int(10) unsigned DEFAULT NULL, + `acct` char(64) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY `acct` (`acct`), + foreign key (user_id) references users(id) +); \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.5__Drop acct index.sql b/src/main/resources/db/specific/h2/V1.5__Drop acct index.sql new file mode 100644 index 00000000..58757d88 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.5__Drop acct index.sql @@ -0,0 +1,6 @@ +ALTER TABLE followers ADD COLUMN `acct_migr` char(64) NOT NULL; +UPDATE followers SET `acct_migr` = `acct`; +ALTER TABLE followers DROP COLUMN `acct`; +ALTER TABLE followers ADD COLUMN `acct` char(64) NOT NULL; +UPDATE followers SET `acct` = `acct_migr`; +ALTER TABLE followers DROP COLUMN `acct_migr`; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.6__user_uri.sql b/src/main/resources/db/specific/h2/V1.6__user_uri.sql new file mode 100644 index 00000000..c302907c --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.6__user_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN user_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.7__reply_uri.sql b/src/main/resources/db/specific/h2/V1.7__reply_uri.sql new file mode 100644 index 00000000..9ec35485 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.7__reply_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN reply_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/h2/V1.8__html reply.sql b/src/main/resources/db/specific/h2/V1.8__html reply.sql new file mode 100644 index 00000000..9f939971 --- /dev/null +++ b/src/main/resources/db/specific/h2/V1.8__html reply.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN html tinyint(4) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.10__favorites_user_uri.sql b/src/main/resources/db/specific/mariadb/V1.10__favorites_user_uri.sql new file mode 100644 index 00000000..8f382398 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.10__favorites_user_uri.sql @@ -0,0 +1,3 @@ +ALTER TABLE favorites ADD COLUMN user_uri char(255) DEFAULT NULL; +UPDATE favorites SET user_uri='' WHERE user_uri IS NULL; +ALTER TABLE favorites MODIFY COLUMN user_uri char(255) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.11__increase pm timestamp precision.sql b/src/main/resources/db/specific/mariadb/V1.11__increase pm timestamp precision.sql new file mode 100644 index 00000000..e83eb621 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.11__increase pm timestamp precision.sql @@ -0,0 +1 @@ +ALTER TABLE pm MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.16__last seen.sql b/src/main/resources/db/specific/mariadb/V1.16__last seen.sql new file mode 100644 index 00000000..52ca4e90 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.16__last seen.sql @@ -0,0 +1,2 @@ +ALTER TABLE users ADD COLUMN last_seen timestamp(6) NULL; +UPDATE users SET last_seen=lastmessage; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.18__increase messages and replies timestamp precision.sql b/src/main/resources/db/specific/mariadb/V1.18__increase messages and replies timestamp precision.sql new file mode 100644 index 00000000..5b298c46 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.18__increase messages and replies timestamp precision.sql @@ -0,0 +1,5 @@ +ALTER TABLE replies MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages MODIFY COLUMN ts timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages MODIFY COLUMN updated timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE users MODIFY COLUMN lastmessage timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/src/main/resources/db/specific/mariadb/V1.19__messages_properties.sql b/src/main/resources/db/specific/mariadb/V1.19__messages_properties.sql new file mode 100644 index 00000000..2bb3baf2 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.19__messages_properties.sql @@ -0,0 +1,6 @@ +CREATE TABLE messages_properties ( + message_id int(10) unsigned NOT NULL, + property_key varchar(255) NOT NULL, + property_value mediumtext NOT NULL, + UNIQUE KEY message_key(message_id, property_key) +) \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.20__reply id in messages_properties.sql b/src/main/resources/db/specific/mariadb/V1.20__reply id in messages_properties.sql new file mode 100644 index 00000000..2ca5e018 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.20__reply id in messages_properties.sql @@ -0,0 +1 @@ +ALTER TABLE messages_properties ADD COLUMN reply_id smallint(5) unsigned NOT NULL \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.21__recreate messages_properties with correct index.sql b/src/main/resources/db/specific/mariadb/V1.21__recreate messages_properties with correct index.sql new file mode 100644 index 00000000..685318af --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.21__recreate messages_properties with correct index.sql @@ -0,0 +1,8 @@ +DROP TABLE messages_properties; +CREATE TABLE messages_properties ( + message_id int(10) unsigned NOT NULL, + reply_id smallint(5) unsigned NOT NULL, + property_key varchar(255) NOT NULL, + property_value mediumtext NOT NULL, + UNIQUE KEY message_key(message_id, reply_id, property_key) +) \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.22__increase updated_at precision.sql b/src/main/resources/db/specific/mariadb/V1.22__increase updated_at precision.sql new file mode 100644 index 00000000..22034ea2 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.22__increase updated_at precision.sql @@ -0,0 +1,2 @@ +ALTER TABLE replies MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE messages_txt MODIFY COLUMN updated_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.2__Drop telegram_chats.sql b/src/main/resources/db/specific/mariadb/V1.2__Drop telegram_chats.sql new file mode 100644 index 00000000..c8faee0d --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.2__Drop telegram_chats.sql @@ -0,0 +1,2 @@ +INSERT INTO telegram(tg_id, tg_name, loginhash) SELECT chat_id AS tg_id, 'Anonymous', UUID() FROM telegram_chats; +DROP TABLE telegram_chats; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.3__Nullable user_id column in auth table.sql b/src/main/resources/db/specific/mariadb/V1.3__Nullable user_id column in auth table.sql new file mode 100644 index 00000000..ced85ade --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.3__Nullable user_id column in auth table.sql @@ -0,0 +1 @@ +ALTER TABLE auth MODIFY COLUMN user_id int(10) unsigned NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.4__ActivityPub followers.sql b/src/main/resources/db/specific/mariadb/V1.4__ActivityPub followers.sql new file mode 100644 index 00000000..16b39f62 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.4__ActivityPub followers.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS `followers` ( + `user_id` int(10) unsigned DEFAULT NULL, + `acct` char(64) NOT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY `acct` (`acct`), + foreign key (user_id) references users(id) +); \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.5__Drop acct index.sql b/src/main/resources/db/specific/mariadb/V1.5__Drop acct index.sql new file mode 100644 index 00000000..58757d88 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.5__Drop acct index.sql @@ -0,0 +1,6 @@ +ALTER TABLE followers ADD COLUMN `acct_migr` char(64) NOT NULL; +UPDATE followers SET `acct_migr` = `acct`; +ALTER TABLE followers DROP COLUMN `acct`; +ALTER TABLE followers ADD COLUMN `acct` char(64) NOT NULL; +UPDATE followers SET `acct` = `acct_migr`; +ALTER TABLE followers DROP COLUMN `acct_migr`; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.6__user_uri.sql b/src/main/resources/db/specific/mariadb/V1.6__user_uri.sql new file mode 100644 index 00000000..c302907c --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.6__user_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN user_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.7__reply_uri.sql b/src/main/resources/db/specific/mariadb/V1.7__reply_uri.sql new file mode 100644 index 00000000..9ec35485 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.7__reply_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN reply_uri char(255) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/mariadb/V1.8__html reply.sql b/src/main/resources/db/specific/mariadb/V1.8__html reply.sql new file mode 100644 index 00000000..9f939971 --- /dev/null +++ b/src/main/resources/db/specific/mariadb/V1.8__html reply.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN html tinyint(4) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.10__favorites_user_uri.sql b/src/main/resources/db/specific/postgresql/V1.10__favorites_user_uri.sql new file mode 100644 index 00000000..90e512bc --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.10__favorites_user_uri.sql @@ -0,0 +1,3 @@ +ALTER TABLE favorites ADD COLUMN user_uri character varying (255) DEFAULT NULL; +UPDATE favorites SET user_uri='' WHERE user_uri IS NULL; +ALTER TABLE favorites ALTER COLUMN user_uri SET DEFAULT ''; \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.11__increase pm timestamp precision.sql b/src/main/resources/db/specific/postgresql/V1.11__increase pm timestamp precision.sql new file mode 100644 index 00000000..c5a8e528 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.11__increase pm timestamp precision.sql @@ -0,0 +1 @@ +-- changes are not needed \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.16__last seen.sql b/src/main/resources/db/specific/postgresql/V1.16__last seen.sql new file mode 100644 index 00000000..9543ca14 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.16__last seen.sql @@ -0,0 +1,2 @@ +ALTER TABLE users ADD COLUMN last_seen timestamp with time zone NULL; +UPDATE users SET last_seen=TO_TIMESTAMP(lastmessage::double precision / 1000); diff --git a/src/main/resources/db/specific/postgresql/V1.18__increase messages and replies timestamp precision copy.sql b/src/main/resources/db/specific/postgresql/V1.18__increase messages and replies timestamp precision copy.sql new file mode 100644 index 00000000..99b7f5d5 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.18__increase messages and replies timestamp precision copy.sql @@ -0,0 +1,3 @@ +ALTER TABLE users DROP COLUMN lastmessage; +ALTER TABLE users ADD COLUMN lastmessage timestamp with time zone; +UPDATE users SET lastmessage=last_seen; diff --git a/src/main/resources/db/specific/postgresql/V1.19__messages_properties.sql b/src/main/resources/db/specific/postgresql/V1.19__messages_properties.sql new file mode 100644 index 00000000..f3b72f66 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.19__messages_properties.sql @@ -0,0 +1,6 @@ +CREATE TABLE messages_properties ( + message_id bigint NOT NULL, + property_key character varying(255) NOT NULL, + property_value text NOT NULL, + CONSTRAINT message_key UNIQUE(message_id, property_key) +) diff --git a/src/main/resources/db/specific/postgresql/V1.20__reply id in messages_properties.sql b/src/main/resources/db/specific/postgresql/V1.20__reply id in messages_properties.sql new file mode 100644 index 00000000..53d4f169 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.20__reply id in messages_properties.sql @@ -0,0 +1 @@ +ALTER TABLE messages_properties ADD COLUMN reply_id smallint NOT NULL diff --git a/src/main/resources/db/specific/postgresql/V1.21__recreate messages_properties with correct index.sql b/src/main/resources/db/specific/postgresql/V1.21__recreate messages_properties with correct index.sql new file mode 100644 index 00000000..eadc6f56 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.21__recreate messages_properties with correct index.sql @@ -0,0 +1,8 @@ +DROP TABLE messages_properties; +CREATE TABLE messages_properties ( + message_id bigint NOT NULL, + reply_id smallint NOT NULL, + property_key character varying(255) NOT NULL, + property_value text NOT NULL, + CONSTRAINT message_properties_key UNIQUE(message_id, reply_id, property_key) +) diff --git a/src/main/resources/db/specific/postgresql/V1.22__increase updated_at precision.sql b/src/main/resources/db/specific/postgresql/V1.22__increase updated_at precision.sql new file mode 100644 index 00000000..dfb8628c --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.22__increase updated_at precision.sql @@ -0,0 +1 @@ +-- changes are not needed diff --git a/src/main/resources/db/specific/postgresql/V1.2__Drop telegram_chats.sql b/src/main/resources/db/specific/postgresql/V1.2__Drop telegram_chats.sql new file mode 100644 index 00000000..00e7fdbe --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.2__Drop telegram_chats.sql @@ -0,0 +1,3 @@ +CREATE EXTENSION IF NOT EXISTS "pgcrypto"; +INSERT INTO telegram(tg_id, tg_name, loginhash) SELECT chat_id AS tg_id, 'Anonymous', gen_random_uuid() FROM telegram_chats; +DROP TABLE telegram_chats; \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.3__Nullable user_id column in auth table.sql b/src/main/resources/db/specific/postgresql/V1.3__Nullable user_id column in auth table.sql new file mode 100644 index 00000000..eea8c2a6 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.3__Nullable user_id column in auth table.sql @@ -0,0 +1 @@ +ALTER TABLE auth ALTER COLUMN user_id DROP NOT NULL; \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.4__ActivityPub followers.sql b/src/main/resources/db/specific/postgresql/V1.4__ActivityPub followers.sql new file mode 100644 index 00000000..fd75b87c --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.4__ActivityPub followers.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS followers ( + user_id bigint REFERENCES users(id), + acct character varying(64) NOT NULL UNIQUE, + ts timestamp with time zone DEFAULT now() NOT NULL +); \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.5__Drop acct index.sql b/src/main/resources/db/specific/postgresql/V1.5__Drop acct index.sql new file mode 100644 index 00000000..d4f1c6ef --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.5__Drop acct index.sql @@ -0,0 +1,6 @@ +ALTER TABLE followers ADD COLUMN acct_migr character varying(64) NOT NULL; +UPDATE followers SET acct_migr = acct; +ALTER TABLE followers DROP COLUMN acct; +ALTER TABLE followers ADD COLUMN acct character varying(64) NOT NULL; +UPDATE followers SET acct = acct_migr; +ALTER TABLE followers DROP COLUMN acct_migr; \ No newline at end of file diff --git a/src/main/resources/db/specific/postgresql/V1.6__user_uri.sql b/src/main/resources/db/specific/postgresql/V1.6__user_uri.sql new file mode 100644 index 00000000..c067810a --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.6__user_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN user_uri character varying(255) DEFAULT NULL; diff --git a/src/main/resources/db/specific/postgresql/V1.7__reply_uri.sql b/src/main/resources/db/specific/postgresql/V1.7__reply_uri.sql new file mode 100644 index 00000000..09dcfb56 --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.7__reply_uri.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN reply_uri character varying(255) DEFAULT NULL; diff --git a/src/main/resources/db/specific/postgresql/V1.8__html reply.sql b/src/main/resources/db/specific/postgresql/V1.8__html reply.sql new file mode 100644 index 00000000..88bcc04c --- /dev/null +++ b/src/main/resources/db/specific/postgresql/V1.8__html reply.sql @@ -0,0 +1 @@ +ALTER TABLE replies ADD COLUMN html smallint NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/pg_schema_wip b/src/main/resources/pg_schema_wip deleted file mode 100644 index 61178495..00000000 --- a/src/main/resources/pg_schema_wip +++ /dev/null @@ -1,1539 +0,0 @@ --- --- PostgreSQL database dump --- - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = off; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET escape_string_warning = off; - --- --- Name: juick; Type: SCHEMA; Schema: -; Owner: juick --- - -CREATE SCHEMA juick; - - -ALTER SCHEMA juick OWNER TO juick; - --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -SET search_path = public, pg_catalog; - --- --- Name: auth_protocol; Type: TYPE; Schema: public; Owner: juick --- - -CREATE TYPE auth_protocol AS ENUM ( - 'xmpp', - 'email', - 'sms' -); - - -ALTER TYPE auth_protocol OWNER TO juick; - --- --- Name: messages_attach; Type: TYPE; Schema: public; Owner: juick --- - -CREATE TYPE messages_attach AS ENUM ( - 'jpg', - 'mp4', - 'png' -); - - -ALTER TYPE messages_attach OWNER TO juick; - --- --- Name: messages_lang; Type: TYPE; Schema: public; Owner: juick --- - -CREATE TYPE messages_lang AS ENUM ( - 'en', - 'ru', - 'fr', - 'fa', - '__' -); - - -ALTER TYPE messages_lang OWNER TO juick; - --- --- Name: replies_attach; Type: TYPE; Schema: public; Owner: juick --- - -CREATE TYPE replies_attach AS ENUM ( - 'jpg', - 'mp4', - 'png' -); - - -ALTER TYPE replies_attach OWNER TO juick; - --- --- Name: users_lang; Type: TYPE; Schema: public; Owner: juick --- - -CREATE TYPE users_lang AS ENUM ( - 'en', - 'ru', - 'fr', - 'fa', - '__' -); - - -ALTER TYPE users_lang OWNER TO juick; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: ads_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE ads_messages ( - message_id bigint NOT NULL -); - - -ALTER TABLE ads_messages OWNER TO juick; - --- --- Name: ads_messages_log; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE ads_messages_log ( - user_id bigint NOT NULL, - message_id bigint NOT NULL, - ts bigint DEFAULT 0::bigint NOT NULL -); - - -ALTER TABLE ads_messages_log OWNER TO juick; - --- --- Name: android; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE android ( - user_id bigint NOT NULL, - regid character varying(255) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE android OWNER TO juick; - --- --- Name: auth; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE auth ( - user_id bigint NOT NULL, - protocol auth_protocol NOT NULL, - account character varying(64) NOT NULL, - authcode character varying(8) NOT NULL -); - - -ALTER TABLE auth OWNER TO juick; - --- --- Name: bl_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE bl_tags ( - user_id bigint NOT NULL, - tag_id bigint NOT NULL -); - - -ALTER TABLE bl_tags OWNER TO juick; - --- --- Name: bl_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE bl_users ( - user_id bigint NOT NULL, - bl_user_id bigint NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE bl_users OWNER TO juick; - --- --- Name: captcha; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE captcha ( - jid character varying(64) NOT NULL, - hash character varying(16) NOT NULL, - confirmed smallint NOT NULL -); - - -ALTER TABLE captcha OWNER TO juick; - --- --- Name: captchaimg; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE captchaimg ( - id character varying(16) NOT NULL, - txt character varying(6) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - ip character varying(16) NOT NULL -); - - -ALTER TABLE captchaimg OWNER TO juick; - --- --- Name: emails; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE emails ( - user_id bigint NOT NULL, - email character varying(64) NOT NULL, - subscr_hour smallint -); - - -ALTER TABLE emails OWNER TO juick; - --- --- Name: facebook; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE facebook ( - user_id bigint, - fb_id numeric NOT NULL, - loginhash character varying(36), - access_token character varying(255), - ts timestamp with time zone DEFAULT now() NOT NULL, - fb_name character varying(64) NOT NULL, - fb_link character varying(255) NOT NULL, - crosspost boolean DEFAULT true NOT NULL -); - - -ALTER TABLE facebook OWNER TO juick; - --- --- Name: favorites; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE favorites ( - user_id bigint NOT NULL, - message_id bigint NOT NULL, - ts timestamp with time zone -); - - -ALTER TABLE favorites OWNER TO juick; - --- --- Name: friends_facebook; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE friends_facebook ( - user_id bigint NOT NULL, - friend_id numeric NOT NULL -); - - -ALTER TABLE friends_facebook OWNER TO juick; - --- --- Name: images; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE images ( - mid bigint NOT NULL, - rid bigint NOT NULL, - thumb bigint NOT NULL, - small bigint NOT NULL, - medium bigint NOT NULL, - height bigint NOT NULL, - width bigint NOT NULL -); - - -ALTER TABLE images OWNER TO juick; - --- --- Name: ios; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE ios ( - user_id bigint NOT NULL, - token character varying(64) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE ios OWNER TO juick; - --- --- Name: jids; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE jids ( - user_id bigint, - jid character varying(64) NOT NULL, - active smallint DEFAULT 0 NOT NULL, - loginhash character varying(36), - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE jids OWNER TO juick; - --- --- Name: logins; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE logins ( - user_id bigint NOT NULL, - hash character varying(16) NOT NULL -); - - -ALTER TABLE logins OWNER TO juick; - --- --- Name: mail; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE mail ( - user_id bigint NOT NULL, - hash character varying(16) NOT NULL -); - - -ALTER TABLE mail OWNER TO juick; - --- --- Name: meon; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE meon ( - id bigint NOT NULL, - user_id bigint NOT NULL, - link character varying(255) NOT NULL, - name character varying(32) NOT NULL, - ico smallint -); - - -ALTER TABLE meon OWNER TO juick; - --- --- Name: meon_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE meon_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE meon_id_seq OWNER TO juick; - --- --- Name: meon_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE meon_id_seq OWNED BY meon.id; - - --- --- Name: messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE messages ( - message_id bigint NOT NULL, - user_id bigint NOT NULL, - lang messages_lang DEFAULT '__'::messages_lang NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - replies smallint DEFAULT 0::smallint NOT NULL, - maxreplyid smallint DEFAULT 0::smallint NOT NULL, - privacy smallint DEFAULT 1::smallint NOT NULL, - readonly boolean DEFAULT false NOT NULL, - attach messages_attach, - place_id bigint, - lat numeric(10,7), - lon numeric(10,7), - popular smallint DEFAULT 0::smallint NOT NULL, - hidden smallint DEFAULT 0::smallint NOT NULL, - likes smallint DEFAULT 0::smallint NOT NULL -); - - -ALTER TABLE messages OWNER TO juick; - --- --- Name: messages_access; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE messages_access ( - message_id bigint NOT NULL, - user_id bigint NOT NULL -); - - -ALTER TABLE messages_access OWNER TO juick; - --- --- Name: messages_message_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE messages_message_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE messages_message_id_seq OWNER TO juick; - --- --- Name: messages_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE messages_message_id_seq OWNED BY messages.message_id; - - --- --- Name: messages_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE messages_tags ( - message_id bigint NOT NULL, - tag_id bigint NOT NULL -); - - -ALTER TABLE messages_tags OWNER TO juick; - --- --- Name: messages_txt; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE messages_txt ( - message_id bigint NOT NULL, - tags text, - repliesby text, - txt text NOT NULL -); - - -ALTER TABLE messages_txt OWNER TO juick; - --- --- Name: messages_votes; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE messages_votes ( - message_id bigint NOT NULL, - user_id bigint NOT NULL, - vote smallint DEFAULT 1::smallint NOT NULL -); - - -ALTER TABLE messages_votes OWNER TO juick; - --- --- Name: places; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE places ( - place_id bigint NOT NULL, - lat numeric(10,7) NOT NULL, - lon numeric(10,7) NOT NULL, - name character varying(64) NOT NULL, - descr character varying(255), - url character varying(128), - user_id bigint NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE places OWNER TO juick; - --- --- Name: places_place_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE places_place_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE places_place_id_seq OWNER TO juick; - --- --- Name: places_place_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE places_place_id_seq OWNED BY places.place_id; - - --- --- Name: places_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE places_tags ( - place_id bigint NOT NULL, - tag_id bigint NOT NULL -); - - -ALTER TABLE places_tags OWNER TO juick; - --- --- Name: pm; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE pm ( - user_id bigint NOT NULL, - user_id_to bigint NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - txt text NOT NULL -); - - -ALTER TABLE pm OWNER TO juick; - --- --- Name: pm_inroster; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE pm_inroster ( - user_id bigint NOT NULL, - jid character varying(64) NOT NULL -); - - -ALTER TABLE pm_inroster OWNER TO juick; - --- --- Name: pm_streams; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE pm_streams ( - user_id bigint NOT NULL, - user_id_to bigint NOT NULL, - lastmessage timestamp with time zone NOT NULL, - lastview timestamp with time zone, - unread smallint DEFAULT 0::smallint NOT NULL -); - - -ALTER TABLE pm_streams OWNER TO juick; - --- --- Name: presence; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE presence ( - user_id bigint NOT NULL, - jid character varying(64), - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE presence OWNER TO juick; - --- --- Name: reader_links; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE reader_links ( - link_id bigint NOT NULL, - rss_id bigint NOT NULL, - url character varying(255) NOT NULL, - title character varying(255) NOT NULL, - ts timestamp with time zone NOT NULL -); - - -ALTER TABLE reader_links OWNER TO juick; - --- --- Name: reader_links_link_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE reader_links_link_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE reader_links_link_id_seq OWNER TO juick; - --- --- Name: reader_links_link_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE reader_links_link_id_seq OWNED BY reader_links.link_id; - - --- --- Name: reader_rss; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE reader_rss ( - rss_id bigint NOT NULL, - url character varying(255) NOT NULL, - lastcheck timestamp with time zone NOT NULL -); - - -ALTER TABLE reader_rss OWNER TO juick; - --- --- Name: reader_rss_rss_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE reader_rss_rss_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE reader_rss_rss_id_seq OWNER TO juick; - --- --- Name: reader_rss_rss_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE reader_rss_rss_id_seq OWNED BY reader_rss.rss_id; - - --- --- Name: replies; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE replies ( - message_id bigint NOT NULL, - reply_id smallint NOT NULL, - user_id bigint NOT NULL, - replyto smallint DEFAULT 0::smallint NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - attach replies_attach, - txt text NOT NULL -); - - -ALTER TABLE replies OWNER TO juick; - --- --- Name: sphinx; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE sphinx ( - counter_id smallint NOT NULL, - max_id bigint NOT NULL -); - - -ALTER TABLE sphinx OWNER TO juick; - --- --- Name: subscr_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE subscr_messages ( - message_id bigint NOT NULL, - suser_id bigint NOT NULL -); - - -ALTER TABLE subscr_messages OWNER TO juick; - --- --- Name: subscr_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE subscr_tags ( - tag_id bigint NOT NULL, - suser_id bigint NOT NULL, - jid character varying(64) NOT NULL, - active boolean NOT NULL -); - - -ALTER TABLE subscr_tags OWNER TO juick; - --- --- Name: subscr_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE subscr_users ( - user_id bigint NOT NULL, - suser_id bigint NOT NULL, - jid character varying(64), - active boolean NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE subscr_users OWNER TO juick; - --- --- Name: tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE tags ( - tag_id bigint NOT NULL, - synonym_id bigint, - name character varying(70), - top boolean DEFAULT false NOT NULL, - noindex boolean DEFAULT false NOT NULL, - stat_messages bigint DEFAULT 0::bigint NOT NULL, - stat_users smallint DEFAULT 0::smallint NOT NULL -); - - -ALTER TABLE tags OWNER TO juick; - --- --- Name: tags_ignore; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE tags_ignore ( - tag_id bigint NOT NULL -); - - -ALTER TABLE tags_ignore OWNER TO juick; - --- --- Name: tags_synonyms; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE tags_synonyms ( - name character varying(64) NOT NULL, - changeto character varying(64) NOT NULL -); - - -ALTER TABLE tags_synonyms OWNER TO juick; - --- --- Name: tags_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE tags_tag_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE tags_tag_id_seq OWNER TO juick; - --- --- Name: tags_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE tags_tag_id_seq OWNED BY tags.tag_id; - - --- --- Name: telegram; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE telegram ( - user_id bigint, - tg_id numeric NOT NULL, - tg_name character varying(64) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - loginhash character varying(36) -); - - -ALTER TABLE telegram OWNER TO juick; - --- --- Name: telegram_chats; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE telegram_chats ( - chat_id numeric -); - - -ALTER TABLE telegram_chats OWNER TO juick; - --- --- Name: top_ignore_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE top_ignore_messages ( - message_id bigint NOT NULL -); - - -ALTER TABLE top_ignore_messages OWNER TO juick; - --- --- Name: top_ignore_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE top_ignore_tags ( - tag_id bigint NOT NULL -); - - -ALTER TABLE top_ignore_tags OWNER TO juick; - --- --- Name: top_ignore_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE top_ignore_users ( - user_id bigint NOT NULL -); - - -ALTER TABLE top_ignore_users OWNER TO juick; - --- --- Name: twitter; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE twitter ( - user_id bigint NOT NULL, - access_token character varying(64) NOT NULL, - access_token_secret character varying(64) NOT NULL, - uname character varying(64) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - crosspost boolean DEFAULT true NOT NULL -); - - -ALTER TABLE twitter OWNER TO juick; - --- --- Name: useroptions; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE useroptions ( - user_id bigint NOT NULL, - jnotify boolean DEFAULT true NOT NULL, - subscr_active boolean DEFAULT true NOT NULL, - off_ts timestamp with time zone, - xmppxhtml boolean DEFAULT false NOT NULL, - subscr_notify boolean DEFAULT true NOT NULL, - recommendations boolean DEFAULT true NOT NULL, - privacy_view boolean DEFAULT true NOT NULL, - privacy_reply boolean DEFAULT true NOT NULL, - privacy_pm boolean DEFAULT true NOT NULL, - repliesview boolean DEFAULT false NOT NULL -); - - -ALTER TABLE useroptions OWNER TO juick; - --- --- Name: users; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE users ( - id bigint NOT NULL, - nick character varying(64) NOT NULL, - passw character varying(32) NOT NULL, - lang users_lang DEFAULT '__'::users_lang NOT NULL, - banned smallint DEFAULT 0::smallint NOT NULL, - lastmessage bigint DEFAULT 0::bigint NOT NULL, - lastpm bigint DEFAULT 0::bigint NOT NULL, - lastphoto bigint DEFAULT 0::bigint NOT NULL, - karma smallint DEFAULT 0::smallint NOT NULL -); - - -ALTER TABLE users OWNER TO juick; - --- --- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: juick --- - -CREATE SEQUENCE users_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE users_id_seq OWNER TO juick; - --- --- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick --- - -ALTER SEQUENCE users_id_seq OWNED BY users.id; - - --- --- Name: users_refs; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE users_refs ( - user_id bigint NOT NULL, - ref bigint NOT NULL -); - - -ALTER TABLE users_refs OWNER TO juick; - --- --- Name: users_subscr; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE users_subscr ( - user_id bigint NOT NULL, - cnt smallint DEFAULT 0::smallint NOT NULL -); - - -ALTER TABLE users_subscr OWNER TO juick; - --- --- Name: usersinfo; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE usersinfo ( - user_id bigint NOT NULL, - jid character varying(32), - fullname character varying(32), - country character varying(32), - url character varying(64), - gender character varying(32), - bday character varying(10), - descr text -); - - -ALTER TABLE usersinfo OWNER TO juick; - --- --- Name: version; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE version ( - version numeric NOT NULL -); - - -ALTER TABLE version OWNER TO juick; - --- --- Name: vk; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE vk ( - user_id bigint, - vk_id numeric NOT NULL, - loginhash character varying(36), - access_token character varying(128) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL, - vk_name character varying(64) NOT NULL, - vk_link character varying(64) NOT NULL, - crosspost smallint DEFAULT 1::smallint NOT NULL -); - - -ALTER TABLE vk OWNER TO juick; - --- --- Name: winphone; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE winphone ( - user_id bigint NOT NULL, - url character varying(255) NOT NULL, - ts timestamp with time zone DEFAULT now() NOT NULL -); - - -ALTER TABLE winphone OWNER TO juick; - --- --- Name: wl_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: --- - -CREATE TABLE wl_users ( - user_id bigint NOT NULL, - wl_user_id bigint NOT NULL -); - - -ALTER TABLE wl_users OWNER TO juick; - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY meon ALTER COLUMN id SET DEFAULT nextval('meon_id_seq'::regclass); - - --- --- Name: message_id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY messages ALTER COLUMN message_id SET DEFAULT nextval('messages_message_id_seq'::regclass); - - --- --- Name: place_id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY places ALTER COLUMN place_id SET DEFAULT nextval('places_place_id_seq'::regclass); - - --- --- Name: link_id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY reader_links ALTER COLUMN link_id SET DEFAULT nextval('reader_links_link_id_seq'::regclass); - - --- --- Name: rss_id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY reader_rss ALTER COLUMN rss_id SET DEFAULT nextval('reader_rss_rss_id_seq'::regclass); - - --- --- Name: tag_id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY tags ALTER COLUMN tag_id SET DEFAULT nextval('tags_tag_id_seq'::regclass); - - --- --- Name: id; Type: DEFAULT; Schema: public; Owner: juick --- - -ALTER TABLE ONLY users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass); - - --- --- Name: idx_20438_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY images - ADD CONSTRAINT idx_20438_primary PRIMARY KEY (mid, rid); - - --- --- Name: idx_20453_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY mail - ADD CONSTRAINT idx_20453_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20458_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY meon - ADD CONSTRAINT idx_20458_primary PRIMARY KEY (id); - - --- --- Name: idx_20483_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY messages - ADD CONSTRAINT idx_20483_primary PRIMARY KEY (message_id); - - --- --- Name: idx_20502_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY messages_txt - ADD CONSTRAINT idx_20502_primary PRIMARY KEY (message_id); - - --- --- Name: idx_20514_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY places - ADD CONSTRAINT idx_20514_primary PRIMARY KEY (place_id); - - --- --- Name: idx_20542_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY reader_links - ADD CONSTRAINT idx_20542_primary PRIMARY KEY (link_id); - - --- --- Name: idx_20551_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY reader_rss - ADD CONSTRAINT idx_20551_primary PRIMARY KEY (rss_id); - - --- --- Name: idx_20571_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY sphinx - ADD CONSTRAINT idx_20571_primary PRIMARY KEY (counter_id); - - --- --- Name: idx_20586_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY tags - ADD CONSTRAINT idx_20586_primary PRIMARY KEY (tag_id); - - --- --- Name: idx_20616_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY top_ignore_tags - ADD CONSTRAINT idx_20616_primary PRIMARY KEY (tag_id); - - --- --- Name: idx_20619_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY top_ignore_users - ADD CONSTRAINT idx_20619_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20622_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY twitter - ADD CONSTRAINT idx_20622_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20627_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY useroptions - ADD CONSTRAINT idx_20627_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20653_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY users - ADD CONSTRAINT idx_20653_primary PRIMARY KEY (id); - - --- --- Name: idx_20663_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY usersinfo - ADD CONSTRAINT idx_20663_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20672_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY users_subscr - ADD CONSTRAINT idx_20672_primary PRIMARY KEY (user_id); - - --- --- Name: idx_20694_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY wl_users - ADD CONSTRAINT idx_20694_primary PRIMARY KEY (user_id, wl_user_id); - - --- --- Name: idx_29418_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: --- - -ALTER TABLE ONLY bl_users - ADD CONSTRAINT idx_29418_primary PRIMARY KEY (user_id, bl_user_id); - - --- --- Name: idx_20390_regid; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20390_regid ON android USING btree (regid); - - --- --- Name: idx_20390_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20390_user_id ON android USING btree (user_id); - - --- --- Name: idx_20404_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20404_tag_id ON bl_tags USING btree (tag_id); - - --- --- Name: idx_20404_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20404_user_id ON bl_tags USING btree (user_id); - - --- --- Name: idx_20418_email; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20418_email ON emails USING btree (email); - - --- --- Name: idx_20421_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20421_user_id ON facebook USING btree (user_id); - - --- --- Name: idx_20432_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20432_user_id ON friends_facebook USING btree (user_id, friend_id); - - --- --- Name: idx_20441_token; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20441_token ON ios USING btree (token); - - --- --- Name: idx_20441_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20441_user_id ON ios USING btree (user_id); - - --- --- Name: idx_20445_jid; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20445_jid ON jids USING btree (jid); - - --- --- Name: idx_20445_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20445_user_id ON jids USING btree (user_id); - - --- --- Name: idx_20450_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20450_user_id ON logins USING btree (user_id); - - --- --- Name: idx_20483_attach; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_attach ON messages USING btree (attach); - - --- --- Name: idx_20483_hidden; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_hidden ON messages USING btree (hidden); - - --- --- Name: idx_20483_place_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_place_id ON messages USING btree (place_id); - - --- --- Name: idx_20483_popular; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_popular ON messages USING btree (popular); - - --- --- Name: idx_20483_ts; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_ts ON messages USING btree (ts); - - --- --- Name: idx_20483_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20483_user_id ON messages USING btree (user_id); - - --- --- Name: idx_20496_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20496_message_id ON messages_access USING btree (message_id); - - --- --- Name: idx_20499_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20499_message_id ON messages_tags USING btree (message_id); - - --- --- Name: idx_20499_message_id_2; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20499_message_id_2 ON messages_tags USING btree (message_id, tag_id); - - --- --- Name: idx_20499_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20499_tag_id ON messages_tags USING btree (tag_id); - - --- --- Name: idx_20508_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20508_message_id ON messages_votes USING btree (message_id, user_id); - - --- --- Name: idx_20529_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20529_user_id ON pm_inroster USING btree (user_id); - - --- --- Name: idx_20529_user_id_2; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20529_user_id_2 ON pm_inroster USING btree (user_id, jid); - - --- --- Name: idx_20532_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20532_user_id ON pm_streams USING btree (user_id, user_id_to); - - --- --- Name: idx_20536_jid; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20536_jid ON presence USING btree (jid); - - --- --- Name: idx_20563_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20563_message_id ON replies USING btree (message_id); - - --- --- Name: idx_20563_ts; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20563_ts ON replies USING btree (ts); - - --- --- Name: idx_20563_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20563_user_id ON replies USING btree (user_id); - - --- --- Name: idx_20574_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20574_message_id ON subscr_messages USING btree (message_id, suser_id); - - --- --- Name: idx_20577_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20577_tag_id ON subscr_tags USING btree (tag_id, suser_id); - - --- --- Name: idx_20580_suser_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20580_suser_id ON subscr_users USING btree (suser_id); - - --- --- Name: idx_20580_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20580_user_id ON subscr_users USING btree (user_id, suser_id); - - --- --- Name: idx_20586_synonym_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20586_synonym_id ON tags USING btree (synonym_id); - - --- --- Name: idx_20607_chat_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20607_chat_id ON telegram_chats USING btree (chat_id); - - --- --- Name: idx_20627_recommendations; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20627_recommendations ON useroptions USING btree (recommendations); - - --- --- Name: idx_20653_nick; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20653_nick ON users USING btree (nick); - - --- --- Name: idx_20669_ref; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20669_ref ON users_refs USING btree (ref); - - --- --- Name: idx_20682_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20682_user_id ON vk USING btree (user_id); - - --- --- Name: idx_20690_url; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_20690_url ON winphone USING btree (url); - - --- --- Name: idx_20690_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_20690_user_id ON winphone USING btree (user_id); - - --- --- Name: idx_29422_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_29422_message_id ON favorites USING btree (message_id); - - --- --- Name: idx_29422_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE INDEX idx_29422_user_id ON favorites USING btree (user_id); - - --- --- Name: idx_29422_user_id_2; Type: INDEX; Schema: public; Owner: juick; Tablespace: --- - -CREATE UNIQUE INDEX idx_29422_user_id_2 ON favorites USING btree (user_id, message_id); - - --- --- Name: public; Type: ACL; Schema: -; Owner: postgres --- - -REVOKE ALL ON SCHEMA public FROM PUBLIC; -REVOKE ALL ON SCHEMA public FROM postgres; -GRANT ALL ON SCHEMA public TO postgres; -GRANT ALL ON SCHEMA public TO PUBLIC; - - --- --- PostgreSQL database dump complete --- - diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java index d80c9251..3a7697e1 100644 --- a/src/test/java/com/juick/server/tests/ServerTests.java +++ b/src/test/java/com/juick/server/tests/ServerTests.java @@ -77,6 +77,7 @@ import java.security.NoSuchProviderException; import java.security.spec.InvalidKeySpecException; import java.sql.Timestamp; import java.time.Instant; +import java.time.OffsetDateTime; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -182,7 +183,6 @@ import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; -import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mockito; @@ -204,7 +204,6 @@ import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; @@ -242,13 +241,11 @@ import ru.sape.SapePageLinks; /** * Created by vitalyster on 25.11.2016. */ -@ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) @TestPropertySource(properties = { "ios_app_id=12345678.com.juick.ExampleApp" }) @AutoConfigureMockMvc @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ServerTests { - @Inject private MockMvc mockMvc; @Inject @@ -913,8 +910,8 @@ public class ServerTests { assertThat(yoyoMsg.getNewMessage().get().getTags().stream().findFirst().get(), is(yo)); Message msg2 = yoyoMsg.getNewMessage().get(); int mid = msg2.getMid(); - Timestamp last = jdbcTemplate.queryForObject("SELECT lastmessage FROM users WHERE id=?", - Timestamp.class, + var last = jdbcTemplate.queryForObject("SELECT lastmessage FROM users WHERE id=?", + OffsetDateTime.class, user.getUid()); assertThat(last.toInstant(), equalTo(yoyoMsg.getNewMessage().get().getCreated())); assertEquals(true, @@ -960,8 +957,8 @@ public class ServerTests { URI.create("https://static.juick.com/settings/facebook.png")).getText()); Message reply = messagesService.getReplies(user, mid).stream().filter(m -> m.getRid() == 3).findFirst() .orElse(new Message()); - Timestamp lastreply = jdbcTemplate.queryForObject("SELECT lastmessage FROM users WHERE id=?", - Timestamp.class, + var lastreply = jdbcTemplate.queryForObject("SELECT lastmessage FROM users WHERE id=?", + OffsetDateTime.class, user.getUid()); assertThat(lastreply.toInstant(), equalTo(reply.getCreated())); assertEquals(2, reply.getReplyto()); @@ -1536,7 +1533,8 @@ public class ServerTests { original.getMid()); assertThat(messagesService.deleteMessage(ugnich.getUid(), original.getMid()), is(true)); assertThat(messagesService.getMessageAuthor(original.getMid()), is(archiveUser)); - jdbcTemplate.update("UPDATE messages_txt SET updated_at=? WHERE message_id=?", Instant.now(), + jdbcTemplate.update("UPDATE messages_txt SET updated_at=? WHERE message_id=?", + Timestamp.from(Instant.now()), original.getMid()); assertThat(messagesService.deleteMessage(ugnich.getUid(), original.getMid()), is(false)); assertThat(messagesService.deleteMessage(archiveUser.getUid(), original.getMid()), is(true)); @@ -2306,6 +2304,7 @@ public class ServerTests { @Test public void XMPPSignupIsDisabled() throws Exception { + jdbcTemplate.execute("DELETE FROM jids"); jdbcTemplate.update("INSERT INTO jids(loginhash, jid) VALUES('1', 'test@jid.tld')"); MvcResult formLoginResult = mockMvc .perform(post("/login").with(csrf()).param("username", ugnichName).param("password", @@ -2333,8 +2332,8 @@ public class ServerTests { @Test public void verifiedUsersTest() { assertThat(userService.getUserByName("ugnich").isVerified(), is(false)); - jdbcTemplate.update("INSERT INTO telegram(user_id, tg_id) VALUES(?, ?)", ugnich.getUid(), - "100001866137681"); + jdbcTemplate.update("INSERT INTO telegram(user_id, tg_id, tg_name) VALUES(?, ?, ?)", ugnich.getUid(), + "100001866137681", "tg_test"); assertThat(userService.canDeleteTelegramUser(userService.getUserByName("ugnich")), is(false)); userService.addFacebookState("12345", "http://localhost"); userService.createFacebookUser(12345, "12345", "5678", "ugnich"); diff --git a/src/test/resources/schema-postgres.sql b/src/test/resources/schema-postgres.sql new file mode 100644 index 00000000..7c4406f0 --- /dev/null +++ b/src/test/resources/schema-postgres.sql @@ -0,0 +1,1516 @@ +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = off; +SET check_function_bodies = false; +SET client_min_messages = warning; +SET escape_string_warning = off; + +SET search_path = public, pg_catalog; + +CREATE COLLATION case_insensitive (provider = icu, locale = 'und-u-ks-level2', deterministic = false); +-- +-- Name: auth_protocol; Type: TYPE; Schema: public; Owner: juick +-- + +CREATE TYPE auth_protocol AS ENUM ( + 'xmpp', + 'email', + 'sms' +); + + +ALTER TYPE auth_protocol OWNER TO juick; + +-- +-- Name: messages_attach; Type: TYPE; Schema: public; Owner: juick +-- + +CREATE TYPE messages_attach AS ENUM ( + 'jpg', + 'mp4', + 'png' +); + + +ALTER TYPE messages_attach OWNER TO juick; + +-- +-- Name: messages_lang; Type: TYPE; Schema: public; Owner: juick +-- + +CREATE TYPE messages_lang AS ENUM ( + 'en', + 'ru', + 'fr', + 'fa', + '__' +); + + +ALTER TYPE messages_lang OWNER TO juick; + +-- +-- Name: replies_attach; Type: TYPE; Schema: public; Owner: juick +-- + +CREATE TYPE replies_attach AS ENUM ( + 'jpg', + 'mp4', + 'png' +); + + +ALTER TYPE replies_attach OWNER TO juick; + +-- +-- Name: users_lang; Type: TYPE; Schema: public; Owner: juick +-- + +CREATE TYPE users_lang AS ENUM ( + 'en', + 'ru', + 'fr', + 'fa', + '__' +); + + +ALTER TYPE users_lang OWNER TO juick; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: ads_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE ads_messages ( + message_id bigint NOT NULL +); + + +ALTER TABLE ads_messages OWNER TO juick; + +-- +-- Name: ads_messages_log; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE ads_messages_log ( + user_id bigint NOT NULL, + message_id bigint NOT NULL, + ts bigint DEFAULT 0::bigint NOT NULL +); + + +ALTER TABLE ads_messages_log OWNER TO juick; + +-- +-- Name: android; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE android ( + user_id bigint NOT NULL, + regid character varying(255) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE android OWNER TO juick; + +-- +-- Name: auth; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE auth ( + user_id bigint NOT NULL, + protocol auth_protocol NOT NULL, + account character varying(64) NOT NULL, + authcode character varying(8) NOT NULL +); + + +ALTER TABLE auth OWNER TO juick; + +-- +-- Name: bl_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE bl_tags ( + user_id bigint NOT NULL, + tag_id bigint NOT NULL +); + + +ALTER TABLE bl_tags OWNER TO juick; + +-- +-- Name: bl_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE bl_users ( + user_id bigint NOT NULL, + bl_user_id bigint NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE bl_users OWNER TO juick; + +-- +-- Name: captcha; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE captcha ( + jid character varying(64) NOT NULL, + hash character varying(16) NOT NULL, + confirmed smallint NOT NULL +); + + +ALTER TABLE captcha OWNER TO juick; + +-- +-- Name: captchaimg; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE captchaimg ( + id character varying(16) NOT NULL, + txt character varying(6) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + ip character varying(16) NOT NULL +); + + +ALTER TABLE captchaimg OWNER TO juick; + +-- +-- Name: emails; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE emails ( + user_id bigint NOT NULL, + email character varying(64) NOT NULL, + subscr_hour smallint +); + + +ALTER TABLE emails OWNER TO juick; + +-- +-- Name: facebook; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE facebook ( + user_id bigint, + fb_id numeric, + loginhash character varying(36), + access_token character varying(255), + ts timestamp with time zone DEFAULT now() NOT NULL, + fb_name character varying(64), + fb_link character varying(255) NOT NULL, + crosspost boolean DEFAULT true NOT NULL +); + + +ALTER TABLE facebook OWNER TO juick; + +CREATE TABLE reactions ( + like_id smallint NOT NULL, + description character varying (100) NOT NULL, + PRIMARY KEY(like_id) +); + +-- +-- Name: favorites; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE favorites ( + user_id bigint NOT NULL, + message_id bigint NOT NULL, + ts timestamp with time zone, + like_id smallint references reactions(like_id) not null default 1 +); + + +ALTER TABLE favorites OWNER TO juick; + +-- +-- Name: friends_facebook; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE friends_facebook ( + user_id bigint NOT NULL, + friend_id numeric NOT NULL +); + + +ALTER TABLE friends_facebook OWNER TO juick; + +-- +-- Name: images; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE images ( + mid bigint NOT NULL, + rid bigint NOT NULL, + thumb bigint NOT NULL, + small bigint NOT NULL, + medium bigint NOT NULL, + height bigint NOT NULL, + width bigint NOT NULL +); + + +ALTER TABLE images OWNER TO juick; + +-- +-- Name: ios; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE ios ( + user_id bigint NOT NULL, + token character varying(64) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE ios OWNER TO juick; + +-- +-- Name: jids; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE jids ( + user_id bigint, + jid character varying(64) NOT NULL, + active smallint DEFAULT 0 NOT NULL, + loginhash character varying(36), + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE jids OWNER TO juick; + +-- +-- Name: logins; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE logins ( + user_id bigint NOT NULL, + hash character varying(16) NOT NULL +); + + +ALTER TABLE logins OWNER TO juick; + +-- +-- Name: mail; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE mail ( + user_id bigint NOT NULL, + hash character varying(16) NOT NULL +); + + +ALTER TABLE mail OWNER TO juick; + +-- +-- Name: meon; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE meon ( + id bigint NOT NULL, + user_id bigint NOT NULL, + link character varying(255) NOT NULL, + name character varying(32) NOT NULL, + ico smallint +); + + +ALTER TABLE meon OWNER TO juick; + +-- +-- Name: meon_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE meon_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE meon_id_seq OWNER TO juick; + +-- +-- Name: meon_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE meon_id_seq OWNED BY meon.id; + + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE messages ( + message_id bigint NOT NULL, + user_id bigint NOT NULL, + lang messages_lang DEFAULT '__'::messages_lang NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + replies smallint DEFAULT 0::smallint NOT NULL, + maxreplyid smallint DEFAULT 0::smallint NOT NULL, + privacy smallint DEFAULT 1::smallint NOT NULL, + readonly boolean DEFAULT false NOT NULL, + attach messages_attach, + place_id bigint, + lat numeric(10,7), + lon numeric(10,7), + popular smallint DEFAULT 0::smallint NOT NULL, + hidden smallint DEFAULT 0::smallint NOT NULL, + likes smallint DEFAULT 0::smallint NOT NULL, + updated timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE messages OWNER TO juick; + +-- +-- Name: messages_access; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE messages_access ( + message_id bigint NOT NULL, + user_id bigint NOT NULL +); + + +ALTER TABLE messages_access OWNER TO juick; + +-- +-- Name: messages_message_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE messages_message_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE messages_message_id_seq OWNER TO juick; + +-- +-- Name: messages_message_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE messages_message_id_seq OWNED BY messages.message_id; + + +-- +-- Name: messages_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE messages_tags ( + message_id bigint NOT NULL, + tag_id bigint NOT NULL +); + + +ALTER TABLE messages_tags OWNER TO juick; + +-- +-- Name: messages_txt; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE messages_txt ( + message_id bigint NOT NULL, + tags text, + repliesby text, + txt text NOT NULL +); + + +ALTER TABLE messages_txt OWNER TO juick; + +-- +-- Name: messages_votes; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE messages_votes ( + message_id bigint NOT NULL, + user_id bigint NOT NULL, + vote smallint DEFAULT 1::smallint NOT NULL +); + + +ALTER TABLE messages_votes OWNER TO juick; + +-- +-- Name: places; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE places ( + place_id bigint NOT NULL, + lat numeric(10,7) NOT NULL, + lon numeric(10,7) NOT NULL, + name character varying(64) NOT NULL, + descr character varying(255), + url character varying(128), + user_id bigint NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE places OWNER TO juick; + +-- +-- Name: places_place_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE places_place_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE places_place_id_seq OWNER TO juick; + +-- +-- Name: places_place_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE places_place_id_seq OWNED BY places.place_id; + + +-- +-- Name: places_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE places_tags ( + place_id bigint NOT NULL, + tag_id bigint NOT NULL +); + + +ALTER TABLE places_tags OWNER TO juick; + +-- +-- Name: pm; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE pm ( + user_id bigint NOT NULL, + user_id_to bigint NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + txt text NOT NULL +); + + +ALTER TABLE pm OWNER TO juick; + +-- +-- Name: pm_inroster; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE pm_inroster ( + user_id bigint NOT NULL, + jid character varying(64) NOT NULL +); + + +ALTER TABLE pm_inroster OWNER TO juick; + +-- +-- Name: pm_streams; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE pm_streams ( + user_id bigint NOT NULL, + user_id_to bigint NOT NULL, + lastmessage timestamp with time zone NOT NULL, + lastview timestamp with time zone, + unread smallint DEFAULT 0::smallint NOT NULL +); + + +ALTER TABLE pm_streams OWNER TO juick; + +-- +-- Name: presence; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE presence ( + user_id bigint NOT NULL, + jid character varying(64), + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE presence OWNER TO juick; + +-- +-- Name: reader_links; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE reader_links ( + link_id bigint NOT NULL, + rss_id bigint NOT NULL, + url character varying(255) NOT NULL, + title character varying(255) NOT NULL, + ts timestamp with time zone NOT NULL +); + + +ALTER TABLE reader_links OWNER TO juick; + +-- +-- Name: reader_links_link_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE reader_links_link_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE reader_links_link_id_seq OWNER TO juick; + +-- +-- Name: reader_links_link_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE reader_links_link_id_seq OWNED BY reader_links.link_id; + + +-- +-- Name: reader_rss; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE reader_rss ( + rss_id bigint NOT NULL, + url character varying(255) NOT NULL, + lastcheck timestamp with time zone NOT NULL +); + + +ALTER TABLE reader_rss OWNER TO juick; + +-- +-- Name: reader_rss_rss_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE reader_rss_rss_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE reader_rss_rss_id_seq OWNER TO juick; + +-- +-- Name: reader_rss_rss_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE reader_rss_rss_id_seq OWNED BY reader_rss.rss_id; + + +-- +-- Name: replies; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE replies ( + message_id bigint NOT NULL, + reply_id smallint NOT NULL, + user_id bigint NOT NULL, + replyto smallint DEFAULT 0::smallint NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + attach replies_attach, + txt text NOT NULL +); + + +ALTER TABLE replies OWNER TO juick; + +-- +-- Name: sphinx; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE sphinx ( + counter_id smallint NOT NULL, + max_id bigint NOT NULL +); + + +ALTER TABLE sphinx OWNER TO juick; + +-- +-- Name: subscr_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE subscr_messages ( + message_id bigint NOT NULL, + suser_id bigint NOT NULL, + last_read_rid smallint NOT NULL default 0 +); + + +ALTER TABLE subscr_messages OWNER TO juick; + +-- +-- Name: subscr_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE subscr_tags ( + tag_id bigint NOT NULL, + suser_id bigint NOT NULL +); + + +ALTER TABLE subscr_tags OWNER TO juick; + +-- +-- Name: subscr_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE subscr_users ( + user_id bigint NOT NULL, + suser_id bigint NOT NULL, + jid character varying(64), + active boolean NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE subscr_users OWNER TO juick; + +-- +-- Name: tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE tags ( + tag_id bigint NOT NULL, + synonym_id bigint, + name character varying(70) collate case_insensitive, + top boolean DEFAULT false NOT NULL, + noindex boolean DEFAULT false NOT NULL, + stat_messages bigint DEFAULT 0::bigint NOT NULL, + stat_users smallint DEFAULT 0::smallint NOT NULL +); + + +ALTER TABLE tags OWNER TO juick; + +-- +-- Name: tags_ignore; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE tags_ignore ( + tag_id bigint NOT NULL +); + + +ALTER TABLE tags_ignore OWNER TO juick; + +-- +-- Name: tags_synonyms; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE tags_synonyms ( + name character varying(64) NOT NULL, + changeto character varying(64) NOT NULL +); + + +ALTER TABLE tags_synonyms OWNER TO juick; + +-- +-- Name: tags_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE tags_tag_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE tags_tag_id_seq OWNER TO juick; + +-- +-- Name: tags_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE tags_tag_id_seq OWNED BY tags.tag_id; + + +-- +-- Name: telegram; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE telegram ( + user_id bigint, + tg_id numeric NOT NULL, + tg_name character varying(64) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + loginhash character varying(36) +); + + +ALTER TABLE telegram OWNER TO juick; + +-- +-- Name: telegram_chats; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE telegram_chats ( + chat_id numeric +); + + +ALTER TABLE telegram_chats OWNER TO juick; + +-- +-- Name: top_ignore_messages; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE top_ignore_messages ( + message_id bigint NOT NULL +); + + +ALTER TABLE top_ignore_messages OWNER TO juick; + +-- +-- Name: top_ignore_tags; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE top_ignore_tags ( + tag_id bigint NOT NULL +); + + +ALTER TABLE top_ignore_tags OWNER TO juick; + +-- +-- Name: top_ignore_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE top_ignore_users ( + user_id bigint NOT NULL +); + + +ALTER TABLE top_ignore_users OWNER TO juick; + +-- +-- Name: twitter; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE twitter ( + user_id bigint NOT NULL, + access_token character varying(64) NOT NULL, + access_token_secret character varying(64) NOT NULL, + uname character varying(64) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + crosspost boolean DEFAULT true NOT NULL +); + + +ALTER TABLE twitter OWNER TO juick; + +-- +-- Name: useroptions; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE useroptions ( + user_id bigint NOT NULL, + jnotify boolean DEFAULT true NOT NULL, + subscr_active boolean DEFAULT true NOT NULL, + off_ts timestamp with time zone, + xmppxhtml boolean DEFAULT false NOT NULL, + subscr_notify boolean DEFAULT true NOT NULL, + recommendations boolean DEFAULT true NOT NULL, + privacy_view boolean DEFAULT true NOT NULL, + privacy_reply boolean DEFAULT true NOT NULL, + privacy_pm boolean DEFAULT true NOT NULL, + repliesview boolean DEFAULT false NOT NULL +); + + +ALTER TABLE useroptions OWNER TO juick; + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE users ( + id bigint NOT NULL, + nick character varying(64) NOT NULL, + passw character varying(32) NOT NULL, + lang users_lang DEFAULT '__'::users_lang NOT NULL, + banned smallint DEFAULT 0::smallint NOT NULL, + lastmessage bigint DEFAULT 0::bigint NOT NULL, + lastpm bigint DEFAULT 0::bigint NOT NULL, + lastphoto bigint DEFAULT 0::bigint NOT NULL, + karma smallint DEFAULT 0::smallint NOT NULL +); + + +ALTER TABLE users OWNER TO juick; + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: juick +-- + +CREATE SEQUENCE users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE users_id_seq OWNER TO juick; + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: juick +-- + +ALTER SEQUENCE users_id_seq OWNED BY users.id; + + +-- +-- Name: users_refs; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE users_refs ( + user_id bigint NOT NULL, + ref bigint NOT NULL +); + + +ALTER TABLE users_refs OWNER TO juick; + +-- +-- Name: users_subscr; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE users_subscr ( + user_id bigint NOT NULL, + cnt smallint DEFAULT 0::smallint NOT NULL +); + + +ALTER TABLE users_subscr OWNER TO juick; + +-- +-- Name: usersinfo; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE usersinfo ( + user_id bigint NOT NULL, + jid character varying(32), + fullname character varying(32), + country character varying(32), + url character varying(64), + gender character varying(32), + bday character varying(10), + descr text +); + + +ALTER TABLE usersinfo OWNER TO juick; + +-- +-- Name: version; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE version ( + version numeric NOT NULL +); + + +ALTER TABLE version OWNER TO juick; + +-- +-- Name: vk; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE vk ( + user_id bigint, + vk_id numeric NOT NULL, + loginhash character varying(36), + access_token character varying(128) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL, + vk_name character varying(64) NOT NULL, + vk_link character varying(64) NOT NULL, + crosspost smallint DEFAULT 1::smallint NOT NULL +); + + +ALTER TABLE vk OWNER TO juick; + +-- +-- Name: winphone; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE winphone ( + user_id bigint NOT NULL, + url character varying(255) NOT NULL, + ts timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE winphone OWNER TO juick; + +-- +-- Name: wl_users; Type: TABLE; Schema: public; Owner: juick; Tablespace: +-- + +CREATE TABLE wl_users ( + user_id bigint NOT NULL, + wl_user_id bigint NOT NULL +); + + +ALTER TABLE wl_users OWNER TO juick; + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY meon ALTER COLUMN id SET DEFAULT nextval('meon_id_seq'::regclass); + + +-- +-- Name: message_id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY messages ALTER COLUMN message_id SET DEFAULT nextval('messages_message_id_seq'::regclass); + + +-- +-- Name: place_id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY places ALTER COLUMN place_id SET DEFAULT nextval('places_place_id_seq'::regclass); + + +-- +-- Name: link_id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY reader_links ALTER COLUMN link_id SET DEFAULT nextval('reader_links_link_id_seq'::regclass); + + +-- +-- Name: rss_id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY reader_rss ALTER COLUMN rss_id SET DEFAULT nextval('reader_rss_rss_id_seq'::regclass); + + +-- +-- Name: tag_id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY tags ALTER COLUMN tag_id SET DEFAULT nextval('tags_tag_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: juick +-- + +ALTER TABLE ONLY users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass); + + +-- +-- Name: idx_20438_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY images + ADD CONSTRAINT idx_20438_primary PRIMARY KEY (mid, rid); + + +-- +-- Name: idx_20453_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY mail + ADD CONSTRAINT idx_20453_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20458_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY meon + ADD CONSTRAINT idx_20458_primary PRIMARY KEY (id); + + +-- +-- Name: idx_20483_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY messages + ADD CONSTRAINT idx_20483_primary PRIMARY KEY (message_id); + + +-- +-- Name: idx_20502_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY messages_txt + ADD CONSTRAINT idx_20502_primary PRIMARY KEY (message_id); + + +-- +-- Name: idx_20514_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY places + ADD CONSTRAINT idx_20514_primary PRIMARY KEY (place_id); + + +-- +-- Name: idx_20542_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY reader_links + ADD CONSTRAINT idx_20542_primary PRIMARY KEY (link_id); + + +-- +-- Name: idx_20551_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY reader_rss + ADD CONSTRAINT idx_20551_primary PRIMARY KEY (rss_id); + + +-- +-- Name: idx_20571_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY sphinx + ADD CONSTRAINT idx_20571_primary PRIMARY KEY (counter_id); + + +-- +-- Name: idx_20586_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY tags + ADD CONSTRAINT idx_20586_primary PRIMARY KEY (tag_id); + + +-- +-- Name: idx_20616_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY top_ignore_tags + ADD CONSTRAINT idx_20616_primary PRIMARY KEY (tag_id); + + +-- +-- Name: idx_20619_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY top_ignore_users + ADD CONSTRAINT idx_20619_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20622_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY twitter + ADD CONSTRAINT idx_20622_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20627_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY useroptions + ADD CONSTRAINT idx_20627_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20653_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY users + ADD CONSTRAINT idx_20653_primary PRIMARY KEY (id); + + +-- +-- Name: idx_20663_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY usersinfo + ADD CONSTRAINT idx_20663_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20672_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY users_subscr + ADD CONSTRAINT idx_20672_primary PRIMARY KEY (user_id); + + +-- +-- Name: idx_20694_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY wl_users + ADD CONSTRAINT idx_20694_primary PRIMARY KEY (user_id, wl_user_id); + + +-- +-- Name: idx_29418_primary; Type: CONSTRAINT; Schema: public; Owner: juick; Tablespace: +-- + +ALTER TABLE ONLY bl_users + ADD CONSTRAINT idx_29418_primary PRIMARY KEY (user_id, bl_user_id); + + +-- +-- Name: idx_20390_regid; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20390_regid ON android USING btree (regid); + + +-- +-- Name: idx_20390_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20390_user_id ON android USING btree (user_id); + + +-- +-- Name: idx_20404_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20404_tag_id ON bl_tags USING btree (tag_id); + + +-- +-- Name: idx_20404_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20404_user_id ON bl_tags USING btree (user_id); + + +-- +-- Name: idx_20418_email; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20418_email ON emails USING btree (email); + + +-- +-- Name: idx_20421_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20421_user_id ON facebook USING btree (user_id); + + +-- +-- Name: idx_20432_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20432_user_id ON friends_facebook USING btree (user_id, friend_id); + + +-- +-- Name: idx_20441_token; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20441_token ON ios USING btree (token); + + +-- +-- Name: idx_20441_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20441_user_id ON ios USING btree (user_id); + + +-- +-- Name: idx_20445_jid; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20445_jid ON jids USING btree (jid); + + +-- +-- Name: idx_20445_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20445_user_id ON jids USING btree (user_id); + + +-- +-- Name: idx_20450_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20450_user_id ON logins USING btree (user_id); + + +-- +-- Name: idx_20483_attach; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_attach ON messages USING btree (attach); + + +-- +-- Name: idx_20483_hidden; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_hidden ON messages USING btree (hidden); + + +-- +-- Name: idx_20483_place_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_place_id ON messages USING btree (place_id); + + +-- +-- Name: idx_20483_popular; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_popular ON messages USING btree (popular); + + +-- +-- Name: idx_20483_ts; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_ts ON messages USING btree (ts); + + +-- +-- Name: idx_20483_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20483_user_id ON messages USING btree (user_id); + + +-- +-- Name: idx_20496_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20496_message_id ON messages_access USING btree (message_id); + + +-- +-- Name: idx_20499_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20499_message_id ON messages_tags USING btree (message_id); + + +-- +-- Name: idx_20499_message_id_2; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20499_message_id_2 ON messages_tags USING btree (message_id, tag_id); + + +-- +-- Name: idx_20499_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20499_tag_id ON messages_tags USING btree (tag_id); + + +-- +-- Name: idx_20508_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20508_message_id ON messages_votes USING btree (message_id, user_id); + + +-- +-- Name: idx_20529_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20529_user_id ON pm_inroster USING btree (user_id); + + +-- +-- Name: idx_20529_user_id_2; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20529_user_id_2 ON pm_inroster USING btree (user_id, jid); + + +-- +-- Name: idx_20532_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20532_user_id ON pm_streams USING btree (user_id, user_id_to); + + +-- +-- Name: idx_20536_jid; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20536_jid ON presence USING btree (jid); + + +-- +-- Name: idx_20563_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20563_message_id ON replies USING btree (message_id); + + +-- +-- Name: idx_20563_ts; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20563_ts ON replies USING btree (ts); + + +-- +-- Name: idx_20563_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20563_user_id ON replies USING btree (user_id); + + +-- +-- Name: idx_20574_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20574_message_id ON subscr_messages USING btree (message_id, suser_id); + + +-- +-- Name: idx_20577_tag_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20577_tag_id ON subscr_tags USING btree (tag_id, suser_id); + + +-- +-- Name: idx_20580_suser_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20580_suser_id ON subscr_users USING btree (suser_id); + + +-- +-- Name: idx_20580_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20580_user_id ON subscr_users USING btree (user_id, suser_id); + + +-- +-- Name: idx_20586_synonym_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20586_synonym_id ON tags USING btree (synonym_id); + + +-- +-- Name: idx_20607_chat_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20607_chat_id ON telegram_chats USING btree (chat_id); + + +-- +-- Name: idx_20627_recommendations; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20627_recommendations ON useroptions USING btree (recommendations); + + +-- +-- Name: idx_20653_nick; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20653_nick ON users USING btree (nick); + + +-- +-- Name: idx_20669_ref; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20669_ref ON users_refs USING btree (ref); + + +-- +-- Name: idx_20682_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20682_user_id ON vk USING btree (user_id); + + +-- +-- Name: idx_20690_url; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE UNIQUE INDEX idx_20690_url ON winphone USING btree (url); + + +-- +-- Name: idx_20690_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_20690_user_id ON winphone USING btree (user_id); + + +-- +-- Name: idx_29422_message_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_29422_message_id ON favorites USING btree (message_id); + + +-- +-- Name: idx_29422_user_id; Type: INDEX; Schema: public; Owner: juick; Tablespace: +-- + +CREATE INDEX idx_29422_user_id ON favorites USING btree (user_id); + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +REVOKE ALL ON SCHEMA public FROM postgres; +GRANT ALL ON SCHEMA public TO postgres; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + -- cgit v1.2.3