Exemple #1
0
        // Получает набор едениц перевода для заданного языка в заданной статье
        public RawTranslationUnit[] GetTranslationUnits(string articleName, string translationLanguageCode)
        {
            List <RawTranslationUnit> units = new List <RawTranslationUnit>();

            ExecuteSQLQuery
            (
                $"SELECT t1.{Tables.TranslationUnits.originalPhraseIndexes}, t1.{Tables.TranslationUnits.translatedPhrase}, " +
                $"t2.{Tables.TranslationsInInfinitive.originalPhrase}, t2.{Tables.TranslationsInInfinitive.translatedPhrase} " +
                $"FROM {Tables.translationUnits} t1 " +
                $"LEFT JOIN {Tables.translationsInInfinitive} t2 " +
                $"ON t1.{Tables.TranslationUnits.infinitiveTranslationId} = t2.{Tables.TranslationsInInfinitive.id} " +
                $"WHERE t1.{Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                $"t1.{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)};",

                (reader) =>
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        RawTranslationUnit unit = new RawTranslationUnit();

                        unit.originalPhraseIndexes = reader.GetString(0);
                        unit.translatedPhrase      = reader.GetString(1);

                        // Проверяем значения в инфинитиве на null. Потому как они могут быть не заданы и в этом случае будут null.
                        // Если они null, то и в выходных данных оставляем дефолтный null
                        if (!reader.IsDBNull(2))
                        {
                            unit.infinitiveOriginalPhrase   = reader.GetString(2);
                            unit.infinitiveTranslatedPhrase = reader.GetString(3);
                        }

                        units.Add(unit);
                    }
                }
            }
            );

            return(units.ToArray());
        }
        // Получает набор едениц перевода для заданного языка в заданной статье
        public RawTranslationUnit[] GetTranslationUnits(string articleName, string translationLanguageCode)
        {
            List<RawTranslationUnit> units = new List<RawTranslationUnit>();

            ExecuteSQLQuery
            (
                $"SELECT t1.{Tables.TranslationUnits.originalPhraseIndexes}, t1.{Tables.TranslationUnits.translatedPhrase}, " +
                $"t2.{Tables.TranslationsInInfinitive.originalPhrase}, t2.{Tables.TranslationsInInfinitive.translatedPhrase} " +
                $"FROM {Tables.translationUnits} t1 " +
                $"LEFT JOIN {Tables.translationsInInfinitive} t2 " +
                $"ON t1.{Tables.TranslationUnits.infinitiveTranslationId} = t2.{Tables.TranslationsInInfinitive.id} " +
                $"WHERE t1.{Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                $"t1.{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)};",

                (reader) =>
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            RawTranslationUnit unit = new RawTranslationUnit();

                            unit.originalPhraseIndexes = reader.GetString(0);
                            unit.translatedPhrase = reader.GetString(1);

                            // Проверяем значения в инфинитиве на null. Потому как они могут быть не заданы и в этом случае будут null.
                            // Если они null, то и в выходных данных оставляем дефолтный null
                            if (!reader.IsDBNull(2))
                            {
                                unit.infinitiveOriginalPhrase = reader.GetString(2);
                                unit.infinitiveTranslatedPhrase = reader.GetString(3);
                            }

                            units.Add(unit);
                        }
                    }
                }
            );

            return units.ToArray();
        }
