[T4, Request] Длина колонки.
От: Aen Sidhe Россия Просто блог
Дата: 24.11.10 14:49
Оценка:
Всем здрасьте.

Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.

Готов исправить все шаблоны сам, если руководство посчитает фикс нужным.
С уважением, Анатолий Попов.
ICQ: 995-908
t4 bltoolkit
Re: [T4, Request] Баги
От: Aen Sidhe Россия Просто блог
Дата: 24.11.10 15:05
Оценка:
Так же нашёл пару багов.

  1. AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется. Сборки, загруженные в домен не проверяются.
  2. Ключевые слова языка не экранируются — если есть поля вида private, namespace — всем весело.

В принципе, тоже могу поправить попробовать.
С уважением, Анатолий Попов.
ICQ: 995-908
Re: [T4, Request] Длина колонки.
От: IT Россия linq2db.com
Дата: 24.11.10 15:16
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.


Не совсем понял проблему.

AS>Готов исправить все шаблоны сам, если руководство посчитает фикс нужным.


Исправлять баги всегда нужно. Только сначала нужно понять, что это баги
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: [T4, Request] Баги
От: IT Россия linq2db.com
Дата: 24.11.10 15:19
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Так же нашёл пару багов.


AS>
  • AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется.

    Так он предназначен для кастомного заполнения.

    AS>Сборки, загруженные в домен не проверяются.


    А зачем? По идее они не должны проходить через AssemblyResolve.

    AS>
  • Ключевые слова языка не экранируются — если есть поля вида private, namespace — всем весело.
    AS>В принципе, тоже могу поправить попробовать.

    Давай.
  • Если нам не помогут, то мы тоже никого не пощадим.
    Re[2]: [T4, Request] Длина колонки.
    От: Aen Sidhe Россия Просто блог
    Дата: 24.11.10 15:28
    Оценка: 66 (1)
    Здравствуйте, IT, Вы писали:

    IT>Здравствуйте, Aen Sidhe, Вы писали:


    AS>>Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.


    IT>Не совсем понял проблему.


    MySql.ttinclude:99
    Length     = rd.IsDBNull(rd.GetOrdinal("length")) ? 0 : Convert.ToInt32(rd["length"]), // Вот если длина будет 2^32-1, то тут будет OverflowException.
    С уважением, Анатолий Попов.
    ICQ: 995-908
    Re[3]: [T4, Request] Баги
    От: Aen Sidhe Россия Просто блог
    Дата: 24.11.10 15:32
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>Здравствуйте, Aen Sidhe, Вы писали:


    AS>>Так же нашёл пару багов.


    AS>>AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется.


    IT>Так он предназначен для кастомного заполнения.


    Ок, понятно.

    AS>>Сборки, загруженные в домен не проверяются.


    IT>А зачем? По идее они не должны проходить через AssemblyResolve.


    Указал сборку так:
    <#@ assembly name="MySql.Data" #>


    Сборка загрузилась точно.
    При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.
    С уважением, Анатолий Попов.
    ICQ: 995-908
    Re[3]: [T4, Request] Длина колонки.
    От: IT Россия linq2db.com
    Дата: 24.11.10 15:40
    Оценка:
    Здравствуйте, Aen Sidhe, Вы писали:

    AS>MySql.ttinclude:99

    AS>
    AS>Length     = rd.IsDBNull(rd.GetOrdinal("length")) ? 0 : Convert.ToInt32(rd["length"]), // Вот если длина будет 2^32-1, то тут будет OverflowException.
    AS>


    Да, надо поменять на long.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[4]: [T4, Request] Баги
    От: IT Россия linq2db.com
    Дата: 24.11.10 15:40
    Оценка:
    Здравствуйте, Aen Sidhe, Вы писали:

    IT>>А зачем? По идее они не должны проходить через AssemblyResolve.


    AS>Указал сборку так:

    AS>
    AS><#@ assembly name="MySql.Data" #>
    AS>


    AS>Сборка загрузилась точно.

    AS>При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.

    Странно. Есть идеи?
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[5]: [T4, Request] Баги
    От: Aen Sidhe Россия Просто блог
    Дата: 24.11.10 15:42
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>Здравствуйте, Aen Sidhe, Вы писали:


    IT>>>А зачем? По идее они не должны проходить через AssemblyResolve.


    AS>>Указал сборку так:

    AS>>
    AS>><#@ assembly name="MySql.Data" #>
    AS>>


    AS>>Сборка загрузилась точно.

    AS>>При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.

    IT>Странно. Есть идеи?


    Взять в зубы логи Fusion и копать. Пока других нет. Сегодня/завтра дам результаты.
    С уважением, Анатолий Попов.
    ICQ: 995-908
    Re[5]: [T4, Request] Баги
    От: Aen Sidhe Россия Просто блог
    Дата: 24.11.10 16:40
    Оценка:
    Здравствуйте, IT.

    Ещё вопрос. Как предполагается конфигурирование наследников от DbManager, если нет переопределённых конструкторов?
    С уважением, Анатолий Попов.
    ICQ: 995-908
    Re[6]: [T4, Request] Баги
    От: IT Россия linq2db.com
    Дата: 24.11.10 17:05
    Оценка: 12 (1)
    Здравствуйте, Aen Sidhe, Вы писали:

    AS>Ещё вопрос. Как предполагается конфигурирование наследников от DbManager, если нет переопределённых конструкторов?


    — partial class
    — генерируем конструктор прямо в шаблоне
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[4]: [T4, Request] Длина колонки.
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 24.11.10 17:21
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>Да, надо поменять на long.


    Почему не uint?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[5]: [T4, Request] Длина колонки.
    От: IT Россия linq2db.com
    Дата: 24.11.10 20:22
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    IT>>Да, надо поменять на long.

    AVK>Почему не uint?

    Можно и uint. Но потом если что придётся менять на long. Так лучше уж сразу.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[6]: [T4, Request] Длина колонки.
    От: Aen Sidhe Россия Просто блог
    Дата: 25.11.10 08:03
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>Здравствуйте, AndrewVK, Вы писали:


    IT>>>Да, надо поменять на long.

    AVK>>Почему не uint?

    IT>Можно и uint. Но потом если что придётся менять на long. Так лучше уж сразу.


    Патч
    Доступа в репозиторий нет.

    В патче:

    1. Затычка от падений, если не находим сборку (путём просмотра всех сборок в домене).
    2. Длина колонки теперь — long
    3. Добавлен Func<string,string> EscapeIdentifier, который заботится о том, чтобы наши идентификаторы не конфликтовали с ключевыми словами языка. Для шарпа и VB сделано через CodeDomProvider.
    С уважением, Анатолий Попов.
    ICQ: 995-908
    Re[7]: [T4, Request] Длина колонки.
    От: IT Россия linq2db.com
    Дата: 25.04.11 11:31
    Оценка:
    Здравствуйте, Aen Sidhe, Вы писали:

    AS>Патч

    AS>Доступа в репозиторий нет.

    С этим всё просто. Сейчас разработка проекта ведётся на GitHub — https://github.com/IgorTkachev/bltoolkit. Создаётся форк проекта, вносятся изменения, делается Pull Request. Всё очень просто и удобно. Но если нет желания возиться с git, то можно внести изменения и по старинке.
    Если нам не помогут, то мы тоже никого не пощадим.
    Re[8]: [T4, Request] Длина колонки.
    От: andrex Украина  
    Дата: 27.04.11 11:23
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>С этим всё просто. Сейчас разработка проекта ведётся на GitHub — https://github.com/IgorTkachev/bltoolkit. Создаётся форк проекта, вносятся изменения, делается Pull Request. Всё очень просто и удобно. Но если нет желания возиться с git, то можно внести изменения и по старинке.


    Такие новости и все молчат, нужно же было объявление какое то повесить что ли. Это же другое дело
    Я бы изменил мир — но Бог не даёт исходников...
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.