/* Funçao para escapar caracteres especiais mysql
* basicamente adiciona uma barra invertida
* também serve para evitar concatenação de valor nulo
*
* versão: 1.0
* ***********************************************/
funcao EscapeMysql(R)
se R entao
local t = R:analise([['"\;[:/+`´]-!@#$&*.,^~<>]])
se t entao
para i=1, #R inicio
se t[i] == [[']] entao t[i] = [[\']] fim
se t[i] == [["]] entao t[i] = [[\"]] fim
se t[i] == [[\]] entao t[i] = [[\\]] fim
se t[i] == [[;]] entao t[i] = [[\;]] fim
se t[i] == "]" entao t[i] = "\\]" fim
se t[i] == "[" entao t[i] = "\\[" fim
se t[i] == [[:]] entao t[i] = [[\:]] fim
se t[i] == [[/]] entao t[i] = [[\/]] fim
se t[i] == [[+]] entao t[i] = [[\+]] fim
se t[i] == [[`]] entao t[i] = [[\`]] fim
se t[i] == [[´]] entao t[i] = [[\´]] fim
se t[i] == [[-]] entao t[i] = [[\-]] fim
se t[i] == [[!]] entao t[i] = [[\!]] fim
se t[i] == [[@]] entao t[i] = [[\@]] fim
se t[i] == [[#]] entao t[i] = [[\#]] fim
se t[i] == [[$]] entao t[i] = [[\$]] fim
se t[i] == [[&]] entao t[i] = [[\&]] fim
se t[i] == [[*]] entao t[i] = [[\*]] fim
se t[i] == [[.]] entao t[i] = [[\.]] fim
se t[i] == [[,]] entao t[i] = [[\,]] fim
se t[i] == [[^]] entao t[i] = [[\^]] fim
se t[i] == [[~]] entao t[i] = [[\~]] fim
se t[i] == [[>]] entao t[i] = [[\>]] fim
se t[i] == [[<]] entao t[i] = [[\<]] fim
se t[i] == [[?]] entao t[i] = [[\?]] fim
fim
fim
se tipo(t) == 'tabela' entao R = tabela.concat(t,"") fim
retorne R
senao retorne('""')
fim
funcao EscapeMysql(R)
R = R:troque("(.*)\"(.*)","%1\\\"%2")
R = R:troque("(.*)\'(.*)","%1\\\'%2")
R = R:troque("(.*)\\(.*)","%1\\\\%2")
retorne R
fim
//apare string (trim) string em prisma
funcao apare(str)
str = str ou '';
se tipo(str) <> 'string' entao
erro("Tipo incorreto para funcao apare, espera-se uma strig");
fim
local strcorte = string.corte; //eficiencia rapidez por meio de var local
local ini = 1;
local final = #str;
//laço para inicio da string sem espacos
para i = 1 , #str inicio
local letra = strcorte(str, i , i);
se letra <> ' ' entao
ini = i; //se chega em uma letra marca o inicio e sai do laço
quebre; //sai do laco.
fim
//poe(letra);
fim//fim para
//laco para final da string excluindo espaços
para i = #str, 1, -1 inicio //-1 decrementa do final para o começo da string
local letra = strcorte(str, i , i);
se letra <> ' ' entao
final = i;
quebre;
fim
//poe (letra);
fim
//=============== CASO TUDO SEJA ESPACO:
se ini == 1 e final == #str entao retorne ''; fim //retorna string vazia
// agora cortando a string no tamanho exato sem os espaços ao redor.
retorne strcorte(str , ini, final);//retornando a str pronta
fim
str = ' ';
//testando, a str deve sair com os <<>> colados no inicio e fim sem espaços:
imprima( '<<' .. apare(str) .. '>>' );