Exemple #3
0
        // Добавляет еденицу перевода. Если слово в инфинитиве не существует в словаре, то оно также добавляется в этот словарь
        public void AddOrChangeTranslationUnit(string articleName, string translationLanguageCode, RawTranslationUnit translationUnit)
        {
            Debug.Assert(articleName != null && translationLanguageCode != null && translationUnit.originalPhraseIndexes != null && translationUnit.translatedPhrase != null);

            // Если задан перевод в инфинитиве, получаем его Id (при этом либо добавится новый перевод либо возьмется уже существующий)
            int translationInInfinitiveId = -1;

            if (translationUnit.infinitiveOriginalPhrase != null && translationUnit.infinitiveTranslatedPhrase != null)
            {
                translationInInfinitiveId = GetOrAddTranslationInInfinitive(translationUnit.infinitiveOriginalPhrase, translationLanguageCode, translationUnit.infinitiveTranslatedPhrase);
            }

            // Запрашиваем Id оригинальной фразы (ее индексы слов), дабы узнать есть ли уже такая еденица перевода в БД

            int translationUnitId = -1;

            ExecuteSQLQuery
            (
                $"SELECT {Tables.TranslationUnits.id} FROM {Tables.translationUnits} " +
                $"WHERE {Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                $"{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)} and " +
                $"{Tables.TranslationUnits.originalPhraseIndexes} = {SQLStringLiteral(translationUnit.originalPhraseIndexes)} LIMIT 1;",

                (reader) =>
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    translationUnitId = reader.GetInt32(0);
                }
            }
            );

            // Если такая еденица перевода уже есть - модифицируем ее, иначе добавляем новую

            string translationInInfinitiveIdAsString = translationInInfinitiveId == -1 ? "NULL" : translationInInfinitiveId.ToString();

            if (translationUnitId == -1)
            {
                // Если нужно добавлять новую еденицу перевода

                // Формируем строку со значениями
                string insertionData =
                    SQLStringLiteral(translationUnit.originalPhraseIndexes) + ", " +
                    SQLStringLiteral(translationLanguageCode) + ", " +
                    SQLStringLiteral(translationUnit.translatedPhrase) + ", " +
                    translationInInfinitiveIdAsString;

                // Добавляем еденицу перевода
                ExecuteSQLQuery($"INSERT INTO {Tables.translationUnits} {ArticleIdByNameSubquery(articleName, "NULL", insertionData)};");
            }
            else
            {
                // Если нужно изменить уже существующую еденицу перевода

                ExecuteSQLQuery
                (
                    $"UPDATE {Tables.translationUnits} SET " +
                    $"{Tables.TranslationUnits.translatedPhrase} = {SQLStringLiteral(translationUnit.translatedPhrase)}, " +
                    $"{Tables.TranslationUnits.infinitiveTranslationId} = {translationInInfinitiveIdAsString} " +
                    $"WHERE {Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                    $"{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)} and " +
                    $"{Tables.TranslationUnits.originalPhraseIndexes} = {SQLStringLiteral(translationUnit.originalPhraseIndexes)};"
                );
            }
        }
        // Добавляет еденицу перевода. Если слово в инфинитиве не существует в словаре, то оно также добавляется в этот словарь
        public void AddOrChangeTranslationUnit(string articleName, string translationLanguageCode, RawTranslationUnit translationUnit)
        {
            Debug.Assert(articleName != null && translationLanguageCode != null && translationUnit.originalPhraseIndexes != null && translationUnit.translatedPhrase != null);

            // Если задан перевод в инфинитиве, получаем его Id (при этом либо добавится новый перевод либо возьмется уже существующий)
            int translationInInfinitiveId = -1;
            if (translationUnit.infinitiveOriginalPhrase != null && translationUnit.infinitiveTranslatedPhrase != null)
                translationInInfinitiveId = GetOrAddTranslationInInfinitive(translationUnit.infinitiveOriginalPhrase, translationLanguageCode, translationUnit.infinitiveTranslatedPhrase);

            // Запрашиваем Id оригинальной фразы (ее индексы слов), дабы узнать есть ли уже такая еденица перевода в БД

            int translationUnitId = -1;
            ExecuteSQLQuery
            (
                $"SELECT {Tables.TranslationUnits.id} FROM {Tables.translationUnits} " +
                $"WHERE {Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                $"{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)} and " +
                $"{Tables.TranslationUnits.originalPhraseIndexes} = {SQLStringLiteral(translationUnit.originalPhraseIndexes)} LIMIT 1;",

                (reader) =>
                {
                    if (reader.HasRows)
                    {
                        reader.Read();
                        translationUnitId = reader.GetInt32(0);
                    }
                }
            );

            // Если такая еденица перевода уже есть - модифицируем ее, иначе добавляем новую

            string translationInInfinitiveIdAsString = translationInInfinitiveId == -1 ? "NULL" : translationInInfinitiveId.ToString();

            if (translationUnitId == -1)
            {
                // Если нужно добавлять новую еденицу перевода

                // Формируем строку со значениями
                string insertionData =
                    SQLStringLiteral(translationUnit.originalPhraseIndexes) + ", " +
                    SQLStringLiteral(translationLanguageCode) + ", " +
                    SQLStringLiteral(translationUnit.translatedPhrase) + ", " +
                    translationInInfinitiveIdAsString;

                // Добавляем еденицу перевода
                ExecuteSQLQuery($"INSERT INTO {Tables.translationUnits} {ArticleIdByNameSubquery(articleName, "NULL", insertionData)};");
            }
            else
            {
                // Если нужно изменить уже существующую еденицу перевода

                ExecuteSQLQuery
                (
                    $"UPDATE {Tables.translationUnits} SET " +
                    $"{Tables.TranslationUnits.translatedPhrase} = {SQLStringLiteral(translationUnit.translatedPhrase)}, " +
                    $"{Tables.TranslationUnits.infinitiveTranslationId} = {translationInInfinitiveIdAsString} " +
                    $"WHERE {Tables.TranslationUnits.articleId} = {ArticleIdByNameSubquery(articleName)} and " +
                    $"{Tables.TranslationUnits.translationLanguageCode} = {SQLStringLiteral(translationLanguageCode)} and " +
                    $"{Tables.TranslationUnits.originalPhraseIndexes} = {SQLStringLiteral(translationUnit.originalPhraseIndexes)};"
                );
            }
        }