static void handle_type_other(char *filename) { char *ext; ext = strrchr(filename, '.'); if (ext == 0) { if (is_ascii_file(filename)) { new_textview_window(filename); } else if (is_binary_type(filename)) { browser_exec_file(filename); } else { new_message_window(_("No Default Action for this Filetype")); } } // #ifdef MIKMOD // else if (is_mikmod_playlist_type(ext)) { // new_mikmod_player(filename); // } // else if (is_mikmod_song_type(ext)) { // new_mikmod_player_song(filename); // } // #endif // else if (is_image_type(ext)) { // new_image_window(filename); // } // #ifdef __linux__ // #ifndef MPDC // else if (is_mp3_type(ext)) { // new_mp3_window(filename, _("Unknown Album"), // _("Unknown Artist"), _("Unknown Title"), 0); // } // else if (is_aac_type(ext)) { // new_aac_window_get_meta(filename); // } // #endif /* !MPDC */ // else if (is_tzx_audio_type(ext)) { // new_tzx_playback_window(filename); // } // else if (is_raw_audio_type(ext)) { // new_playback_window(filename); // } // #endif /* __linux __ */ // else if (is_video_type(ext)) { // new_video_window(filename); // } else if (is_script_type(ext)) { browser_exec_file(filename); } else if (is_text_type(ext)||is_ascii_file(filename)) { new_textview_window(filename); } else if (is_binary_type(filename)) { browser_exec_file(filename); } else { new_message_window(_("No Default Action for this Filetype")); } }
bool FieldNormalizer::should_normalize() { MRN_DBUG_ENTER_METHOD(); DBUG_PRINT("info", ("mroonga: result_type = %u", field_->result_type())); DBUG_PRINT("info", ("mroonga: charset->name = %s", field_->charset()->name)); DBUG_PRINT("info", ("mroonga: charset->csname = %s", field_->charset()->csname)); DBUG_PRINT("info", ("mroonga: charset->state = %u", field_->charset()->state)); bool need_normalize_p; if (field_->charset()->state & (MY_CS_BINSORT | MY_CS_CSSORT)) { need_normalize_p = false; DBUG_PRINT("info", ("mroonga: should_normalize: false: sort is required")); } else { if (is_text_type()) { need_normalize_p = true; DBUG_PRINT("info", ("mroonga: should_normalize: true: text type")); } else { need_normalize_p = false; DBUG_PRINT("info", ("mroonga: should_normalize: false: no text type")); } } DBUG_RETURN(need_normalize_p); }
static Datum tsvector_update_trigger(PG_FUNCTION_ARGS, bool config_column) { TriggerData *trigdata; Trigger *trigger; Relation rel; HeapTuple rettuple = NULL; int tsvector_attr_num, i; ParsedText prs; Datum datum; bool isnull; text *txt; Oid cfgId; /* Check call context */ if (!CALLED_AS_TRIGGER(fcinfo)) /* internal error */ elog(ERROR, "tsvector_update_trigger: not fired by trigger manager"); trigdata = (TriggerData *) fcinfo->context; if (!TRIGGER_FIRED_FOR_ROW(trigdata->tg_event)) elog(ERROR, "tsvector_update_trigger: must be fired for row"); if (!TRIGGER_FIRED_BEFORE(trigdata->tg_event)) elog(ERROR, "tsvector_update_trigger: must be fired BEFORE event"); if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event)) rettuple = trigdata->tg_trigtuple; else if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) rettuple = trigdata->tg_newtuple; else elog(ERROR, "tsvector_update_trigger: must be fired for INSERT or UPDATE"); trigger = trigdata->tg_trigger; rel = trigdata->tg_relation; if (trigger->tgnargs < 3) elog(ERROR, "tsvector_update_trigger: arguments must be tsvector_field, ts_config, text_field1, ...)"); /* Find the target tsvector column */ tsvector_attr_num = SPI_fnumber(rel->rd_att, trigger->tgargs[0]); if (tsvector_attr_num == SPI_ERROR_NOATTRIBUTE) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("tsvector column \"%s\" does not exist", trigger->tgargs[0]))); if (!is_expected_type(SPI_gettypeid(rel->rd_att, tsvector_attr_num), TSVECTOROID)) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("column \"%s\" is not of tsvector type", trigger->tgargs[0]))); /* Find the configuration to use */ if (config_column) { int config_attr_num; config_attr_num = SPI_fnumber(rel->rd_att, trigger->tgargs[1]); if (config_attr_num == SPI_ERROR_NOATTRIBUTE) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("configuration column \"%s\" does not exist", trigger->tgargs[1]))); if (!is_expected_type(SPI_gettypeid(rel->rd_att, config_attr_num), REGCONFIGOID)) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("column \"%s\" is not of regconfig type", trigger->tgargs[1]))); datum = SPI_getbinval(rettuple, rel->rd_att, config_attr_num, &isnull); if (isnull) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("configuration column \"%s\" must not be null", trigger->tgargs[1]))); cfgId = DatumGetObjectId(datum); } else { List *names; names = stringToQualifiedNameList(trigger->tgargs[1]); /* require a schema so that results are not search path dependent */ if (list_length(names) < 2) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("text search configuration name \"%s\" must be schema-qualified", trigger->tgargs[1]))); cfgId = get_ts_config_oid(names, false); } /* initialize parse state */ prs.lenwords = 32; prs.curwords = 0; prs.pos = 0; prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords); /* find all words in indexable column(s) */ for (i = 2; i < trigger->tgnargs; i++) { int numattr; numattr = SPI_fnumber(rel->rd_att, trigger->tgargs[i]); if (numattr == SPI_ERROR_NOATTRIBUTE) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("column \"%s\" does not exist", trigger->tgargs[i]))); if (!is_text_type(SPI_gettypeid(rel->rd_att, numattr))) ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("column \"%s\" is not of a character type", trigger->tgargs[i]))); datum = SPI_getbinval(rettuple, rel->rd_att, numattr, &isnull); if (isnull) continue; txt = DatumGetTextP(datum); parsetext(cfgId, &prs, VARDATA(txt), VARSIZE(txt) - VARHDRSZ); if (txt != (text *) DatumGetPointer(datum)) pfree(txt); } /* make tsvector value */ if (prs.curwords) { datum = PointerGetDatum(make_tsvector(&prs)); rettuple = SPI_modifytuple(rel, rettuple, 1, &tsvector_attr_num, &datum, NULL); pfree(DatumGetPointer(datum)); } else { TSVector out = palloc(CALCDATASIZE(0, 0)); SET_VARSIZE(out, CALCDATASIZE(0, 0)); out->size = 0; datum = PointerGetDatum(out); rettuple = SPI_modifytuple(rel, rettuple, 1, &tsvector_attr_num, &datum, NULL); pfree(prs.words); } if (rettuple == NULL) /* internal error */ elog(ERROR, "tsvector_update_trigger: %d returned by SPI_modifytuple", SPI_result); return PointerGetDatum(rettuple); }