예제 #1
0
        public void EndsWithParameter()
        {
            SqlString sql = new SqlString(new object[] { "", "select", " from table where id = ", Parameter.Placeholder });

            Assert.IsFalse(sql.EndsWith("'"));
            Assert.IsFalse(sql.EndsWith(""));
        }
예제 #2
0
        public void EndsWithEmptyString()
        {
            SqlString sql = new SqlString(new string[] { "", "select", " from table", "" });

            Assert.IsTrue(sql.EndsWith("ble"));
            Assert.IsFalse(sql.EndsWith("'"));
        }
예제 #3
0
        public override SqlString ApplyLocksToSql(SqlString sql, IDictionary <string, LockMode> aliasedLockModes, IDictionary <string, string[]> keyColumnNames)
        {
            // TODO:  merge additional lockoptions support in Dialect.applyLocksToSql

            var buffer     = new StringBuilder(sql.ToString());
            int correction = 0;

            foreach (KeyValuePair <string, LockMode> entry in aliasedLockModes)
            {
                LockMode mode = entry.Value;

                if (mode.GreaterThan(LockMode.Read))
                {
                    string alias = entry.Key;
                    int    start = -1;
                    int    end   = -1;

                    if (sql.EndsWith(" " + alias))
                    {
                        start = (sql.Length - alias.Length) + correction;
                        end   = start + alias.Length;
                    }
                    else
                    {
                        int position = sql.IndexOfCaseInsensitive(" " + alias + " ");

                        if (position <= -1)
                        {
                            position = sql.IndexOfCaseInsensitive(" " + alias + ",");
                        }

                        if (position > -1)
                        {
                            start = position + correction + 1;
                            end   = start + alias.Length;
                        }
                    }

                    if (start > -1)
                    {
                        string lockHint = AppendLockHint(mode, alias);
                        buffer.Remove(start, end - start + 1);
                        buffer.Insert(start, lockHint);
                        correction += (lockHint.Length - alias.Length);
                    }
                }
            }
            return(new SqlString(buffer.ToString()));
        }