private QueryParameter PrepareParameter(DeveelDbParameter parameter) { // TODO: If we have a Value that is a Stream object, upload it and get // back the object ID to replace the value if (parameter.SqlType == SqlTypeCode.Unknown) throw new ArgumentException("Cannot resolve Unknown SQL Type"); var name = parameter.ParameterName; if (String.IsNullOrEmpty(name)) name = QueryParameter.Marker; var meta = new List<DataTypeMeta>(); if (parameter.Size > 0) meta.Add(new DataTypeMeta("MaxSize", parameter.Size.ToString())); if (parameter.Precision > 0) meta.Add(new DataTypeMeta("Precision", parameter.Precision.ToString())); if (parameter.Scale > 0) meta.Add(new DataTypeMeta("Scale", parameter.Scale.ToString())); if (!String.IsNullOrEmpty(parameter.Locale)) meta.Add(new DataTypeMeta("Locale", parameter.Locale)); var dataType = SqlType.Resolve(parameter.SqlType, meta.ToArray()); var value = dataType.CreateFrom(parameter.Value); var queryParameter = new QueryParameter(name, dataType, value); queryParameter.Direction = GetParamDirection(parameter.Direction); return queryParameter; }
private void PrepareCommand() { if (Parameters != null && Parameters.Count > 0) { preparedParameters = new List<QueryParameter>(Parameters.Count); foreach (DeveelDbParameter parameter in Parameters) { DeveelDbLob lob = null; if (parameter.Value is DeveelDbLob) { lob = (DeveelDbLob) parameter.Value; } else if (parameter.Value is Stream) { var stream = (Stream) parameter.Value; lob = new DeveelDbLob(parameter.Size); stream.CopyTo(lob); } if (lob != null) { var objId = DeveelDbLob.Upload(connection, lob); } var sqlType = parameter.GetSqlType(); var queryParam = new QueryParameter(parameter.ParameterName, sqlType); queryParam.Value = sqlType.CreateFrom(parameter.Value); preparedParameters.Add(queryParam); } } }
private QueryParameter PrepareParameter(DeveelDbParameter parameter) { // TODO: If we have a Value that is a Stream object, upload it and get // back the object ID to replace the value var name = parameter.ParameterName; if (String.IsNullOrEmpty(name)) name = QueryParameter.Marker; var meta = new [] { new DataTypeMeta("MaxSize", parameter.Size.ToString()), new DataTypeMeta("Precision", parameter.Precision.ToString()), new DataTypeMeta("Scale", parameter.Scale.ToString()), new DataTypeMeta("Locale", parameter.Locale) }; var dataType = SqlType.Resolve(parameter.SqlType, meta); var value = dataType.CreateFrom(parameter.Value); var queryParameter = new QueryParameter(name, dataType, value); queryParameter.Direction = GetParamDirection(parameter.Direction); return queryParameter; }
private SqlQuery CreateQuery() { QueryParameter[] queryParameters; if (prepared && preparedParameters != null) { queryParameters = preparedParameters.ToArray(); } else { queryParameters = new QueryParameter[parameters.Count]; for (int i = 0; i < parameters.Count; i++) { var parameter = parameters[i]; var queryParam = PrepareParameter(parameter); queryParameters[i] = queryParam; } } var query = new SqlQuery(CommandText, Connection.Settings.ParameterStyle); // now verify all parameter names are consistent foreach (var parameter in queryParameters) { if (connection.Settings.ParameterStyle == QueryParameterStyle.Marker) { if (!String.IsNullOrEmpty(parameter.Name) && parameter.Name != QueryParameter.Marker) throw new InvalidOperationException(); } else if (connection.Settings.ParameterStyle == QueryParameterStyle.Named) { if (String.IsNullOrEmpty(parameter.Name)) throw new InvalidOperationException("Named parameters must have a name defined."); if (parameter.Name == QueryParameter.Marker) throw new InvalidOperationException("Cannot set the parameter marker in a named parameter query."); var paramName = parameter.Name; if (paramName[0] == QueryParameter.NamePrefix) paramName = paramName.Substring(1); if (paramName.Length < 1) throw new InvalidOperationException("Invalid parameter name: cannot specify only the variable bind prefix."); } query.Parameters.Add(parameter); } return query; }
private SqlQuery CreateQuery() { QueryParameter[] queryParameters; if (prepared && preparedParameters != null) { queryParameters = preparedParameters.ToArray(); } else { queryParameters = new QueryParameter[parameters.Count]; for (int i = 0; i < parameters.Count; i++) { var parameter = parameters[i]; var queryParam = PrepareParameter(parameter); queryParameters[i] = queryParam; } } var query = new SqlQuery(CommandText); // now verify all parameter names are consistent foreach (var parameter in queryParameters) { if (connection.Settings.ParameterStyle == QueryParameterStyle.Marker) { if (!String.IsNullOrEmpty(parameter.Name) && parameter.Name != QueryParameter.Marker) throw new InvalidOperationException(); } else if (connection.Settings.ParameterStyle == QueryParameterStyle.Named) { if (String.IsNullOrEmpty(parameter.Name)) throw new InvalidOperationException("Named parameters must have a name defined."); if (parameter.Name == QueryParameter.Marker) throw new InvalidOperationException(); if (parameter.Name.Length <= 1) throw new InvalidOperationException(); if (!Char.IsLetter(parameter.Name[0]) && parameter.Name[0] != QueryParameter.NamePrefix) throw new InvalidOperationException(); } query.Parameters.Add(parameter); } return query; }