private static void GetLastRowId(DataConnection conn, IDbCommand cmd, Vita.Entities.Runtime.EntityRecord rec) { var idCmd = conn.DbConnection.CreateCommand(); idCmd.CommandText = "SELECT last_insert_rowid();"; idCmd.Transaction = conn.DbTransaction; var id = idCmd.ExecuteScalar(); //it is Int64 Util.Check(id != null, "Failed to retrieve identity value for inserted row. Command: " + idCmd.CommandText); var member = rec.EntityInfo.Members.First(m => m.Flags.IsSet(EntityMemberFlags.Identity)); //idPrm.SourceColumn.Member; if (member.DataType != id.GetType()) id = Convert.ChangeType(id, member.DataType); rec.SetValueDirect(member, id); idCmd.Connection = null; //to dispose prepared command }
// We cannot use regular access thru EntitySession - db info/version loads at the very start of connecting to db; // the entity app is not ready yet (schema not updated, etc). public DbVersionInfo LoadDbInfo(DbSettings settings, string appName, Vita.Data.Driver.DbModelLoader loader) { var thisSchema = settings.ModelConfig.GetSchema(this.Area); if (!loader.TableExists(thisSchema, "DbInfo")) return null; var dbInfoTableName = settings.Driver.GetFullName(thisSchema, "DbInfo"); var dbModuleInfoTableName = settings.Driver.GetFullName(thisSchema, "DbModuleInfo"); try { var dbInfo = new DbVersionInfo(); var sql = string.Format("SELECT * FROM {0};", dbInfoTableName); var dt = loader.ExecuteSelect(sql); var appRow = dt.Rows.FindRow("AppName", appName); if (appRow != null) { dbInfo.InstanceType = (DbInstanceType)appRow.GetAsInt("InstanceType"); var strVersion = appRow.GetAsString("Version"); Version dbVersion; if (Version.TryParse(strVersion, out dbVersion)) dbInfo.Version = dbVersion; // 'Values' column appears in v 1.1 if (dt.Columns.Contains("Values")) { var strValues = appRow.GetAsString("Values"); DeserializeValues(dbInfo, strValues); } } //if appRow //Read modules sql = string.Format("SELECT * FROM {0};", dbModuleInfoTableName); dt = loader.ExecuteSelect(sql); foreach(DataRow row in dt.Rows) { var moduleName = row.GetAsString("ModuleName"); var schema = row.GetAsString("Schema"); var strModuleVersion = row.GetAsString("Version"); Version v; if (!Version.TryParse(strModuleVersion, out v)) v = null; dbInfo.Modules.Add(new ModuleDbVersionInfo(schema, moduleName, v)); } return dbInfo; } catch (Exception ex) { Trace.WriteLine("Failed to load DbInfo record: " + ex.ToLogString()); //Debugger.Break(); return null; } }
public virtual bool IsSqlTier(Expression expression, Vita.Entities.Linq.LinqCommandKind kind) { var sqlExpr = expression as SqlExpression; if (sqlExpr != null) { switch(sqlExpr.SqlNodeType) { case SqlExpressionType.Select: case SqlExpressionType.Column: case SqlExpressionType.Table: case SqlExpressionType.ExternalValue: case SqlExpressionType.SqlFunction: return true; case SqlExpressionType.Group: case SqlExpressionType.MetaTable: return false; default: return true; } } switch (expression.NodeType) { case ExpressionType.ArrayLength: case ExpressionType.ArrayIndex: case ExpressionType.Call: case ExpressionType.Convert: case ExpressionType.ConvertChecked: case ExpressionType.Invoke: case ExpressionType.Lambda: case ExpressionType.ListInit: case ExpressionType.MemberAccess: case ExpressionType.MemberInit: case ExpressionType.New: case ExpressionType.NewArrayInit: case ExpressionType.NewArrayBounds: case ExpressionType.Parameter: case ExpressionType.SubtractChecked: case ExpressionType.TypeAs: case ExpressionType.TypeIs: return false; default: return true; } }
public Exploit(GetConnection getconn, string package, string appkeypath) { _vita = new Vita(getconn, INSTALL_NAME, package, appkeypath); }
public SubSelectExpression(SelectExpression select, Type type, string alias, Vita.Data.Model.DbTableInfo tableInfo) : base(type, alias, tableInfo) { this.Select = select; this.Alias = alias; }
public override bool IsSqlTier(System.Linq.Expressions.Expression expression, Vita.Entities.Linq.LinqCommandKind queryUse) { //MS SQL does not allow comparison operations in SELECT list if (expression.Type == typeof(bool)) { switch (expression.NodeType) { case ExpressionType.LessThan: case ExpressionType.LessThanOrEqual: case ExpressionType.GreaterThan: case ExpressionType.GreaterThanOrEqual: case ExpressionType.Equal: case ExpressionType.NotEqual: return false; //means SQL wouldn't support it } }//if return base.IsSqlTier(expression, queryUse); }
public USB(string package, string appkeypath) { _vita = new Vita(INSTALL_NAME, package, appkeypath); }
public SqlBuilder(Vita.Data.Model.DbModel dbModel) { _dbModel = dbModel; _sqlProvider = _dbModel.LinqSqlProvider; }