* [pgsql] Use "IF" insteal of IF.
This commit is contained in:
@@ -45,3 +45,25 @@ BEGIN
|
||||
-- 返回res
|
||||
RETURN res;
|
||||
END FIND_IN_SET;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
p_condition BOOLEAN, -- 判断条件
|
||||
p_true_val ANYTYPE, -- true分支返回值(任意类型)
|
||||
p_false_val ANYTYPE -- false分支返回值(任意类型)
|
||||
) RETURNS ANYTYPE
|
||||
AS
|
||||
BEGIN
|
||||
-- 仅校验条件非空,不校验类型
|
||||
IF p_condition IS NULL THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, '判断条件不能为NULL');
|
||||
END IF;
|
||||
|
||||
-- 核心逻辑:直接返回不同类型值
|
||||
IF p_condition THEN
|
||||
RETURN p_true_val; -- 如:字符串
|
||||
ELSE
|
||||
RETURN p_false_val; -- 如:数值
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
+54
-6
@@ -256,7 +256,7 @@ END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val BOOLEAN,
|
||||
false_val BOOLEAN
|
||||
@@ -272,7 +272,7 @@ $$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val DOUBLE PRECISION,
|
||||
false_val INTEGER
|
||||
@@ -288,7 +288,55 @@ $$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val DOUBLE PRECISION,
|
||||
false_val DOUBLE PRECISION
|
||||
) RETURNS DOUBLE PRECISION AS $$
|
||||
BEGIN
|
||||
IF condition THEN
|
||||
RETURN true_val;
|
||||
ELSE
|
||||
RETURN false_val;
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val TEXT,
|
||||
false_val TEXT
|
||||
) RETURNS TEXT AS $$
|
||||
BEGIN
|
||||
IF condition THEN
|
||||
RETURN true_val;
|
||||
ELSE
|
||||
RETURN false_val;
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val INTEGER,
|
||||
false_val INTEGER
|
||||
) RETURNS INTEGER AS $$
|
||||
BEGIN
|
||||
IF condition THEN
|
||||
RETURN true_val;
|
||||
ELSE
|
||||
RETURN false_val;
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val TEXT,
|
||||
false_val DATE
|
||||
@@ -304,7 +352,7 @@ $$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val DATE,
|
||||
false_val DATE
|
||||
@@ -320,7 +368,7 @@ $$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val timestamp without time zone,
|
||||
false_val DATE
|
||||
@@ -336,7 +384,7 @@ $$ LANGUAGE plpgsql;
|
||||
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION IF(
|
||||
CREATE OR REPLACE FUNCTION "IF"(
|
||||
condition BOOLEAN,
|
||||
true_val timestamp without time zone,
|
||||
false_val timestamp without time zone
|
||||
|
||||
+2
-22
@@ -606,28 +606,7 @@ class dbh
|
||||
|
||||
if(stripos($sql, 'CREATE OR REPLACE VIEW ') === 0)
|
||||
{
|
||||
// Modify if function.
|
||||
$fieldsBegin = stripos($sql, 'select');
|
||||
$fieldsEnd = stripos($sql, 'from');
|
||||
$fields = substr($sql, $fieldsBegin+6, $fieldsEnd-$fieldsBegin-6);
|
||||
$fieldList = preg_split("/,(?![^(]+\))/", $fields);
|
||||
foreach($fieldList as $key => $field)
|
||||
{
|
||||
$aliasPos = stripos($field, ' AS ');
|
||||
$subField = substr($field, 0, $aliasPos);
|
||||
if(stripos($field, 'SUM(') === 0) $subField = substr($subField, 4, -1);
|
||||
|
||||
$fieldParts = preg_split("/\+(?![^(]+\))/", $subField);
|
||||
foreach($fieldParts as $pkey => $fieldPart)
|
||||
{
|
||||
$originField = trim($fieldPart);
|
||||
if(stripos($originField, 'if(') === false) continue;
|
||||
$fieldParts[$pkey] = $this->formatDmIfFunction($originField);
|
||||
}
|
||||
$fieldList[$key] = str_replace($subField, implode(' + ', $fieldParts), $field);
|
||||
}
|
||||
$fields = implode(',', $fieldList);
|
||||
$sql = substr($sql, 0, $fieldsBegin+6) . $fields . substr($sql, $fieldsEnd);
|
||||
$sql = $this->formatField($sql);
|
||||
return str_replace('CREATE OR REPLACE VIEW ', 'CREATE VIEW ', $sql);
|
||||
}
|
||||
elseif(stripos($sql, 'CREATE UNIQUE INDEX') === 0 || stripos($sql, 'CREATE INDEX') === 0)
|
||||
@@ -833,6 +812,7 @@ class dbh
|
||||
if($this->dbConfig->driver == 'dm' || in_array($this->dbConfig->driver, $this->config->pgsqlDriverList))
|
||||
{
|
||||
$sql = str_replace('`', '"', $sql);
|
||||
$sql = preg_replace('/(?<!\w)if\(/i', '"IF"(', $sql);
|
||||
}
|
||||
|
||||
return $sql;
|
||||
|
||||
Reference in New Issue
Block a user