diff options
author | drh <drh@noemail.net> | 2020-01-09 20:44:37 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-01-09 20:44:37 +0000 |
commit | bebce86cde221fdaaf084d296ab811af1e5a3cf2 (patch) | |
tree | 14fce64f57bc80fffa399ae283d980e06ea91a27 /src/resolve.c | |
parent | 32d184e049b5a30d39b01be1b310c563ae716d23 (diff) | |
parent | b84fda37efdd612288c1bc4933fa3ae6bcc2ffbc (diff) | |
download | sqlite-bebce86cde221fdaaf084d296ab811af1e5a3cf2.tar.gz sqlite-bebce86cde221fdaaf084d296ab811af1e5a3cf2.zip |
Merge in the untrusted-schema enhancements.
See [/doc/87aea3ab1cdda453/doc/trusted-schema.md|doc/trusted-schema.md]
for details.
FossilOrigin-Name: 5720924cb07766cd54fb042da58f4b4acf12b60029fba86a23a606ad0d0f7c68
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/resolve.c b/src/resolve.c index 31b443ed8..3e5ac16e2 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -876,24 +876,23 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ }else{ assert( (NC_SelfRef & 0xff)==NC_SelfRef ); /* Must fit in 8 bits */ pExpr->op2 = pNC->ncFlags & NC_SelfRef; + if( pNC->ncFlags & NC_FromDDL ) ExprSetProperty(pExpr, EP_FromDDL); } if( (pDef->funcFlags & SQLITE_FUNC_INTERNAL)!=0 && pParse->nested==0 && (pParse->db->mDbFlags & DBFLAG_InternalFunc)==0 ){ /* Internal-use-only functions are disallowed unless the - ** SQL is being compiled using sqlite3NestedParse() */ + ** SQL is being compiled using sqlite3NestedParse() or + ** the SQLITE_TESTCTRL_INTERNAL_FUNCTIONS test-control has be + ** used to activate internal functionsn for testing purposes */ no_such_func = 1; pDef = 0; }else - if( (pDef->funcFlags & SQLITE_FUNC_DIRECT)!=0 - && ExprHasProperty(pExpr, EP_Indirect) + if( (pDef->funcFlags & (SQLITE_FUNC_DIRECT|SQLITE_FUNC_UNSAFE))!=0 && !IN_RENAME_OBJECT ){ - /* Functions tagged with SQLITE_DIRECTONLY may not be used - ** inside of triggers and views */ - sqlite3ErrorMsg(pParse, "%s() prohibited in triggers and views", - pDef->zName); + sqlite3ExprFunctionUsable(pParse, pExpr, pDef); } } @@ -1885,6 +1884,11 @@ int sqlite3ResolveSelfReference( sSrc.a[0].zName = pTab->zName; sSrc.a[0].pTab = pTab; sSrc.a[0].iCursor = -1; + if( pTab->pSchema!=pParse->db->aDb[1].pSchema ){ + /* Cause EP_FromDDL to be set on TK_FUNCTION nodes of non-TEMP + ** schema elements */ + type |= NC_FromDDL; + } } sNC.pParse = pParse; sNC.pSrcList = &sSrc; |