wxString pgOperatorClass::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Operator Class: ") + GetName() + wxT("\n\n") + wxT("-- DROP OPERATOR CLASS ") + GetQuotedFullIdentifier() + wxT(" USING ") + GetAccessMethod() + wxT(";") + wxT("\n\nCREATE OPERATOR CLASS ") + GetQuotedFullIdentifier(); if (GetOpcDefault()) sql += wxT(" DEFAULT"); sql += wxT("\n FOR TYPE ") + GetInType() + wxT(" USING ") + GetAccessMethod() + wxT(" AS"); unsigned int i; bool needComma = false; for (i = 0 ; i < operators.Count() ; i++) { if (needComma) sql += wxT(","); sql += wxT("\n OPERATOR ") + operators.Item(i); needComma = true; } for (i = 0 ; i < functions.Count() ; i++) { if (needComma) sql += wxT(","); sql += wxT("\n FUNCTION ") + quotedFunctions.Item(i); needComma = true; } AppendIfFilled(sql, wxT("\n STORAGE "), GetKeyType()); sql += wxT(";\n"); } return sql; }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void matbyscal_e(scicos_block *block, int flag) { if (flag == 1) { int i = 0; double v = 0.; int ut = GetInType(block, 1); int mu = GetOutPortRows(block, 1); int nu = GetOutPortCols(block, 1); double *rpar = GetRparPtrs(block); switch (ut) { case SCSINT32_N : { long *u1 = Getint32InPortPtrs(block, 1); long *u2 = Getint32InPortPtrs(block, 2); long *y1 = Getint32OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (long)v; } } break; } case SCSINT16_N : { short *u1 = Getint16InPortPtrs(block, 1); short *u2 = Getint16InPortPtrs(block, 2); short *y1 = Getint16OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (short)v; } } break; } case SCSINT8_N : { char *u1 = Getint8InPortPtrs(block, 1); char *u2 = Getint8InPortPtrs(block, 2); char *y1 = Getint8OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (char)v; } } break; } case SCSUINT32_N : { unsigned long *u1 = Getuint32InPortPtrs(block, 1); unsigned long *u2 = Getuint32InPortPtrs(block, 2); unsigned long *y1 = Getuint32OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (unsigned long)v; } } break; } case SCSUINT16_N : { unsigned short *u1 = Getuint16InPortPtrs(block, 1); unsigned short *u2 = Getuint16InPortPtrs(block, 2); unsigned short *y1 = Getuint16OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (unsigned short)v; } } break; } case SCSUINT8_N : { unsigned char *u1 = Getuint8InPortPtrs(block, 1); unsigned char *u2 = Getuint8InPortPtrs(block, 2); unsigned char *y1 = Getuint8OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[0]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (unsigned char)v; } } break; } default : { set_block_error(-4); return; } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void matmul2_m(scicos_block *block,int flag) { if (flag==1){ int i = 0; int ut=GetInType(block,1); int mu=GetOutPortRows(block,1); int nu=GetOutPortCols(block,1); switch (ut) { case SCSREAL_N :{ double *u1=GetRealInPortPtrs(block,1); double *u2=GetRealInPortPtrs(block,2); double *y1=GetRealOutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSINT32_N :{ long *u1=Getint32InPortPtrs(block,1); long *u2=Getint32InPortPtrs(block,2); long *y1=Getint32OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSINT16_N :{ short *u1=Getint16InPortPtrs(block,1); short *u2=Getint16InPortPtrs(block,2); short *y1=Getint16OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSINT8_N :{ char *u1=Getint8InPortPtrs(block,1); char *u2=Getint8InPortPtrs(block,2); char *y1=Getint8OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSUINT32_N :{ unsigned long *u1=Getuint32InPortPtrs(block,1); unsigned long *u2=Getuint32InPortPtrs(block,2); unsigned long *y1=Getuint32OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSUINT16_N :{ unsigned short *u1=Getuint16InPortPtrs(block,1); unsigned short *u2=Getuint16InPortPtrs(block,2); unsigned short *y1=Getuint16OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSUINT8_N :{ unsigned char *u1=Getuint8InPortPtrs(block,1); unsigned char *u2=Getuint8InPortPtrs(block,2); unsigned char *y1=Getuint8OutPortPtrs(block,1); matmul2(y1,u1,u2,mu,nu); break;} case SCSCOMPLEX_N :{ double *u1r=GetRealInPortPtrs(block,1); double *u2r=GetRealInPortPtrs(block,2); double *y1r=GetRealOutPortPtrs(block,1); double *u1i=GetImagInPortPtrs(block,1); double *u2i=GetImagInPortPtrs(block,2); double *y1i=GetImagOutPortPtrs(block,1); for (i=0;i<mu*nu;i++) {y1r[i]=(u1r[i]*u2r[i])-(u1i[i]*u2i[i]); y1i[i]=(u1r[i]*u2i[i])+(u1i[i]*u2r[i]);} break;} default :{ set_block_error(-4); return;} } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void matmul2_e(scicos_block *block, int flag) { if (flag == 1) { int i = 0; double v = 0.; int ut = GetInType(block, 1); int mu = GetOutPortRows(block, 1); int nu = GetOutPortCols(block, 1); double *rpar = GetRparPtrs(block); switch (ut) { case SCSINT32_N : { SCSINT32_COP *u1 = Getint32InPortPtrs(block, 1); SCSINT32_COP *u2 = Getint32InPortPtrs(block, 2); SCSINT32_COP *y1 = Getint32OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSUINT32_COP)v; } } break; } case SCSINT16_N : { SCSINT16_COP *u1 = Getint16InPortPtrs(block, 1); SCSINT16_COP *u2 = Getint16InPortPtrs(block, 2); SCSINT16_COP *y1 = Getint16OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSINT16_COP)v; } } break; } case SCSINT8_N : { SCSINT8_COP *u1 = Getint8InPortPtrs(block, 1); SCSINT8_COP *u2 = Getint8InPortPtrs(block, 2); SCSINT8_COP *y1 = Getint8OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSINT8_COP)v; } } break; } case SCSUINT32_N : { SCSUINT32_COP *u1 = Getuint32InPortPtrs(block, 1); SCSUINT32_COP *u2 = Getuint32InPortPtrs(block, 2); SCSUINT32_COP *y1 = Getuint32OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSUINT32_COP)v; } } break; } case SCSUINT16_N : { SCSUINT16_COP *u1 = Getuint16InPortPtrs(block, 1); SCSUINT16_COP *u2 = Getuint16InPortPtrs(block, 2); SCSUINT16_COP *y1 = Getuint16OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSUINT16_COP)v; } } break; } case SCSUINT8_N : { SCSUINT8_COP *u1 = Getuint8InPortPtrs(block, 1); SCSUINT8_COP *u2 = Getuint8InPortPtrs(block, 2); SCSUINT8_COP *y1 = Getuint8OutPortPtrs(block, 1); for (i = 0; i < mu * nu; i++) { v = (double)u1[i] * (double)u2[i]; if ((v < rpar[0]) | (v > rpar[1])) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y1[i] = (SCSUINT8_COP)v; } } break; } default : { set_block_error(-4); return; } } } }
void pgOperatorClass::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { if (!expandedKids) { expandedKids = true; pgSet *set; if (!GetConnection()->BackendMinimumVersion(8, 3)) { set = ExecuteSet( wxT("SELECT amopstrategy, amopreqcheck, oprname, lt.typname as lefttype, rt.typname as righttype\n") wxT(" FROM pg_amop am\n") wxT(" JOIN pg_operator op ON amopopr=op.oid\n") wxT(" LEFT OUTER JOIN pg_type lt ON lt.oid=oprleft\n") wxT(" LEFT OUTER JOIN pg_type rt ON rt.oid=oprright\n") wxT(" WHERE amopclaid=") + GetOidStr() + wxT("\n") wxT(" ORDER BY amopstrategy")); } else if (!GetConnection()->BackendMinimumVersion(8, 4)) { set = ExecuteSet( wxT("SELECT amopstrategy, amopreqcheck, oprname, lt.typname as lefttype, rt.typname as righttype\n") wxT(" FROM pg_amop am\n") wxT(" JOIN pg_operator op ON amopopr=op.oid\n") wxT(" JOIN pg_opfamily opf ON amopfamily = opf.oid\n") wxT(" JOIN pg_opclass opc ON opf.oid = opcfamily\n") wxT(" LEFT OUTER JOIN pg_type lt ON lt.oid=oprleft\n") wxT(" LEFT OUTER JOIN pg_type rt ON rt.oid=oprright\n") wxT(" WHERE opc.oid=") + GetOidStr() + wxT("\n") wxT(" AND amopmethod = opf.opfmethod\n") wxT(" AND amoplefttype = op.oprleft AND amoprighttype = op.oprright\n") wxT(" ORDER BY amopstrategy")); } else { set = ExecuteSet( wxT("SELECT amopstrategy, oprname, lt.typname as lefttype, rt.typname as righttype\n") wxT(" FROM pg_amop am\n") wxT(" JOIN pg_operator op ON amopopr=op.oid\n") wxT(" JOIN pg_opfamily opf ON amopfamily = opf.oid\n") wxT(" JOIN pg_opclass opc ON opf.oid = opcfamily\n") wxT(" LEFT OUTER JOIN pg_type lt ON lt.oid=oprleft\n") wxT(" LEFT OUTER JOIN pg_type rt ON rt.oid=oprright\n") wxT(" WHERE opc.oid=") + GetOidStr() + wxT("\n") wxT(" AND amopmethod = opf.opfmethod\n") wxT(" AND amoplefttype = op.oprleft AND amoprighttype = op.oprright\n") wxT(" ORDER BY amopstrategy")); } if (set) { while (!set->Eof()) { wxString str = set->GetVal(wxT("amopstrategy")) + wxT(" ") + set->GetVal(wxT("oprname")); wxString lt = set->GetVal(wxT("lefttype")); wxString rt = set->GetVal(wxT("righttype")); if (lt == GetInType() && (rt.IsEmpty() || rt == GetInType())) lt = wxEmptyString; if (rt == GetInType() && lt.IsEmpty()) rt = wxEmptyString; if (!lt.IsEmpty() || !rt.IsEmpty()) { str += wxT("("); if (!lt.IsEmpty()) { str += lt; if (!rt.IsEmpty()) str += wxT(", "); } if (!rt.IsEmpty()) str += rt; str += wxT(")"); } if (!GetConnection()->BackendMinimumVersion(8, 4)) { if (set->GetBool(wxT("amopreqcheck"))) str += wxT(" RECHECK"); } operators.Add(str); set->MoveNext(); } delete set; } if (!GetConnection()->BackendMinimumVersion(8, 3)) { set = ExecuteSet( wxT("SELECT amprocnum, amproc::oid\n") wxT(" FROM pg_amproc am\n") wxT(" WHERE amopclaid=") + GetOidStr() + wxT("\n") wxT(" ORDER BY amprocnum")); } else { set = ExecuteSet( wxT("SELECT amprocnum, amproc::oid\n") wxT(" FROM pg_amproc am\n") wxT(" JOIN pg_opfamily opf ON amprocfamily = opf.oid\n") wxT(" JOIN pg_opclass opc ON opf.oid = opcfamily\n") wxT(" WHERE opc.oid=") + GetOidStr() + wxT("\n") wxT(" AND amproclefttype = opc.opcintype AND amprocrighttype = opc.opcintype\n") wxT(" ORDER BY amprocnum")); } if (set) { while (!set->Eof()) { wxString amproc = set->GetVal(wxT("amproc")); functionOids.Add(amproc); // We won't build a PG_FUNCTIONS collection under OperatorClass, so we create // temporary function items pgFunction *function = functionFactory.AppendFunctions(this, GetSchema(), 0, wxT(" WHERE pr.oid=") + amproc); if (function) { functions.Add(set->GetVal(wxT("amprocnum")) + wxT(" ") + function->GetFullName()); quotedFunctions.Add(set->GetVal(wxT("amprocnum")) + wxT(" ") + function->GetQuotedFullIdentifier() + wxT("(") + function->GetArgSigList() + wxT(")")); delete function; } set->MoveNext(); } delete set; } } if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("OID"), GetOid()); properties->AppendItem(_("Owner"), GetOwner()); properties->AppendYesNoItem(_("Default?"), GetOpcDefault()); properties->AppendItem(_("For type"), GetInType()); properties->AppendItem(_("Access method"), GetAccessMethod()); if (GetConnection()->BackendMinimumVersion(8, 3)) properties->AppendItem(_("Family"), GetFamily()); if (!GetKeyType().IsEmpty()) properties->AppendItem(_("Storage"), GetKeyType()); unsigned int i; for (i = 0 ; i < operators.Count() ; i++) properties->AppendItem(wxT("OPERATOR"), operators.Item(i)); for (i = 0 ; i < functions.Count() ; i++) properties->AppendItem(wxT("FUNCTION"), functions.Item(i)); properties->AppendYesNoItem(_("System operator class?"), GetSystemObject()); if (GetConnection()->BackendMinimumVersion(7, 5)) properties->AppendItem(_("Comment"), firstLineOnly(GetComment())); } }