mysql_real_escape_string / Говнокод #9684 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
function encode(p_string VARCHAR2) RETURN VARCHAR2 DETERMINISTIC AS
   begin
     RETURN REPLACE(
              REPLACE(
                REPLACE(
                  REPLACE(
                    REPLACE(
                      utl_encode.text_encode(p_string, NULL, utl_encode.base64),
                      '+', '_p'),
                    '/', '_s'),
                  '=', '_e'),
                CHR(10)),
              CHR(13));
   end encode;

   function decode(p_string VARCHAR2) RETURN VARCHAR2 DETERMINISTIC AS
   begin
     RETURN utl_encode.text_decode(
              REPLACE(
                REPLACE(
                  REPLACE(p_string, '_p', '+'),
                  '_s', '/'),
                '_e', '='),
              NULL, utl_encode.base64);
   end decode;

Убираем и возвращаем нецифробуквенные символы из/в BASE64

Запостил: wecanstoptrain wecanstoptrain, (Updated )

Комментарии (15) RSS

  • > DETERMINISTIC

    Это что за слово? Это типа что функция чистая?
    Ответить
    • то, что функция однозначно зависит только от аргументов и в случае чего ее можно закешировать, а не вычислять заново.
      Ответить
          • А константы при компиляции для такой вычисляются?
            Ответить
            • нет, процесс компиляции сводится к преобразованию в промежуточное представление (с разрешением зависимостей, мелкими оптимизациями).
              а дальше в рантайме интерпретатор работает.

              код такого вида:
              function a(gg varchar2) return number deterministic is
              begin
               return 1 + 2;
              end;

              при "компиляции" будет сведен к

              function a(gg varchar2) return number deterministic is
              begin
               return 3;
              end;

              а дальше уже дело интерпретатора как он будет его вызывать (если есть в кэше, то берем значение из него, иначе вычисляем и закидываем к кэш).

              но в константу вида a := 3; никак не будет преобразовано
              Ответить
              • а мне вот что интересно - майкрософт взорвется, если я напишу deterministic, а верну RAND?
                Ответить
                • Microsoft'у пофиг, это - Oracle.
                  У меня есть подозрение, что функа с рандом просто не скомпилится. Жаль Ораклы сейчас под рукой нет.
                  Тот же эффект должен быть с использованием sysdate.
                  Ответить
                  • скомпилится.
                    Насколько мне позволяет судить опыт, кеширование происходит при выполнении запросов. и в этом случае должно закешироваться. при случае проверю.
                    Ответить
                  • в пределах одной сессии, одного exec'а при условии, что значение не из кеша другими deterministic-функциями.
                    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8