Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.script.inst.sql;
 
 import java.util.List;
 
 
 
 public class SqlInsert extends Instruction {
 	public void run(StackEntry stack) {
 		//stack.log().info("Doing a SQL INSERT on thread " + Thread.currentThread().getName());
 		
 		String dbname = stack.stringFromSource("Database""default");
 		String table = stack.stringFromSource("Table");
 
 		if (StringUtil.isEmpty(dbname) || StringUtil.isEmpty(table)) {
 			stack.log().error("Missing table for insert");
 			stack.resume();
 			return;
 		}
 		
 		XElement codeEl = stack.getInstruction().getXml();
 		
 		sb1.append("INSERT INTO " + table + " (");
 		
 		sb2.append(" VALUES (");
 		
 		List<XElementfields = codeEl.selectAll("Field");
 		boolean firstfld = true;
 		Object[] vals = new Object[fields.size()];
     	int pos = 0;
 		
 		for (XElement el : fields) {
 			if (firstfld)
 				firstfld = false;
 			else {
 				sb1.append(',');
 				sb2.append(',');
 			}
 			
 			sb1.append(stack.stringFromElement(el"Name"));
 			sb2.append('?');
 			
         	vals[pos] = SqlInsert.convertValueToInternal(stackel);
 			pos++;
 		}
 		
 		sb1.append(')');
 		sb2.append(')');
 		
 		// no fields found
 		if (firstfld) {
 			stack.resume();
 			return;
 		}
 		
 		String sql = sb1.toString() + sb2.toString();
 		
 		
 		if (db == null) {
 			stack.log().errorTr(185, dbname);
 			stack.resume();
 			return;
		}
        
		FuncResult<Integerrsres = db.executeInsert(sqlvals);
		stack.log().copyMessages(rsres);
		if (rsres.getResult() != 1) 
			stack.log().error("INSERT failed, expected 1 row result count");		
		stack.resume();
	}
	public void cancel(StackEntry stack) {
		// do nothing, this isn't cancellable
	}
	static public Object convertValueToInternal(StackEntry stackXElement el) {
		String ftype = stack.stringFromElement(el"Type");
        Struct dt = stack.refFromElement(el"Value");
        
        SqlType stype = SqlType.valueOf(ftype);
        
		if (stype == .) {
        	Long ret = Struct.objectToInteger(dt);
        	return (ret == null) ? . : ret;
		}
		if (stype == .) {
        	Long ret = Struct.objectToInteger(dt);
        	return (ret == null) ? . : ret;
		}
		if (stype == .) {
        	BigDecimal ret = Struct.objectToDecimal(dt);
        	return (ret == null) ? . : ret;
		}
		if (stype == .) {
        	BigDecimal ret = Struct.objectToDecimal(dt);
        	return (ret == null) ? . : ret;
		}
		if (stype == .) {
        	DateTime ret = Struct.objectToDateTime(dt);
        	return (ret == null) ? . : ret;
		}
		if (stype == .) {
			if (dt == .)
        		return .;
        	String ret = Struct.objectToString(dt);
        	
        	if (ret == null)
        		return .;
			if ("True".equals(stack.stringFromElement(el"Encrypt")))
    		return ret;
		}
		if (dt == .)
    		return .;
    	String ret = Struct.objectToString(dt);
    	
    	if (ret == null)
    		return .;
    	
		if ("True".equals(stack.stringFromElement(el"Encrypt")))
    	return ret;
	}
New to GrepCode? Check out our FAQ X